DockerfileのENVでは、ENVで定義した変数を使えます。 ENV FOO aaa ENV BAR bbb_${FOO} # => "bbb_aaa"がセットされる 例 FROM busybox ENV FOO aaa ENV BAR bbb_${FOO} RUN touch /tmp/${BAR} これをビルドすると、 /tmp/bbb_aaa というファイルが作成されます。 ENVのなかでENVを使えるのは地味に便利ですね。
DockerfileのENVでは、ENVで定義した変数を使えます。 ENV FOO aaa ENV BAR bbb_${FOO} # => "bbb_aaa"がセットされる 例 FROM busybox ENV FOO aaa ENV BAR bbb_${FOO} RUN touch /tmp/${BAR} これをビルドすると、 /tmp/bbb_aaa というファイルが作成されます。 ENVのなかでENVを使えるのは地味に便利ですね。
Docker-machineを使っていてこういうエラーが出ることがたまにある。 Error Summary ------------- Disk Requirements: At least 180MB more space needed on the / filesystem. rpmdb: write: 0x7fbc05401440, 4096: No space left on device そういうときは一度仮想マシンを捨てて、ディスクサイズ指定して作り直す。 docker-machine rm default docker-machine create --virtualbox-disk-size "20000" --driver virtualbox default
MySQL v5.7ではrootの初期設定まわりがいろいろ変わっており、 v5.6をベースにした記事を見てもそのままでは使えなかったりします。 Ansibleを使ってMySQL 5.7をインストール・初期設定するところまでできたのでやり方を紹介します。 注意 これはあくまで簡易版で、Vagrantのような開発環境構築を想定しています。 本番サーバに適用する場合はもっとセキュリティを重視する必要があるでしょう。 自分はMySQLに関しては初級者なので、ツッコミ歓迎です。もっといいやり方があれば教えてください。 手順 RPMを使ってMySQL5.7をインストールする ログファイルを解析してrootのパスワードを得る rootのパスワードを /root/.tmp.my.cnf に記述する /root/.tmp.my.cnf を使ってrootログインし、rootのパスワードを変更する と同時に新パ
YAPC::Asia 2015で「Gitの作り方」というライトニングトークをしました。 実際につくったGitの実装 https://github.com/DQNEO/minigit 伝えたかったこと 私はC言語を普段つかっておらず、ごくたまに趣味で書く程度のスキルしかありませんが、そんな自分でもGitのサブコマンドをいくつかC言語で実装することができました。 これは、ひとえにGitの内部構造がシンプルだからです。 このトークでひとりでも多くの方にGit実装の面白さを実感してもらって、「自分もやってみようと」思ってもらえたらうれしいです。 発表の準備 当日の12時ごろに採択が発表されて、それを見たとき嬉しすぎて「わー‼︎」って声が出ました。 そこから必死で資料を作りこんで16時ごろ完成。 資料をブツブツ読み上げながら頭の中で何度もリハーサルしました。 発表の瞬間 「LTする人は舞台前に来てく
PDFファイルをKindleに送信して読む方法を紹介します。 手順は簡単で、 Kindleには端末毎にメールアドレスが割り当てられている そのメールアドレス宛にPDFファイルを添付してメール送信 これだけです。 端末に割り当てられているメールアドレスを調べる方法 http://amazon.co.jp/ にアクセスして、 「アカウントサービス」 -> 「デジタルコンテンツ」-> 「コンテンツと端末の管理」-> 「端末」 画面の下の方に表示されてる「Send-to-Kindle Eメールアドレス」がそれです。 デフォルトではexample_15@kindle.comのような覚えにくいアドレスになっています。 これは変更できるので覚えやすいものに変更しておくとよいでしょう
$ find /usr/local/Cellar/git/2.2.2/libexec/git-core -type f | xargs file | grep script /usr/local/Cellar/git/2.2.2/libexec/git-core/git-add--interactive: a /usr/bin/perl script text executable /usr/local/Cellar/git/2.2.2/libexec/git-core/git-am: POSIX shell script text executable /usr/local/Cellar/git/2.2.2/libexec/git-core/git-archimport: a /usr/bin/perl script text executable /usr/local/Cellar/g
消したはずの仮想マシンが vagrant global-status で表示されてしまう場合、--pruneオプションをつければゴミ掃除してくれます。 vagrant global-status は、存在しない仮想マシンを表示してしまうことがある。 $ vagrant global-status id name provider state directory ------------------------------------------------------------------------- 55f191d default virtualbox poweroff /Users/DQNEO/hoge/kitchen 8486738 default virtualbox running /Users/DQNEO/hoge/kitchen2 2aa592d default virt
私の好きな記事に、こういうのがあります。 ふとActiveRecordで使えるpreviousメソッドってどこからきてるんだろう?と思ってgemsをgrepしてみるも見当たらず。 よし、場所を探り当ててやる! [中略] 自分で普通にmodelに定義してた。 因みに複数人開発で他人が実装したとかではなく、紛れも無く俺が実装したメソッドである。おまけにテストも書いてある。 何故このような自体が発生したのか。 メソッド名が自然過ぎたか。 メソッドの定義されている場所を探す - komagata Ruby on Railsの中で"previous"メソッドがどこで定義されているのかを探してみたら、それはRailsにはなくて、自分が普通に子クラスで定義したメソッドだった、というオチ。 yugui コレクションがあってシャッフルしたいと思ったら、shuffleと書いて、それで動かなきゃいけないんですよ
LTSVのログビューワーltsview (http://d.hatena.ne.jp/naoya/20130207/1360229220) のC言語版を作りました。 ソースコードはGithubにおいてあります。 https://github.com/DQNEO/c-ltsview やる前は難しそうだと思っていたのですが、書いてみたら意外と簡単で、100行ほどでできました。 こんな感じです。 #include <stdio.h> #include <string.h> #include <stdlib.h> #define BUF_MAX 10240 #define KEYS_MAX 100 struct item { char *key; char *value; }; void parse_item(struct item *item, char *key_value); int in_
Home Subscribe wr_index = 824 wr_index = 2226 wr_index = 3566 wr_index = 3620 wr_index = 5022 wr_index = 6424 wr_index = 7662 wr_index = 7818 wr_index = 9220 wr_index = 10622 wr_index = 11758 wr_index = 12016 wr_index = 13418 wr_index = 14820 wr_index = 15854 wr_index = 16451 wr_index = 16517 で、このコールバックはどのタイミングでどこから呼ばれるのだろう?と思ってstraceしてみたらこんな感じでした。 sendto(3, "GET / HTTP/1.1\r\nHost: www.yahoo."...
Home Subscribe 準備 あらかじめgitをインストールしておきます。 gitのインストール方法は割愛します。 plenvとperl5.20とcpanmを一気にインストール 一般ユーザでログインして下記のようにします。 # plenvを取得 git clone git://github.com/tokuhirom/plenv.git ~/.plenv/ # Perl-Buildを取得 git clone git://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build/ # パス設定など # (zshをお使いの場合は .bashrcのかわりに.zshrc) echo 'export PATH=~/.plenv/bin:$PATH' >> ~/.bashrc echo 'eval "$(plenv init
Home Subscribe 最近 ChefDKという全部入りパッケージがリリースされたので、これで一発です。 http://www.getchef.com/downloads/chef-dk/ CentOS6だとこんな感じで一発です。 sudo rpm -ivh https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chefdk-0.3.0-1.x86_64.rpm rubyとかrbenvとかgemとかの環境について頭を悩ませる必要がないのでとても楽です。 ちなみにChefDKを使わずに自力でこれらをインストールしようとするとどうなるかというと、すごい時間がかかります。 とくにBerkshelfが依存しているライブラリで"dep-selector-libgecode" というのがものすごい怪物のようなしろもので、コンパ
Vagrantfileの中で chef.json = {"hostname" => "abc.example.com",} と定義して、 その値をテンプレートファイルから(templates/default/network.erb) NETWORKING=yes HOSTNAME=<%= node["hostname"] %> と参照したかったのですが、なぜか反映されませんでした。 chef.jsonで定義したhostnameの値ではなく現在のサーバのhostname値がそのままテンプレートファイルに埋め込まれてしまっていました。(日本語難しい・・・) たぶんohaiが収集したサーバの情報がnode["hostname"]に設定されて、それがそのまま使われているんではないかと思います。(このあたりよくわかってない) 対処法 キー名を"myhostname"みたいにしたらうまくいきました。
crontab -e で設定したときのユーザのcrontabで環境変数PATHがどうなっているのか調べてみました。 環境はCentOS6.5です。 crontabのPATHは貧弱であった crontab -e して */1 * * * * printenv > /tmp/printenv.txt このように設定して、1分後に作成されたファイルを見てみると、 $ cat /tmp/printenv.txt SHELL=/bin/sh USER=vagrant PATH=/usr/bin:/bin PWD=/home/vagrant LANG=en_US.UTF-8 SHLVL=1 HOME=/home/vagrant LOGNAME=vagrant _=/usr/bin/printenv 貧弱ぅ貧弱ぅ!な環境になっておりました。 PATHが/usr/binと/binだけというのは何ともお粗末
Gitの「インデックス(ステージング)」情報を保持している.git/indexファイルについて詳しく調べてみました。 要約 .git/indexは、"ステージング/インデックス"情報を保持してるバイナリファイルである。 中身を表示するには git ls-files --stage で表示できる .git/indexファイルの構造 例として"minigit"プロジェクトの.git/indexをとりあげます。 $ git clone git://github.com/DQNEO/minigit.git $ cd minigit $ git checkout git ls-files --stageで中身を表示 $ git ls-files --stage | head 100644 95ba71b8e7c2d70965d9a5086a9fabd58e87d259 0 .gitignore 10
"読み取り権限がなく実行権限だけのファイルが実行できるのはなぜ? - カーネルのソースを読む - - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く" こちらの記事が大変素晴らしかったので、実際の実行時システムコール呼び出しを追ってみました。 平たく言うと、strace・システムコールの入門です。 バイナリ実行するのに読み取り権限は必要ないことを実験で確かめる C言語でhello worldを書いてみます。 hello.c #include <stdio.h> int main() { printf("hello world\n"); return 0; } コンパイルして、パーミッションを100にします。 $ gcc hello.c -o hello $ chmod 0100 hello $ ls -l 合計 12 ---x------ 1 vagrant vagrant 6417 3
複数サーバ間の設定ファイルを比較したいときはこうすればよいです。 ローカルファイルとリモートサーバのファイルを比較 $ ssh remotename cat /etc/hosts | diff /etc/hosts - こういう書き方もあります。 $ diff <(ssh remotename cat /etc/hosts) /etc/hosts リモートサーバ間のファイルを比較 $ diff <(ssh remote1 cat /etc/hosts) <(ssh remote2 cat /etc/hosts) 解説 ssh hostname cat /path/to/file "cat /path/to/file"というコマンドを別サーバ(hostname)上で実行させて、結果を自マシンの標準出力に出力します。 diff /path/to/file - diffで、ファイル名を指定する代
Git2.0がまもなくリリースされるようです。 Git v2.0 Release Notes リリースノートをもとに、一足早く新機能と変更点の紹介をしてみます。 (各機能についてはまだ動作確認しておりませんので、ここがおかしいなどあればご指摘ください) 引数なしのgit pushが安全になりました。 When "git push [$there]" does not say what to push, we have used the traditional "matching" semantics so far (all your branches were sent to the remote as long as there already are branches of the same name over there). In Git 2.0, the default is no
Vagrantfileのforwarded_portの設定で、よく config.vm.network :forwarded_port, guest: 80, host: 8080 と書いてる例を見かけます。 Vagrantfileのコメントにそう書いてあるので、そのままそれを使ってしまってる人が多いようです。 私もそうでした。 でもこれだとブラウザでいちいち http://localhost:8080/ みたいにうつのがめんどくさいし、 SSL環境だと https://localhost:8443/ になちゃって、やる気が失せる。 で今日気付いたんです。 普通に80 -> 80 , 443 -> 443に転送してしまえばいいんじゃないかと。 config.vm.network :forwarded_port, guest: 80, host: 80 config.vm.network :
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く