【tar】 について

概説

tar の由来はテープらしいですが、テープと言えば MSX とかを思い出しますねー。仕事ではすごくむかしに TRAVAN とかいうのを使ってて、その後 DDS になった気がします。

https://scrapbox.io/nwtgck/tarでアーカイブを作るときの_fオプション_がないときの挙動を調べたことまとめ でも 環境変数 $TAPE がデフォルトだ、とあってなかなか今時使わないデフォルトだなあと思います。

もともとがテープ用途だったということで、ファイル構造は巻き戻さずに書き込みもしくは読み込みできるようになってます。

ファイル構造も抑えておきましょう。
https://www.gnu.org/software/tar/manual/html_node/Standard.html
https://web.archive.org/web/20240308041109/http://www.redout.net/data/tar.html
512bytes で一ブロックのようですね

コマンド

tar をつくるときは c , 展開するときは x

v で詳細出力。これはつけといた方がいいですよね

z をつけるとgzip圧縮/解凍するのですが、大きいファイルの圧縮は z をつけずに pigz を通した方が速いです。

--exclude も便利です。
https://m-hiyama.hatenablog.com/entry/20081129/1227934098

その他

man も見ておきましょう。 https://linuxjm.sourceforge.io/html/GNU_tar/man1/tar.1.html

tar は POSIXコマンドではない https://zenn.dev/kusaremkn/articles/1aa3062634c973#fnref-7741-2

意外と更新されてるんですねー https://ftp.gnu.org/gnu/tar/

【MongoDB】 複数バージョンをスキップしてバージョンアップをしたい

MongoDBをそろそろバージョンアップしないとなー、と思っていたら幾星霜、とうとうやる気になったらなんと3.4から7.0まで上げないといけない、とかいう状況に遭遇した場合、

通常は ローリングアップデート でやるんだろうけれども、そうするとえーと、

3.4 → 3.6 → 4.0 → 4.2 → 4.4 → 5.0 → 6.0 → 7.0

と、なんとまあ、七回もバージョンアップを繰り返さなきゃいけなくなります。

で、ふつうは、じゃあダウンタイムは許容するとしてダンプ&リストアで何とかならないのか、と思いますよね。

でもどこをさがしてもなんか”ダンプ&リストアで何とか”なるのかどうか公式ドキュメントだとよくわからない。

https://www.mongodb.com/community/forums/t/dump-and-restore-between-version-3-6-and-5-0/168933

には

If downtime is acceptable and you have a large number of major releases to upgrade through, you can also consider a migration using mongodump and mongorestore.

とあるものの、

will encounter different issues depending on the provenance of your data

とかあるし、ちょっと心配ですが、まあきちんとテストすれば、というかローリングアップデートしたからといってテストしないわけでもないし、こっちの方が楽かなーと思います。

ちなみにこちらでは docker 使って複数バージョン間バージョンアップを自動化するという力業が紹介されてて、なるほどすごいなーという感じです。

https://stackoverflow.com/questions/37833561/restoring-the-database-dump-of-an-older-version-of-mongo-to-a-new-version-of-mon

【CentOS7】 acme-tinyをyumでインストールし、let’s encryptでSSL証明書を取得する

acme-tinyはapacheの再起動とか余計なことをしないので、certbotより使いやすいと思います。
詳しくは https://github.com/diafygi/acme-tiny をご参照ください。

認証したいドメイン名が 171220.0x0c.info で、httpサーバに apache 2.4.8以降を用いる場合で説明します。


Step 1

このへんは環境に合わせてください↓

yum install httpd mod_ssl
yum install epel-release 
yum install acme-tiny

Step 2

acme-tinyをインストールすると /etc/httpd/conf.d/acme.conf/var/www/challenges/ ができるので、apacheをリロードするなりここから起動するなりします。

service httpd start

Step 3

アカウントキー作成

openssl genrsa 4096 > /var/lib/acme/private/account.key

Step 4

ドメイン用の秘密キー作成

openssl genrsa 4096 > /var/lib/acme/private/171220.0x0c.info.key

Step 5

リクエスト作成

openssl req -new -sha256 -key /var/lib/acme/private/171220.0x0c.info.key -subj "/CN=171220.0x0c.info" > /var/lib/acme/csr/171220.0x0c.info.csr

Step 6

let’s encryptにリクエストする

/usr/sbin/acme_tiny --chain --account-key /var/lib/acme/private/account.key --csr /var/lib/acme/csr/171220.0x0c.info.csr --acme-dir /var/www/challenges/ > /var/lib/acme/certs/171220.0x0c.info.crt

Step 7

できあがった証明書と秘密鍵をコピーしてapacheをリロード。
このあたりも環境に合わせてください。

cp /var/lib/acme/private/171220.0x0c.info.key /etc/pki/tls/private/localhost.key
cp /var/lib/acme/certs/171220.0x0c.info.crt /etc/pki/tls/certs/localhost.crt
service httpd reload

Step 8

以下のようなスクリプトを作り、一ヶ月に一回cronで回す。

#!/bin/sh
/usr/sbin/acme_tiny --chain --account-key /var/lib/acme/private/account.key --csr /var/lib/acme/csr/171220.0x0c.info.csr --acme-dir /var/www/challenges/ > /var/lib/acme/certs/171220.0x0c.info.crt || exit
cp /var/lib/acme/certs/171220.0x0c.info.crt /etc/pki/tls/certs/localhost.crt
/usr/sbin/service httpd reload

おまけ:nginxの場合

上記Step 5とStep 6の間に、以下のようにnginxを設定し、リロードしておきます。

server {
        listen 80 default_server;

の下に以下のように設定します。

        #for acme-tiny
        location /.well-known/acme-challenge/ {
            alias /var/www/challenges/;
            try_files $uri =404;
        }