upstartってUbuntuで使われているものなので、良さそうだけど縁がないと思っていたが、CentOSとかでも普通に使えるんですね。最近気づきました。
initctlコマンドはそれなりに使いやすいし、設定ファイルも分かりやすい。sysvinitは私は慣れてるけど不格好だし、systemdはいまいち動作をつかめる気がしない。
これは良いことを知ったぞ。
Macはlaunchdというまた別のものなんですね…しかもcronの仕事もこいつにさせてるのか。
upstartってUbuntuで使われているものなので、良さそうだけど縁がないと思っていたが、CentOSとかでも普通に使えるんですね。最近気づきました。
initctlコマンドはそれなりに使いやすいし、設定ファイルも分かりやすい。sysvinitは私は慣れてるけど不格好だし、systemdはいまいち動作をつかめる気がしない。
これは良いことを知ったぞ。
Macはlaunchdというまた別のものなんですね…しかもcronの仕事もこいつにさせてるのか。
Macのアプリ(.dmgや.zipの中に.appや.pkgが入っているもの)もやっぱりbrewでインストールするよね、という人が使っているのがCask。
Caskが用意されていないアプリも多いので、どう効率よくCask化するか、というのが問題になる。
私の場合は、自分のリポジトリがgithub.com/wtnb75/homebrew-testであって、ここをbrew tap wtnb75-testで持ってきている。
そうすると、/usr/local/Library/Taps/wtnb75-test以下にcloneされた状態になっているので、少々気持ち悪いところもあるが、ここのディレクトリをそのまま使っている。git remote set-url –push origin git@github.com:wtnb75/homebrew-test.git みたいなコマンドを実行しておくと後が楽になる。
例えばLego Digital Designerの場合、
ということがわかる。ダウンロードしてsha256を求めると、これがaeba6d0a2d0feb2bf6ce2c6be257a87caf6d51a4038e046d45568c8df7e3c6caであって、zipファイルの中にはLDD.pkgというファイルが入っている、と。ここまで分かればあとは書き下すのみ。
こうなる → https://github.com/wtnb75/homebrew-test/blob/master/Casks/ldd.rb
あとはインストール(brew cask install ./ldd.rb)して動作を確認する。
確認できたら、これを/usr/local/Library/Taps/wtnb75-test/Cask以下にldd.rbとして置いて、git add,commit,pushする。何も考えずにやると2度ダウンロードすることになるが、キャッシュディレクトリの場所を知っていれば、それは実際は/Library/Caches/Homebrew/なのだが、ここに最初に(sha256やパッケージファイル名を知るために)ダウンロードしたzipファイルを、パッケージ名とバージョン、拡張子をまぜた「ldd-4.3.8.zip」として置けば、ダウンロードが一度で済む。
Macの場合はアンインストールもそれほどややこしくない(アプリはディレクトリの格好になっていて、アンインストールは単にディレクトリを削除するだけ)のだが、中央管理したがるのは習慣か。Linux使ってても、何かとspecファイル書いて野良rpmを作って管理したがる習性があるんですよね私。
しかしbrewはファイル名とクラス名が一致(ファイル名はlowercase, クラス名はCapitalize)してないとダメなのかな? それはあまりよろしくないんじゃなかろうか。こういう制約は毎日邪魔だと思う以上の意味がないよね。Javaじゃないんだから。
vagrantのawsプラグインを今更ながら使う。Macになって、VagrantもWindowsから使ってた頃よりも使いやすくなったので。普段はVirtualBoxなんですが、台数を稼ぎたい時なんかには必要だろうなぁと。自宅で遊ぶのに台数が必要か? と言われると困るが。
警告というのは、これ。
WARNING: Nokogiri was built against LibXML version 2.8.0, but has dynamically loaded 2.9.1 [fog][WARNING] Unable to load the 'unf' gem. Your AWS strings may not be properly encoded.
ぐぐると情報は出てくるのだが、その通りやったつもりでも直らないんです。まあ別にいいけど。
今のところ、↓が最小構成か?
Vagrant.configure("2") do |config| config.vm.box = "dummy" config.vm.provider :aws do |aws, override| aws.access_key_id='your key' aws.secret_access_key='your secret' aws.keypair_name='your kp' aws.region='ap-northeast-1' aws.ami='ami-0d13700c' aws.instance_type='t1.micro' aws.security_groups = [ 'your security group' ] override.ssh.username='ec2-user' override.ssh.private_key_path='/path/to/kp.pem' end end
転職を期に、Macとgitの人になってみました。転職前はLinux/Windowsとmercurialだったんですけどね。40を目前にして、自分を取り巻くコンピューティング環境がだいぶ変わりました。
新しい職場ではMacを使っている人が多かったので、まあ月に1度くらいWindowsが必要なシステムを使うケースもあるんですが、その場合はVDIを利用させてもらうことにして、MacBookProのRetinaディスプレイモデルを買わせてもらいました。これが殊の外具合が良いので、自宅でも同じの買っちゃいましたよ。安いし。画面が異常に美しいです。壊れてるんじゃないかと思うくらいに。計算性能も良い。
プログラミング方面では、brewとかvagrantとかchefとか、Rubyで書かれているものが多いこともあり、仕事上でも関係するので意識的にRubyを使おうとしていますが、まだPythonを使ってしまう癖が抜けてません。自分ではRubyは避けてJavaScript(node.js)に行く予定だったんですが、どうもそうも行かないような気配。いずれにしてもC/C++からは離れていきそうです。せっかくMacはclang/LLVMでObjective-Cなのにね。
環境の変化でなにげに一番重いのはWindows Live Writerが使えなくなったこと。前職ではWLWとPowerPointだけで仕事をしていた感があった。WLWをMacで無理やり使っている人もいるようですが、そこまでヤツを愛しているわけではない。EmacsでGFM(Github Flavored Markdown)を書いて投稿するのが便利かもしれないなぁと思ってます。octopress(これもRuby…)とgithub pagesも考えたんですが、このwordpressは残すことに。とりあえずお試しに、この記事はKakuというMacのアプリで書いてますが、どうなることやら。
MacのバックアップはTime Machineという有名なものがありますが、S3→Glacierに自動で移す設定ができるようなので、AWSにでも取ろうと思ってます。s3syncあたりかな。これもRubyか。
なんというか、そんなエピックなイマジネーションを感じませんか? まあ、無駄に伏線を張りすぎな感もあるが(複々線化されちゃってる、みたいなね)。
キョウリュウジャーはドゴルド/空蝉丸やトリンあたりのエピソードは盛り上がったが、他はそれほどでもなかったように思う。
ついにリーグ戦も開幕。等々力は雨で寒くて泣きそうでした。帰り道も暗くてね。この季節は、できればもっと昼間にやって欲しいですね。
試合の方は同じスタメンでやった貴州戦よりも良い試合になっていたように思いますが、結果はロスタイムに追いつかれての2-2。2005年の怒涛の開幕4試合(?)連続ロスタイムゴールを思い出しますね。
しかしこの季節に異常な強さを見せる印象のある神戸相手に負けなかった、2点取れたというところはポジティブ。内容も悪くない。
一足お先にシーズン到来。ゼロックスがあった広島とマリノスよりは一歩遅いが。
久々の等々力は寒かったが風が弱かったのでまだ普通に過ごせた。ただ、買った食料は冷えきっていた。
貴州はアップのときにサブの選手(に思える格好をした大柄な人々?)がボール拾いをやっていた。プロではあんまり見ない光景だなぁと思ったが、あれ本当に選手だったのかな?
芝は先日の雪の影響を受けたはずだし季節も季節なので青々とはしていなかったが、破綻はない状態だったと思う。
パウリーニョは実力を見せたが、今日の出来であれば山本真希でも同等以上にやれたろう。川崎もボールは持ててパスも回るが危険なプレーの頻度は低く、得点チャンスも少なかったよね。これからシーズンを進めながら調子を上げていって欲しいところ。シーズン開幕でレナトのFKに勝ち点をもらうのは、実は毎年かも?
貴州は前半に9番のでかい中心選手が負傷で下がった形だが、選手を入れ替えて内容を向上させたようにも見えた。川崎は最後まで選手交代なし。それなりに危うい場面もあったが気を抜かずにカバーした。
やはり実行ファイル(C:\Users\(username)\AppData\Local\Programs\Google\Google+ Auto Backup\Google+ Auto Backup.exe)のファイル名変更だけではあっさり復活した。
まあ、あいつらはそんな甘い奴らじゃないだろうと思ってたよ。
もしかして、Picasaが復活させてるんじゃないか?
C:\Program Files (x86)\Google\Picasa3\GPAutoBackup.msiの名前も変更して、様子を見る。
次復活したらどうしよう。見つけ次第殺すスクリプトをタスクスケジューラで仕込もうか…
まるで、ばいきんまんのように何度やられても決して諦めない。こいつのアンインストールは単なる「ばいばいき~ん」であって、真の意味でのアンインストールには程遠いのだ。Picasaを使っている限り、何度でも復活する。Picasaは使いたい、でもAuto Backupは気持ち悪い。そういうユーザーはどうしたらいいのだろうか?
ぐぐっても「こんなに便利」「オン/オフの切り替え」「バックアップされた写真を削除するには?」くらいの情報しか出てこない。Google+使ってないし一度もバックアップしたことないので、単に使わないからアンインストールしたいだけなのだ。起動するたびに変なダイアログが出るのがね。こんなの出てきたら子供が勝手にクリックしちゃうでしょ。
しょうがないので、実行バイナリをxxxx.exeからxxxx.exe.bakにリネームしてみた。
これでしばらく様子見。
これでも復活したらどうしよう…
ふつう/tmpはtmpfsにしたいと思ってこういうrecipeを書くじゃないですかーやだなーもう。
mount "/tmp" do pass 0 fstype "tmpfs" device "none" action [:mount, :enable] end
それをVagrantで操作しているVMに適用するような操作をすると、cookbookが見つからないとかいうエラーが出るじゃないですかー。
Bringing machine 'default' up with 'virtualbox' provider... [default] Importing base box 'cent64'... [default] Matching MAC address for NAT networking... [default] Setting the name of the VM... [default] Clearing any previously set forwarded ports... [default] Fixed port collision for 22 => 2222. Now on port 2200. [default] Clearing any previously set network interfaces... [default] Preparing network interfaces based on configuration... [default] Forwarding ports... [default] -- 22 => 2200 (adapter 1) [default] Running 'pre-boot' VM customizations... [default] Booting VM... [default] Waiting for machine to boot. This may take a few minutes... DL is deprecated, please use Fiddle [default] Machine booted and ready! [default] The guest additions on this VM do not match the installed version of VirtualBox! In most cases this is fine, but in rare cases it can prevent things such as shared folders from working properly. If you see shared folder errors, please make sure the guest additions within the virtual machine match the version of VirtualBox you have installed on your host and reload your VM. Guest Additions Version: 4.2.16 VirtualBox Version: 4.3 [default] Mounting shared folders... [default] -- /vagrant [default] -- /tmp/vagrant-cache [default] -- /tmp/vagrant-chef-1/chef-solo-1/cookbooks [default] Running provisioner: chef_solo... [default] Configuring cache buckets... Generating chef JSON and uploading... Running chef-solo... [2014-01-24T14:08:47+00:00] INFO: Forking chef instance to converge... [2014-01-24T14:08:47+00:00] INFO: *** Chef 11.6.0 *** [2014-01-24T14:08:48+00:00] INFO: Setting the run_list to ["recipe[base::tmpfs]", "recipe[base::ntp]", "recipe[base::timezone]", "recipe[base::epel]"] from JSON [2014-01-24T14:08:48+00:00] INFO: Run List is [recipe[base::tmpfs], recipe[base::ntp], recipe[base::timezone], recipe[base::epel]] [2014-01-24T14:08:48+00:00] INFO: Run List expands to [base::tmpfs, base::ntp, base::timezone, base::epel] [2014-01-24T14:08:48+00:00] INFO: Starting Chef Run for localhost [2014-01-24T14:08:48+00:00] INFO: Running start handlers [2014-01-24T14:08:48+00:00] INFO: Start handlers complete. [2014-01-24T14:08:48+00:00] WARN: Cloning resource attributes for service[ntpdate] from prior resource (CHEF-3694) [2014-01-24T14:08:48+00:00] WARN: Previous service[ntpdate]: /tmp/vagrant-chef-1/chef-solo-1/cookbooks/base/recipes/ntp.rb:21:in `block in from_file' [2014-01-24T14:08:48+00:00] WARN: Current service[ntpdate]: /tmp/vagrant-chef-1/chef-solo-1/cookbooks/base/recipes/ntp.rb:27:in `block in from_file' [2014-01-24T14:08:48+00:00] WARN: Cloning resource attributes for service[ntpd] from prior resource (CHEF-3694) [2014-01-24T14:08:48+00:00] WARN: Previous service[ntpd]: /tmp/vagrant-chef-1/chef-solo-1/cookbooks/base/recipes/ntp.rb:21:in `block in from_file' [2014-01-24T14:08:48+00:00] WARN: Current service[ntpd]: /tmp/vagrant-chef-1/chef-solo-1/cookbooks/base/recipes/ntp.rb:27:in `block in from_file' [2014-01-24T14:08:48+00:00] WARN: Cloning resource attributes for execute[rpmkey] from prior resource (CHEF-3694) [2014-01-24T14:08:49+00:00] INFO: mount[/tmp] mounted [2014-01-24T14:08:49+00:00] INFO: mount[/tmp] enabled ================================================================================ Error executing action `install` on resource 'yum_package[ntp]' ================================================================================ Mixlib::ShellOut::ShellCommandFailed ------------------------------------ Expected process to exit with [0], but received '1' ---- Begin output of /usr/bin/python /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/provider/package/yum-dump.py --options --installed-provides ---- STDOUT: [option installonlypkgs] kernel kernel-bigmem installonlypkg(kernel-module) installonlypkg(vm) kernel-enterprise kernel-smp kernel-debug kernel-unsupported kernel-source kernel-devel kernel-PAE kernel-PAE-debug STDERR: yum-dump Repository Error: Error making cache directory: /var/cache/yum/x86_64/6/base error was: [Errno 2] No such file or directory: '/var/cache/yum/x86_64' ---- End output of /usr/bin/python /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/provider/package/yum-dump.py --options --installed-provides ---- Ran /usr/bin/python /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.6.0/lib/chef/provider/package/yum-dump.py --options --installed-provides returned 1 Resource Declaration: --------------------- [2014-01-24T14:08:50+00:00] INFO: Running queued delayed notifications before re-raising exception [2014-01-24T14:08:50+00:00] ERROR: Running exception handlers [2014-01-24T14:08:50+00:00] ERROR: Exception handlers complete [2014-01-24T14:08:50+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1) Chef never successfully completed! Any errors should be visible in the output above. Please fix your recipes so that they properly complete.
Vagrantはcookbookやキャッシュを/tmp以下にマウントするんですよね。だからcookbookの中で/tmpをマウントしてカラにしたらcookbookのファイルが読めなくなってダメなんですな。actionからmountを外せば問題は解消しますが、/tmpがtmpfsになるのはリブート後ということになります。
Fedoraの最近のは/tmpがやっとtmpfsになったし、こんなrecipeもそのうち不要になりますね。