非対話的に ~/.ssh/known_hosts を更新
基本は上記記事の
host="target-hostname" ssh-keygen -R $host ssh-keyscan -H $host >> ~/.ssh/known_hosts
でいいのだけど、(少なくとも自分の環境だと) ssh-keyscan で出力した1列目のカラムにホスト名しか出力されず、 その後別のレコード(行)としてIPアドレスが登録されてしまっていた。
hoge ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCq9UXuh/sKm4oBs68VlfAvjc/WaV83brTXkoTOLr2339XxMMzDQQ1FX9jP4Ie6rUfoDrvA1t8N2peJoG2e1rvPgtNAabZxz92l0V1+XYYhEf6Y0n0ZzXv4pf+YWfcj6VtXcQaoaxQ0PieREStTluOShAdA8MpJBAX1qId2qCZ2koF5mPIT/vUF8kEzzXBZjYGx1nOEBL6Caqg1P4wJS4trwOGfeV3/eIZW0jwrujOxYD0NHvaV/UJBZsPceYZthD8G4xAFqkCm5ZXJCiHyEtVRicbB2VddsPpKh6J8+FPMCINHrFmAVGLNG1H424STVacXPqdpdnvdRnYFf6dhjYH (hogeのIPアドレス) ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCq9UXuh/sKm4oBs68VlfAvjc/WaV83brTXkoTOLr2339XxMMzDQQ1FX9jP4Ie6rUfoDrvA1t8N2peJoG2e1rvPgtNAabZxz92l0V1+XYYhEf6Y0n0ZzXv4pf+YWfcj6VtXcQaoaxQ0PieREStTluOShAdA8MpJBAX1qId2qCZ2koF5mPIT/vUF8kEzzXBZjYGx1nOEBL6Caqg1P4wJS4trwOGfeV3/eIZW0jwrujOxYD0NHvaV/UJBZsPceYZthD8G4xAFqkCm5ZXJCiHyEtVRicbB2VddsPpKh6J8+FPMCINHrFmAVGLNG1H424STVacXPqdpdnvdRnYFf6dhjYH
これによって新たにプロンプトが出て待たされることはない(ホスト名が既に登録されている場合はプロンプトは出ないらしい。「Warning: Permanently added the ECDSA host key for IP address 'xxx.xxx.xxx.xxx' to the list of known hosts.
」といつものメッセージが表示されて静かに追加される)。
ただ、いくつも行ができるのは何となく気持ち悪い。
そこで以下のように、
- ホスト名から引いたIPアドレスを付加させるようにした
- 自分の環境だと対象が CNAME で実 IP は複数ある可能性があったので、
$HOST_LIST
に全てのホスト名を列挙することにした *1 - ついでに
~/.ssh/known_hosts
がない時にssh-keygen -R
でエラーが出ないようガードするようにした - ちなみにパースできなくなるので
ssh-keyscan
に-H
はつけていない…(外した)
HOST_LIST='hostA hostB hostC' HOST=... get_ip_list() { local host for host in $HOST $HOST_LIST; do getent hosts $host || true done | awk '$0=$1' | sort -u | paste -d , -s } [ -f ~/.ssh/known_hosts ] && ssh-keygen -R $HOST ssh-keyscan $HOST | awk -v "hosts=$(get_ip_list)" '$1 = $1 "," hosts' \ >>~/.ssh/known_hosts
これにより冒頭でも示した ~/.ssh/known_hosts
に追加される行は以下のようになる。
Before
hoge ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCq9UXuh/sKm4oBs68VlfAvjc/WaV83brTXkoTOLr2339XxMMzDQQ1FX9jP4Ie6rUfoDrvA1t8N2peJoG2e1rvPgtNAabZxz92l0V1+XYYhEf6Y0n0ZzXv4pf+YWfcj6VtXcQaoaxQ0PieREStTluOShAdA8MpJBAX1qId2qCZ2koF5mPIT/vUF8kEzzXBZjYGx1nOEBL6Caqg1P4wJS4trwOGfeV3/eIZW0jwrujOxYD0NHvaV/UJBZsPceYZthD8G4xAFqkCm5ZXJCiHyEtVRicbB2VddsPpKh6J8+FPMCINHrFmAVGLNG1H424STVacXPqdpdnvdRnYFf6dhjYH (hogeのIPアドレス) ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCq9UXuh/sKm4oBs68VlfAvjc/WaV83brTXkoTOLr2339XxMMzDQQ1FX9jP4Ie6rUfoDrvA1t8N2peJoG2e1rvPgtNAabZxz92l0V1+XYYhEf6Y0n0ZzXv4pf+YWfcj6VtXcQaoaxQ0PieREStTluOShAdA8MpJBAX1qId2qCZ2koF5mPIT/vUF8kEzzXBZjYGx1nOEBL6Caqg1P4wJS4trwOGfeV3/eIZW0jwrujOxYD0NHvaV/UJBZsPceYZthD8G4xAFqkCm5ZXJCiHyEtVRicbB2VddsPpKh6J8+FPMCINHrFmAVGLNG1H424STVacXPqdpdnvdRnYFf6dhjYH
After
hoge,(hogeのIPアドレスのリスト) ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCq9UXuh/sKm4oBs68VlfAvjc/WaV83brTXkoTOLr2339XxMMzDQQ1FX9jP4Ie6rUfoDrvA1t8N2peJoG2e1rvPgtNAabZxz92l0V1+XYYhEf6Y0n0ZzXv4pf+YWfcj6VtXcQaoaxQ0PieREStTluOShAdA8MpJBAX1qId2qCZ2koF5mPIT/vUF8kEzzXBZjYGx1nOEBL6Caqg1P4wJS4trwOGfeV3/eIZW0jwrujOxYD0NHvaV/UJBZsPceYZthD8G4xAFqkCm5ZXJCiHyEtVRicbB2VddsPpKh6J8+FPMCINHrFmAVGLNG1H424STVacXPqdpdnvdRnYFf6dhjYH
参考リンク
ローカルの様々なリポジトリを GitLab につっこんだ記録
やったこと
- Gitlab を VM にインストール
- ローカルの未公開リポジトリを Gitlab にプッシュ
- あるリポジトリをジョブ管理ツールでジョブ実行した時に git push で更新
- BitBucket のリポジトリを Gitlab にバックアップ
- GitHub のリポジトリを Gitlab にバックアップ
Gitlab を VM にインストール
インストールは公式サイトの手順通りにやればすんなり入る。
Download GitLab Community Edition (CE) | GitLab
しかし、Web にアクセスしてみたら頻繁に 502 が返ってきて、ログを調べてみたらいろんなプロセスが kill されていた。 メモリが足りないっぽい(そういや前さくらVPSに立てた時もこんな事があった)。
2GB RAM is the recommended memory size for all installations and supports up to 100 users
VM に割り当てるメモリは安全のために 3072M(3G) にしといた。
2 cores is the recommended number of cores and supports up to 500 users
とも書いてあったが、CPU は 1 core のままにしといた(ケチった)。
ホスト名が local-the-host のため、リポジトリの URL が git@local-the-host:user/repos.git
になってしまう。
CNAME を設定してそちらにアクセスする予定なので、ホスト名を変える。
変えるには /etc/gitlab/gitlab.rb をいじって反映させるコマンドを実行する必要がある。
For an Omnibus install, it is a little different.
The correct place in an Omnibus install is:
/etc/gitlab/gitlab.rb external_url 'http://gitlab.example.com' Finally, you'll need to execute sudo gitlab-ctl reconfigure and sudo gitlab-ctl restart so the changes apply.
How to change URL of a working GitLab install? - Stack Overflow
Omnibus っていうのは、ざっくり言ってパッケージ化されたバージョンの Gitlab。 gitlab-ctl コマンドを使って設定を反映する。
あるリポジトリをジョブ管理ツールでジョブ実行した時に git push で更新
まず今回対象のとあるリポジトリ用のユーザを Gitlab と CentOS にそれぞれ作っておく。
Gitlab では Members に Developer(push できるユーザ)として加え、 ユーザごとに作れるプロジェクト数なんてものがデフォルトで 10 に設定されてるらしいので、 Project limit を念のため 1 にした(Admin 設定からいける)。 もう動確めんどいのでやらないけど、プロジェクト作れないようにしたいなら 0 にすればいいらしい。 あと上記リポジトリ用ユーザに不要なリポジトリが見えないよう、基本全てのリポジトリは Private にしておく。
CentOS ではユーザと専用のホームディレクトリを作成し、~/.netrc に以下のように書いておく(パスワードプロンプトをスキップさせるための設定ファイル)。 セキュリティ的によろしくないけどとりあえずこれで。 SSH 鍵を転送とか考えたけど、結局ファイルやホームディレクトリのパーミッションだけ気を付けるようにした。
machine gitlab.lan login hogeuser password xxxxx
で、実行ユーザに注意しながらジョブ管理ツールに実行させる。 すると無事実行したスクリプトで git push して Gitlab にプッシュさせる事ができた。
ちなみにジョブ管理ツールは惰性で Hinemos 使ってるけどいい加減 Rundeck とかに移行したい(エージェントが重い)。 やるとは言ってない。
BitBucket のリポジトリを Gitlab にバックアップ
BitBucket 連携したものの、バックアップするリポジトリがなかった(終)。
(なんかあったと思ったけどゴミしかなかった)
GitHub のリポジトリを Gitlab にバックアップ
GitHub 連携で楽できた。
インポートしたら GitHub のユーザ名と同じ名前空間にリポジトリが作られるけど、 自分は /tyru/repo じゃなく /github/repo に作ってほしかったので、せっせこ手動で Transfer した。
ちなみに取得するリポジトリ一覧には fork したものも含まれるので、
http://<gitlab>/thinca/vim-ambicmd/
みたいに Gitlab が勝手に thinca グループ作ってくれて便利。*1
*1:こっちもせこせこ手動で削除した
本で勉強するか Web で勉強するか
最近技術書を買うかどうかの判断が確立してきた。 のでブログにまとめてみる。
自分の場合、以下のような大きい問題領域を扱う技術を本気で勉強したい、となったら本を買うと決めている。
- プログラミング言語
- OS
- 手法自体に関するもの
けどライブラリやツールの場合、なるべく本は買わない。 それは今までハズレが多かったから。 この「ハズレ」というのは以下の様なケースを指している。
- 自分が知識を吸収できなかった
- それほど得るものがなかった
- 買ったものの情報の鮮度が古くて使えないと判断した
なぜツールとライブラリはこのようなケースが多いのか。 それはまず前提として、「ツールやライブラリは何らかの特定領域の問題を解決するためのものである」という事。
これにより界隈の状況や HW リソースの向上により問題自体が無くなったり、性質が変わったりしてしまう(Web 界隈は特にその傾向が激しい)。
また、情報の鮮度も比較的落ちやすい。 よって公式ドキュメントにあたった方が確かな情報を得られる。
また公式ドキュメントを見る他の理由として、ツールやライブラリの場合、情報が公式のコミュニティに集積しやすいというのがあると思っている。
これに関してはプログラミング言語や OS となると問題領域が大きすぎて(自分にとって)実用的な情報が公式コミュニティからは得られにくい。*1
よって、その根本的な所の思想を含めた技術を理解しないと「私○○できます」とは言えない。*2
なのでそういった類の技術だと判断したら技術書を買う事にしている。
ぶっちゃけリファレンスなら Web の方がずっと役に立つし、公式サイトを見れば分かるような本は買いたくない。
でも小ネタばかりを集めると 〜 Hacks とかみたいに結構根本につながる知識に出会えたりもする。 でもそれは Web でもできることなので、今はそういった本を積極的に買う気にはなれない…(主に経済的理由で) 個人的には Advent Calendar でいいやと思い始めている。*3
Linuxサーバ Hacks 2 ―コネクティング、モニタリング、トラブルシューティング
- 作者: Bill von Hagen,Brian K. Jones,菅野良二
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2006/10/24
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 26回
- この商品を含むブログ (31件) を見る
Binary Hacks ―ハッカー秘伝のテクニック100選
- 作者: 高林哲,鵜飼文敏,佐藤祐介,浜地慎一郎,首藤一幸
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2006/11/14
- メディア: 単行本(ソフトカバー)
- 購入: 23人 クリック: 383回
- この商品を含むブログ (223件) を見る