Skip to main content

ログ取得ツール

Category: GNU/Linux

32bit時代を知ってる奴はおっさん確定、という時代

最近はもう32bitが昔の8bitみたいな扱いになってますよね。8-16色パレットのドット絵、PSG音源、スプライト、バンク切り替え…そっから16bitの時代になると多重スクロールだのFM音源だの256色だのディザリングだのフルカラーだの漢字ROMだのセグメントレジスタだの…おっさんホイホイですな。 32bitの人はどう昔話するんだろう。あの頃はPAEで無理やり4GB越えメモリを使ってたんだよ、でも1プロセス内では使えなくてね、とか? PCI ExpressがなくてPCIだったんだよね。IntelがInfiniBandから撤退して、IBからノード間通信を省いたものを作る、名前はPCI Express、どうだー、みたいな発表をしてみんな唖然としてね。私その発表を聞きに行ってましたよ。Intel Developer Forum、そのときもらったマグネットのgive awayが最近まで冷蔵庫に貼ってありました… つまり今となってはポインタが64ビットじゃないなんて、むしろ新鮮なんだよ。レトロ。昭和な感じってやつ。あーでもAndroidとかの多くは今でもまだ32ビットのシステムか。 というわけでRaspberry Pi 2 Bを買って遊んではいるんですが、32bitってtime_tも32ビットなのよね。sizeof(struct timeval)=8とか…忍殺じゃないけどこれ2038年早々に爆発を起こすやつじゃんか。

MacとGolangとRaspberry Pi

最近のhomebrewで入るgolangはbottleから入れても、だいたいのプラットフォーム向けにクロスコンパイルできるようにコンパイルされたものが入る。昔はMac/x64しか作れなかったのをオプションでどうにかしてたんだけど。当時はアップデートのたびにコンパイラを何周も走らせてたもんなぁ。 で、普通にbrew install goで入れた状態で、GOOS=linux GOARCH=armであなたの素晴らしいプログラムをビルドすると、Raspberry Piでも動くバイナリを吐いてくれるようになる。こりゃいい。楽ちんだ。 これでいろいろはかどるね。

何と呼ぶかで何者かが分かる?

ストレージのブロックマップからエントリを抜く操作。

  • TRIM…ATAかSSDの人。Flashの人もここに含まれる
  • UNMAP…SCSIの人、VMwareの人
  • discard…Linuxの人
  • punch hole…Linuxの人の一部(ユーザランドのプログラマ)
  • delete, BIO_DELETE, BIOCGDELETE…BSDの人

こういうのってありますよね。私はどうしてもdiscardと呼んでしまうんですが、通じてないんじゃないかと思う場面もある。 でもtrimって言うとSSD限定みたいに聞こえるからなぁ。 unmapも、SCSIってmapがないのにunmapがあるんでどうしても違和感を感じてしまう。 deleteはたいてい意味を誤解されると思う。 となるとpunch holeかdiscardだけど、punch holeで通じる相手は少ないと思う。 相手がLinuxの管理者であればdiscardと言えばファイルシステムのマウントオプションにも出てくる言葉で、通じるはずだ。でも時々本当に通じているのか不安になる。それがdiscardという言葉。 …だがdiscardも実際はcardの反対語なのか。cardがなくてdiscardがあるんならunmapと変わらんな。いやググるとdiscardの反対語はtakeだから!

簡易Webサーバをインターネットに立てることを考えると…

ちょっと思ったんだけど、docker使ってbusyboxのhttpdを立てるのが割と簡単で安全なんじゃないかと思って。 httpd.confをこんな感じにして、

I:index.html
/:username:password

.html:text/html; charset=UTF-8
.txt:text/plain; charset=UTF-8

そんで、こんな感じで上げる。

  • docker run -d -t -i -v /path/to/dir:/www:ro -v /path/to/httpd.conf:/httpd.conf -p 80:80 busybox httpd -p 80 -h /www -c /httpd.conf -f -vv

どうかなぁ。ログはdocker logsである程度は出る。時刻もdocker logs -tで出る。性能はあんまりアレだろうな、たぶん。もうちょっとやるなら、capability落としたりしたほうがいいかもな。そこまでやることもないか。

MacのHFSはholeに対応していない?

オレ「truncateで作ったファイルはまだブロックが確保されてないからduで見ると0なんだよ」Mac「」

  • gtruncate –size 100m 100m
  • gdu -sh 100m
    • 100M 100m

え? これに気づいたのは、会社の仕事中でした。Linuxで400Gのmkfs済みイメージをtarでholeつきファイルとして作って持ってきて(ext4だと27MBくらいになる)、ちょっと展開して中身を…と思ったらものすごい勢いでNo space left on device。Ctrl-cとかCtrl-z、kill -9でも落ちないのね。 実際これはbsdtarでもgtarでもダメだった。bsdtarはzombieになったので書き込みエラーでexitしようとしたんだろうけど、バッファがflushできなくて死にきれなかった。gtarはもっとひどくて、どうやっても殺せなくて、結局リブートしたよ… まあ2回試すのがバカって話もあるんだけど、まさかファイルシステムが対応してないと思わないじゃん? で、最初はbsdtarが悪いと思ったのよ。そしたらgtarまでダメで、リブートかけてトイレに行っている間に、ああそうか、これはMacのHFSが悪いんだなと悟ったわけ。ただ、この状況で無事にリブートできたところは偉い。Linuxならリブートが刺さってるところだよね。 その他。

column(1), colrm(1)

join(1)の衝撃いまだ冷めやらぬ中…column(1), colrm(1)っていうコマンドもありますね。 まあこれらの使い方を覚えようとする前にawkを使うでしょうね。しかしもっと凄いのは、これらのコマンドを涼しい顔で使っている人が会社にいること…かな。なんであんたこれを当然のように使ってんだよ、っていうね。

join(1)

SQLのJOINがどう…というエントリが続きましたが、Linuxのコマンドにもjoinがあり、これはテキストファイルでSQLのinner joinに似た操作ができるんです。私はcutは時に毎日のように使い、たまにpasteは使うことがあるけど、joinは使ったことがない。最近この操作が必要になり、一時的にSQLiteに入れてjoinさせるかawkで頑張るか、sortとuniqで2個カウントされたやつを選ぶか、どうするか熟慮した結果、awkのone-linerでしのいだことを思い出します。joinコマンドさえ知ってれば悩むことなんてなかったのに。 どうせ忘れるけどメモしておこう。MacOSにも入ってます。いやー便利な世の中に…いや、どうせ忘れると思うけどね。

Railsその前に

Ruby on Railsはじめます。世の中の説明やチュートリアルはいろいろ間違っていて、Railsの前にRackを説明するべきなんですよね。rails newでたくさんファイルができてうれしいね、じゃないでしょ。意味の分からないファイルがたくさんできても嬉しくないんですよ。むしろ分からない領域が広がれば広がるほど悲しいでしょ。アクセスがどこから来て処理はどこに行くのか。それを知っとかないと不安が大きいままになってしまう。戦場の足場は大事なんです。 RackはPythonで言うWSGIみたいなもので、リクエストを処理するところだけ書くとうまいことWebサーバとつながってくれる、というもの。ググって調べると分かりやすい説明がありますのでどうぞ。そのRackの設定がconfig.ruで、Railsでも作られます。Rails自体がRackに対応したアプリとして実装されているので、WebサーバとつながっているRackのconfig.ruから辿って行くと処理が追いやすいと思います。

Fedora20のvagrant box

  • create new VM “F20”
    • VMDK, virtio_net, Host I/O cache
  • minimum install
    • BTRFS
    • root pass = vagrant
  • yum install kernel-devel gcc tar bzip2 perl ruby ruby-devel rubygems
  • yum clean all
  • install guest additions
    • Devices - Insert Guest Additions CD image…
    • mount /dev/cdrom /mnt
    • cd /mnt
    • ./VBoxLinuxAdditions.run
  • umount, eject
  • gem install chef –no-rdoc –no-ri
  • systemctl disable firewalld.service
  • vi /etc/selinux/config
    • disabled
  • useradd -G wheel vagrant
  • passwd vagrant (-> vagrant)
  • visudo
    • %wheel ALL=(ALL) NOPASSWD: ALL
    • ## Defaults requiretty

    • Defaults env_keep += “SSH_AUTH_SOCK PATH”
    • ## Defaults securepath

  • su - vagrant
  • echo ’export PATH=$PATH:/usr/sbin:/sbin’ » .bashrc
  • mkdir .ssh
  • chmod 755 .ssh
  • curl -O https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub
  • mv vagrant.pub > .ssh/authorized_keys
  • chmod 644 .ssh/authorized_keys
  • sudo poweroff
  • vagrant package –base F20 –output F20.box
  • vagrant box add –name fedora20 F20.box