gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

インフラの(雑)管理方法

https://twitter.com/ndxbn/status/1189735988907536384

マシンの /usr/local 以下に make && make install で直接インストールしてあるミドルウェアのバージョン更新って、どうしてます?
普通に新しいバージョンの tar ball を持ってきて、 make && make install で上書きしておわり?

https://twitter.com/ndxbn/status/1189745023736090625

ミドルウェアの更新するハメになったのだけれど、そういえばどうしてるんだろうって気になったので聞いたーー
使わなくなった lib とか includes が残留していくけど、キニシナイ感じなのねー?
更新してダメだったとき用で直ぐにバージョン戻せる必要とかもあるから /opt とか使ってくれーなどと思う

という質問を貰ったので。
ツイッターで書くには微妙に長くなりそう」なのと、ちょうどこの辺はどこかで書いておきたいなぁ、と思っていたので、おいちゃん流の雑管理のやり方を。

大雑把には
・バージョンをさほど気にしていなくてコンパイルオプションも気にしていないものは、パッケージ管理(yum)でインストール
・バージョンを気にしたりコンパイルオプションを気にしたりするものは、ソースコードでインストール
てな感じかな。

もうちょっと台数が増えたりしたら、Fabricつかったり(AWSなら)AMIつかったりBlue-Green Deploymentやったり、とか色々と妄想はしているのですが(笑
現状、そこまでの台数でもないので、とりあえずは手動でえっちらおっちらと。

昔は割と「がっちがち」だったのですが、時間とともに段々「緩く」なってきました(笑
っていう流れとともに。

昔々は「全部、ソースコードinstall」でやってました。
教えてくれた人の流儀なんだと思うんですが、 /usr/local/srcではなくて、/usr/srcにコードを置く事が多かったですねぇ。

install先ですが。
単純なライブラリとかはそのまま make installだったのですが、例えばapacheとかは
・ベースは /opt
apacheなら、例えば /opt/apache/apache-2.4.41 などの「バージョンが入っているディレクトリ」にinstall
シンボリックリンクで、最新のディレクトリを /opt/apache/apache_current
に入れてます(ました)。

これの最大の利点は、まぁ上述にもあるとおり「バージョンがすぐに戻せる」事。
apache止めて
シンボリックリンクを「一つ前の古いディレクトリ」に指し直して
apache動かす
で戻せるので「楽」だってんで、昔、教えてくれた人から教わったので、割とそれをずっと使ってました。

古いバージョンは……一応建前としては「使わなくなったものは消す」のですが、ディスクが圧迫していなければ、あんまり消さなかったなぁ。
10世代超えると邪魔くさいんで、少し消してましたが。

そこから少し時は流れて。

いやまぁ例えばぶっちゃけgccとかlibtoolとかcmakeとか「そこまでバージョンをタイトに追ってない」かつ「コンパイルオプションを基本あんまり使わない」もの、ってぇのがありまして。
この辺はまぁ、yumなりrpmなりdnfなりapt-getなりaptitudeなりを使って「楽をしてもいいんじゃないかなぁ」ってのが、おいちゃんの最近の見解。
なので「どこまでをパッケージ管理で入れるか」には多少の議論はあろうかなぁ、と思うのですが、「どこか、までは」パッケージ管理を使って、ある程度楽をしています(笑

で、例えば典型的にはPHPあたりは、おいちゃんは「ソースコードでinstall」しています。
PHPの場合は
・最新のバージョンを追いたい
コンパイルオプションを割と色々と付け足したり変えたりする事が多い
から。
似たような理由で、apache(+apr-util)、nginxあたりはソースコードinstallが多いです。
MySQLも多かった……のですが、最近、お仕事だとRDSとか使う事が多いので、installする事が減ったなぁ。まぁ「なんかで使う」なら、ソースコードで入れますが。

この辺は
・/usr/local/src なり /usr/src なりに、tar ball持ってきて
・configure / make / sudo make install する
ってやりかた(MySQLはcmakeになったよねぇ、とかいう細かい話しはおいといて)。

configureのオプションを残しておきたいので、おいちゃんは
php7_ccc
apche_ccc
nginx_ccc
mysql_ccc
みたいな形で、ファイルで残しておくようにします。そうするとlostしない(笑

で、万が一戻す時は
・戻したいバージョンのディレクトリで sudo make install
する感じかな。単純。

configとかは、メンテナンスバージョンくらいでは大してかわらないので。とはいえまぁこれも教えられた流儀があるので
・cp -p で「日付付き」でバックアップファイルを作っておく
・編集したらdiffコマンドで「意図しない箇所を変更していないか」を確認
ってやるので。もし「configを変えた」ら、それも戻せばOK。

……でまぁ、こんなやり方なので、最近「インストールディレクトリもバージョン番号付き」にする、のは、やらなくなっちゃいましたねぇ。

んで。
> 使わなくなった lib とか includes が残留していくけど、キニシナイ感じなのねー?
このやり方をすると、includesは「/usr/local/src 側」に残るはずなので、あんまり気にしない。
もし「別のプロダクトのincludeを参照する」ような場合は、例えば
ln -s /usr/local/php-7.2.24 /usr/local/php-7.current
とかってやって「シンボリックリンクを -I オプションに指定する」とかやると、普通に楽。

libについては「そこまで散らからないだろう」と思っているので、「キニシナイ」感じかなぁ。
昔ならともかく、今「サーバのファイルの最後の1つまで全部把握」は若干しんどいので(笑

最近は、こんな感じかなぁ。
これでとりあえず「差し障りない」くらいの管理は出来ているので。「もっとすっげぇ楽」とか「差し障る」とか出たら方針を変えそうですが、しばらくはこんな感じでやってます。