Git 始めました
ワレットからカタログが送られてきた。ポイントで購入出来ますからどうぞってね。
みんな肉が大好きみたいで、おらが地方の牛はいらんかねと、各県自慢の牛が 載ってた。そんなに違いがあるんか? それにしても随分と高いね。高いのには 訳がある。
毎日お手入れして、ストレスが無いように育てたんだから、最後は大事に食べて 欲しいって、期待が込められているんだな。
牛と言ったら、ステーキかな、それとも焼肉?
ステーキのドンとか牛角は置いておいて、韓国の焼肉は旨かったなあ。 たれに漬け込んで、程よく味が滲みたやつ。チョゴリのおねーさんが、 巻物みたいになった肉を、鋏で ちょきちょきと切ってくれる。調理は包丁でするものと思っていた独身時代の オイラーには、鋏でちょきちょきにちょっとびっくりした思い出があるな。
韓国と言えば、他に記憶があるな。 88たばこね。今年も盛大に、世界大運動会が行われているけど、韓国では、 悲願の大運動会が1988年に行われ、それを記念して、88ってネーミングのたばこが 大流行してたな。
他には、家電品ですかね。目の付け所が違うメーカーから、マイナスイオン発生器が エントリーしてたぞ。本当に効果が有るんか? 前に自作した高圧発生器を 運用して、チェックしてから買うがよろし。
それにしても、今持ってるポイントでは、何も買えないな。もっとプリチャージ してからな。
ああ、型録有効期限が、9月末までですって。期間限定か。
python path とか
前回ちょっと調べた、モジュールを何処から読み出すかってやつ。実験してみた。 自前の仮想環境をONにしてる。
(mypy) sakae@ub:~$ ipython Python 3.5.2 (default, Jul 5 2016, 12:43:10) In [1]: import sys In [2]: sys.path Out[2]: ['', '/usr/bin', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-i386-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/home/sakae/mypy/lib/python3.5/site-packages', '/home/sakae/.local/lib/python3.5/site-packages', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3/dist-packages/IPython/extensions', '/home/sakae/.ipython']
実に色々な所から探してくるんですなあ。後、使ってるPythonの素性を調べる モジュールも有るのね。
(mypy) sakae@ub:~$ python -m sysconfig Platform: "linux-i686" Python version: "3.5" Current installation scheme: "posix_prefix" Paths: data = "/home/sakae/mypy" include = "/usr/include/python3.5m" platinclude = "/usr/include/python3.5m" platlib = "/home/sakae/mypy/lib/python3.5/site-packages" platstdlib = "/home/sakae/mypy/lib/python3.5" purelib = "/home/sakae/mypy/lib/python3.5/site-packages" scripts = "/home/sakae/mypy/bin" stdlib = "/usr/lib/python3.5" Variables: ABIFLAGS = "m" AC_APPLE_UNIVERSAL_BUILD = "0" AIX_GENUINE_CPLUSPLUS = "0" :
大量にデータが出てくるんだけど、perl -V した時よりずっと詳しいと思うぞ。 ABIFLAGSに指定されてるmが、python3.5mに乗り移っているのかな?
In [13]: sys.abiflags Out[13]: 'm'
で、取れる。これが何を意味するかと言うと PEP 3149 -- ABI version tagged .so filesらしい。これのURLがhttpsになってるのは、今風なSEO対策なんでしょうかね。
色々調べてみると、FreeBSDで失敗したscipyを自前でインストールは、そんな無謀な 事はするなって事らしい。 Installing the SciPy Stack 窶・SciPy.or 色々な物の寄せ集めだから、苦労はN倍になる。
パッケージングの触りに触るなら、ちょっと古くなるけど、 Pythonライブラリをパッケージ化するなんてのを見ておくと、良いかも知れないな。
もう秋田。
シュミレータ系
暫く前のニュースで、next京は、sparcな石を棄てて、ARMに鞍替えするって 富士通が発表してた。
この件に関しては、富士通には前科が有る。マイコンが流行り出した頃、 一生懸命に6809な石を押していた。敵対する石はZ80だったな。コンピュータの 技術屋としては、そんな電卓もどきな石なんて使えるか。 ちゃんとしたコンピュータのサブセットを体現した6809を押していたんだ。
それが、ユーザー受けしてファンも多かったはず。でも、途中で路線変更。 営業的に6809じゃ、未来が無いと言う判断が下されたのでしょう。
今回も同じ事が繰り返された。sparcな石はOpenHardで、石屋に取っては 嬉しい素地が有った。勝手気ままに拡張出来るから、こんな面白い物は ない。
だが、今時、Solarisを動かすわけにも行かず、世の趨勢に任せてLinuxを 動かさざるを得ない。そこで問題発生。だれもsparcな石でLinuxなんてやってる 人居ないよ。ひとりぼっちの孤独を味わうはめに。。。
で、速い事が正義だのメーカーの軍門には下りたくはない。だったら、電気を 喰わない石にかけてみるか。TOP500と電気を喰わないスパコンの上位に食い込んで やる。つばめに負けてなるものか。
何か困った事があったら、孫親分に泣き付くって必殺技も有るだろうしね。 そんな事で、ARMに注目ですよ。 IoT時代のセキュリティを守るARMの「TrustZone」とは何か IoTを睨んで、ちゃんと手を打ってありますってか。
とか言ってたら、たまたま糞石を離れてのびのびしたいって人に出会った。 ARMじゃないけど、素直な石を、速い石の上で動かそうって お仲間です。 mipsel-elf-gdbのsimulatorでmipsのバイナリーを実行する いいよね。こういうの。
昔やった気がするけど、またやるか。それ用に新しい器を準備しよう。
Debina on V-BOX
暫くV-BOXに遠ざかっていたらVerUPしてたので、古いのは消して入れ直しした。 Oracle VM VirtualBox まだ32Bit版を作ってくれているので、有り難い。
そして、Debianも32Bitをサポートしてくれてて、有り難い。何時まで続けてくれる かは、分からないけど、debian-8.5.0-i386-netinst.isoを頂いてきた。
例によって、DeskTopを何も選ばず、sshサーバーだけを指定した。 V-BOXはNATで使って、portフォワーでィングで、loginするようにした。
V-BOXのDiskを圧縮出来ないか調べていたら、こちらに方法が載ってた。 仮想ディスクの圧縮。これが分かれば、 多少無茶しても大丈夫だろうね。
適当に開発環境を入れ、Xorgを入れた。これで、Xmingに絵が出るようになった。
sakae@debian:~$ apt-cache search gcc | grep arm gcc-arm-none-eabi - GCC cross compiler for ARM Cortex-A/R/M processors sakae@debian:~$ apt-cache search gdb | grep arm gdb-arm-none-eabi - GNU debugger for ARM Cortex-A/R/M processors sakae@debian:~$ apt-cache search qemu | grep arm qemu-system-arm - QEMU full system emulation binaries (arm)
この他、qemu-user-static も入れておくと、qemuでbootする事なく、何喰わぬ 顔して、armのアプリが動くんで便利かも。
sakae@debian:/usr/bin$ ls qemu-*-static qemu-aarch64-static qemu-mips64-static qemu-s390x-static qemu-alpha-static qemu-mipsel-static qemu-sh4eb-static qemu-armeb-static qemu-mipsn32el-static qemu-sh4-static qemu-arm-static qemu-mipsn32-static qemu-sparc32plus-static qemu-cris-static qemu-mips-static qemu-sparc64-static qemu-i386-static qemu-or32-static qemu-sparc-static qemu-m68k-static qemu-ppc64abi32-static qemu-unicore32-static qemu-microblazeel-static qemu-ppc64le-static qemu-x86_64-static qemu-microblaze-static qemu-ppc64-static qemu-mips64el-static qemu-ppc-static
矢でも鉄砲でも持って来いって感じ。普段はこちらの方が使い易いだろう。
v-boxで共有
以前、VMWAREでファイル共有をやった。今度はVBOXでもやってみよう。こちらは sambaを入れる代わりに、カーネルモジュールを作って、それを利用するようだ。
で、第一歩めは、 Guest Addsionとか言う追加が必要とか。debianを起動したターミナルのデバイスメニュー から、Guest AddsionのCD挿入を選ぶ。
CDはオイラーの端末モードでは自動マウントされないので、適当な場所に手動マウント。
コンパイルに必要なツール類を入れておいて、スクリプトを実行する。
sakae@debian:~$ sudo mount -r /dev/cdrom /mnt/win sakae@debian:/mnt/win$ sudo apt-get install module-assistant build-essential sakae@debian:/mnt/win$ sudo apt-get install linux-headers-3.16.0-4-all-i386 sakae@debian:/mnt/win$ sudo sh ./VBoxLinuxAdditions.run Verifying archive integrity... All good. Uncompressing VirtualBox 5.1.2 Guest Additions for Linux........... VirtualBox Guest Additions installer Removing installed version 5.1.2 of VirtualBox Guest Additions... update-initramfs: Generating /boot/initrd.img-3.16.0-4-586 Copying additional installer modules ... Installing additional modules ... vboxadd.sh: Building Guest Additions kernel modules. update-initramfs: Generating /boot/initrd.img-3.16.0-4-586 vboxadd.sh: Starting the VirtualBox Guest Additions. You may need to restart the the Window System (or just restart the guest system) to enable the Guest Additions.
カーネルのヘッダーが必要という事で、ググル先生の指示するものを入れたけど、 自前で判断するには、
sakae@debian:~$ uname -a Linux debian 3.16.0-4-586 #1 Debian 3.16.7-ckt25-2+deb8u3 (2016-07-02) i686 GNU/Linux
これを見れば良いのだな。
sakae@debian:/mnt/win$ ls 32Bit cert VBoxSolarisAdditions.pkg 64Bit OS2 VBoxWindowsAdditions-amd64.exe AUTORUN.INF runasroot.sh VBoxWindowsAdditions.exe autorun.sh VBoxLinuxAdditions.run VBoxWindowsAdditions-x86.exe
なお、ゲストの機能拡張は見ての通り、Linuxとsolarisとwinしか無い。BSDは蚊帳の外 になってるのが気にいらんな。それから、ここにmacが無いのは当たり前。でも、 遺産を食い潰して売るものが無くなったら、OSを売り出すかな。そしたら、ここで サポートされるかも。
iPhone, iPad, Mac Buyer's Guide: Know When to Buyとか、 Apple Days | Apple製品の発売周期まとめ これ、アプル製品のお買い得を考察したものらしい。
新製品が さっぱり出てないな。もうIT製品やるより、車をやった方が儲かりそうなんで、 開発陣をそちらに振り向けていますって事かな。今、トヨタや日産や本田に喧嘩売る 作戦を練ってますかな。
続いて、第二ステップ。 VirtualBoxにおいて、ホストOSとゲストOS間の共有フォルダを作成する方法
HostのWindows側で、どのdirをゲストに見せるか選定するんだな。それが済んだら、 ゲストを起動。自動的にマウントされてた。
Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/sda1 ext4 14670308 2233436 11668616 17% / udev devtmpfs 10240 0 10240 0% /dev tmpfs tmpfs 102516 4484 98032 5% /run tmpfs tmpfs 256288 0 256288 0% /dev/shm tmpfs tmpfs 5120 0 5120 0% /run/lock tmpfs tmpfs 256288 0 256288 0% /sys/fs/cgroup piki vboxsf 232727548 136753432 95974116 59% /media/sf_piki
勝手に、マウントポイントも用意されてて、これは誰の仕業かとプチ疑問に思っちゃうぞ。きっとダエモン君が住み着いているのかな。
但し、このままでは、マウントポイント以下がrootの持ち物になってて、lsすら 一般ユーザーでは拒否される。そこで、次の呪文を唱えるらしい。
sakae@debian:~$ sudo gpasswd --add sakae vboxsf
一度logoutしてからloginし直せば、魔法が有効になる。全くLinuxってやつは、 /etc/groupを編集すれば済むものを、わざわざコマンドを量産してる。 旧人類は、そんなの、sudo vi /etc/group して、
sakae@debian:~$ grep vboxsf /etc/group vboxsf:x:999:sakae
こうなるように編集するだけじゃん。これも、邪悪なGUI陣営からの強い要求に 屈したおかげだ。こうして、古い佳き時代は、だんだんと破壊されて行くのさ。
sakae@debian:~$ lsmod Module Size Used by vboxsf 36594 1 :
sakae@debian:~$ ps awx : 559 ? Sl 0:01 /usr/sbin/VBoxService --pidfile /var/run/vboxadd-service.sh
こういう協調動作で、sambaの代わりをしてるのだな。sambaは頻繁にアップデート されるし、余計な機能が(オイラーに取ってはですが)多すぎるんで、こういうのは 有り難い。
ちょっと気になるのは、モジュール。カーネルがアップデートされる度に、再コンパイルが 必要になるのかな? オイラーは、その辺はよく知らない。まあ、保守的なDebian様 だから、無闇やたらに無茶はせんだろうけど。。。
sakae@debian:~$ sudo umount /media/sf_piki [sudo] password for sakae: umount.nfs: /media/sf_piki: is not an NFS filesystem
稼動中にumount操作するなんて、きっとnfsに違いないって言う親切心と言うか 思い込みが働いているんでしょうな。ここは、-t vboxsf だよって、きちんと 指示せんといかんだろうね。
やってみたけど、相変わらずnfsだろうって思い込みが強くで、同一エラーになった。 こうなったら、/opt/VBoxGuestAdditions-5.1.2 中でも見ればいいんかな。 いや、そうじゃなくて、umountのソース嫁だろうね。
それより、勝手に作られたマウントポイント。どうやってるの? dmesgの最後に
[ 79.347962] 00:00:00.010842 main Executable: /opt/VBoxGuestAdditions-5.1.2/sbin/VBoxService 00:00:00.010848 main Process ID: 551 00:00:00.010879 main Package type: LINUX_32BITS_GENERIC [ 79.351961] 00:00:00.014822 main 5.1.2 r108956 started. Verbose level =0 [ 79.474986] 00:00:00.137815 automount vbsvcAutoMountWorker: Shared folder 'piki' was mounted to '/media/sf_piki'
こんなのが出てた。これをヒントに、探してみる。
sakae@debian:/opt/VBoxGuestAdditions-5.1.2$ find . -type f| xargs fgrep 'was mounted to' Binary file ./sbin/VBoxService matches
ソースが引っかかってこない。どうも、大事な所は見せないって方針らしい。
Git server
以前買っておいた、日経Linux8月号をちまちまと見ている。どうしてもラズパイを よいしょしようと、色々な使い方を例示してた。電気を余り喰わないから、ちょっと したサーバーには、うってつけなんだろう。
目を引いたのは、Gitのバージョン管理サーバーを立てるってやつ。GitLabってのが サーバーアプリみたいだ。結構色々な付属品が必要みたい。
FreeBSDにも有るだろうと思って探してみたら、なんとWWWのカテゴリーにportsが 置いてあった。サーバー回りは、rubygem-rails4と言う恐ろしい構成だったよ。 地獄が待っていそう。
大体、色々なLinuxやBSDと戯れているんだから、共通にアクセス出来る場所が欲しい。 だったら、Windows7で使えるgitサーバーが有ればいいんだな。 ちょっと探してみた。
Windows PCをGitのリモートリポジトリとして使用する方法
Windows: LAN内専用のGitリモートリポジトリを作る
どれもgitの移植版みたい。わんさかとlinuxもどきのMinGWがくっ付いてくるんだろうな。 そういうのは、御免こうむりたい。
よく考えたら、既にWindowsとのファイル共有が出来ているんだから、共有エリアに リポジトリィを置けば、済む話だろうに。そうすれば、各ワークは、LinuxなりBSDに 置いて、pushとかpullでよかろうね。
既存のdirをgit管理するには、どうやるんだ。gitの入門記事だと一から作るのばかり しか目に付かない。ぐぐる先生に聞いてみた。
既存のディレクトリをGit管理化して、それを基にリモートリポジトリを作る
それ以前に、gitの事をすっかり忘れているので、 Git リポジトリの取得とかを見ておく。
使い始めてみる。折角なので、Fedoraに入れてたarmのソースをGitで管理してみる。 まずは、名前とメアドを適当にでっち上げる。
[sakae@fedora ~]$ git config --global user.name "fed 23" [sakae@fedora ~]$ git config --global user.email fed23@rh.com
ドットファイルに保存されるのね。
[sakae@fedora ~]$ cat .gitconfig [user] name = fed 23 email = fed23@rh.com
次は、リモート側の設定。
[sakae@fedora win]$ mkdir pub [sakae@fedora win]$ cd pub [sakae@fedora pub]$ mkdir arm-fedora.git [sakae@fedora pub]$ cd arm-fedora.git/ [sakae@fedora arm-fedora.git]$ git --bare init Initialized empty Git repository in /mnt/win/pub/arm-fedora.git/
色々とプロジェクトが追加されていくはずなので、それらがばらけないように、 pubの下に入れる事にしました。リポジトリィ名の最後にgitって入れるのが 流儀らしいので、それに習う事にしました。
[sakae@fedora arm-fedora.git]$ tree . ├── HEAD ├── branches ├── config ├── description ├── hooks │ツツ ├── applypatch-msg.sample │ツツ ├── commit-msg.sample │ツツ ├── post-update.sample │ツツ ├── pre-applypatch.sample │ツツ ├── pre-commit.sample │ツツ ├── pre-push.sample │ツツ ├── pre-rebase.sample │ツツ ├── prepare-commit-msg.sample │ツツ └── update.sample ├── info │ツツ └── exclude ├── objects │ツツ ├── info │ツツ └── pack └── refs ├── heads └── tags
こんなのが用意されるのね。
[sakae@fedora ~]$ cd src/arm-fedora/ [sakae@fedora arm-fedora]$ git init Initialized empty Git repository in /home/sakae/src/arm-fedora/.git/ [sakae@fedora arm-fedora]$ git add . [sakae@fedora arm-fedora]$ git commit -m "initial" [master (root-commit) 6a07ee4] initial 7 files changed, 123 insertions(+) create mode 100644 .gdbinit create mode 100644 Makefile create mode 100644 bio.c create mode 100644 bio.h create mode 100644 head.S create mode 100644 main.c create mode 100644 smpl.ld
git add の後のドットは、全てのファイルって意味になるのね。管理対象は ソースファイルだけにしておくのが無難。
[sakae@fedora arm-fedora]$ git remote add origin /mnt/win/pub/arm-fedora.git [sakae@fedora arm-fedora]$ git push -u origin master Counting objects: 9, done. Compressing objects: 100% (8/8), done. Writing objects: 100% (9/9), 1.55 KiB | 0 bytes/s, done. Total 9 (delta 0), reused 0 (delta 0) To /mnt/win/pub/arm-fedora.git * [new branch] master -> master Branch master set up to track remote branch master from origin.
送り先を決めてから、送出するとな。
[sakae@fedora arm-fedora]$ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = /mnt/win/pub/arm-fedora.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master
これが、ローカルの設定ファイルになるんか。
次はDebianに切り替えて、サーバー側と言うか共有エリアに有るarmのソースを 取り出してみる。実験なので、/tmpの下で良いだろう。なお、
$ echo "tmpfs /tmp tmpfs rw,nosuid,nodev" | sudo tee -a /etc/fstab $ sudo reboot
こういう設定を行っておくと、 /tmpの実体はRAM DISKもどきになる。 Linuxに割り当てたメモリー容量の半分まで使える エリアとなるぞ。
sakae@debian:~$ cd /tmp sakae@debian:/tmp$ git clone /media/sf_piki/pub/arm-fedora.git Cloning into 'arm-fedora'... done. sakae@debian:/tmp$ ls arm-fedora
リボジトリィー名の一部になってる、.gitってやつは、ローカルに届くと消えて 無くなる、特別仕様なのね。なんとなくそうだと思っていたけど、実際にやって みて、実感出来たよ。
sakae@debian:/tmp/arm-fedora$ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = /media/sf_piki/pub/arm-fedora.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master
URLも、ローカルに合わせて、調整されるのね。最初に登録した時は、/mnt/win/... だったから、これも佳きに計らってくれる、現場第一主義なのね。
sakae@debian:/tmp/arm-fedora$ make arm-linux-gnu-gcc -c -mcpu=arm926ej-s -marm -nostdlib --no-builtin -Wall -g main.c -c make: arm-linux-gnu-gcc: Command not found Makefile:14: recipe for target 'main.o' failed make: *** [main.o] Error 127
元がFedora用なので、そんなコマンド無いエラー発生。しこしこと修正する。 修正点は、gitに用意されたdiffで確認出来るとな。
sakae@debian:/tmp/arm-fedora$ git diff diff --git a/Makefile b/Makefile index 2c83111..a30919c 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,13 @@ -CC = arm-linux-gnu-gcc -CFLAGS= -mcpu=arm926ej-s -marm -nostdlib --no-builtin -Wall -g +OS = ${ shell uname -n } +ifeq ($(OS), debian) + CC = arm-linux-gnu-gcc + LD = arm-linux-gnu-ld +else + CC = arm-none-eabi-gcc + LD = arm-none-eabi-ld +endif -LD = arm-linux-gnu-ld +CFLAGS= -mcpu=arm926ej-s -marm -nostdlib --no-builtin -Wall -g LDFLAGS = -T smpl.ld kernel = app.img diff --git a/main.c b/main.c index 3761b31..3aa9f2f 100644 --- a/main.c +++ b/main.c @@ -3,7 +3,7 @@ void mymain(void) { char buff[128]; - puts("hello, ARM on Fedora\n"); + puts("hello, ARM on Linux\n"); gets(buff, 128); puts(buff); puts("\n");
次は、commit -a するんだけど、やったらnanoなんてのが立ち上がった。 しょうがないので、EDITOR=vi してやり直し。
それから、git push したよ。
sakae@debian:/tmp/arm-fedora$ git push warning: push.default is unset; its implicit value has changed in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the traditional behavior, use: git config --global push.default matching To squelch this message and adopt the new behavior now, use: git config --global push.default simple When push.default is set to 'matching', git will push local branches to the remote branches that already exist with the same name. Since Git 2.0, Git defaults to the more conservative 'simple' behavior, which only pushes the current branch to the corresponding remote branch that 'git pull' uses to update the current branch. See 'git help config' and search for 'push.default' for further information. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode 'current' instead of 'simple' if you sometimes use older versions of Git) Counting objects: 4, done. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 499 bytes | 0 bytes/s, done. Total 4 (delta 3), reused 0 (delta 0) To /media/sf_piki/pub/arm-fedora.git 6a07ee4..e67527f master -> master sakae@debian:/tmp/arm-fedora$ git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean
最後に、Fedoraに戻って、更新したのが取り込めるか確認してみる。
[sakae@fedora ~]$ cd src/arm-fedora/ [sakae@fedora arm-fedora]$ git pull remote: Counting objects: 4, done. remote: Compressing objects: 100% (4/4), done. remote: Total 4 (delta 3), reused 0 (delta 0) Unpacking objects: 100% (4/4), done. From /mnt/win/pub/arm-fedora 6a07ee4..e67527f master -> origin/master Updating 6a07ee4..e67527f Fast-forward Makefile | 12 +++++++++--- main.c | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-)
大丈夫だった。ちゃんと git log も読めたしね。