SSH ログインがスタックする問題とその解決法

自前で管理している SSH サーバーにログインしようとしたら、次のメッセージで止まるようになった。 Last login: Fri Oct 21 21:53:19 2022 from 100.xxx.xxx.xxx ServerFault にあるこちらの質問と似た現象である。次のコメントが気になった。 This just happened to me. In my case it turned out that a recent change to my .bashrc file was causing an infinite loop (.bashrc was sourcing .bash_profile which was sourcing .bashrc, doh!) 実はこの SSH サーバーでもシェル (Zsh) の設定を変更したばかりであったので、もしかしたらこれかもしれないと思った。 しかし、そもそも SSH できないサーバーのシェルの設定をどうすればいいのだろう…と思ったが、次のようにすればよいだけであった。この環境では Bash の設定は変わっていないので、SSH 越しに Bash を起動すればよい。 ssh mahata@my-machine.example.com -t bash こうして起動した Bash からエディタを起動して . [Read More]

Vagrant (VirtualBox) でディスクサイズを変更する方法

macOS を使い Vagrant で VirtualBox の VM を作り、そこで作業をするとしよう。そして途中で VM のディスク容量が足りないことに気づいたとする。どうすればいいのだろう? (なお、この記事では VM で CentOS 8 が動いていると仮定する) Vagrant で VM の設定を変更するのであれば、現時点でふたつの手がある。 Experimental なオフィシャルの機能を使うというのがひとつめ。この機能を使うには VAGRANT_EXPERIMENTAL="disks" という環境変数を設定した上で、Vagrantfile に config.vm.disk :disk, size: "100GB", primary: true というような記述を加えればよい。 もしくは vagrant-disksize というプラグインを使うという手もある。こちらを使うには vagrant plugin install vagrant-disksize というコマンドでプラグインをインストールし、config.disksize.size = "100GB" というような記述を Vagrantfile に追加する。 いずれかの手段をとった後、VirtualBox の GUI で VM の設定を眺めると次のようになる。 しかし、ここまでの操作では Linux が空きスペースをディスクとして割り当てない。例えば df -h コマンドを実行すると次のようになる。 [vagrant@ip-10-0-x-x ~]$ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.9G 0 1. [Read More]

fork (2) に関するあれこれ

こちらは「C 言語コンプレックスを払拭したいシリーズ」の派生記事である。 fork (2) の簡単なサンプル Linux では fork (2) を使ってプロセスを複製できる。fork() のプロトタイプは次の通りだ。 #include <unistd.h> pid_t fork(void); このシステムコールを実行すると、プロセスの情報が複製される。システムコールをコールしたプロセスは親と呼ばれ、複製されたプロセスは子と呼ばれる。fork() の返り値は親プロセスの場合は子プロセスの ID であり、子プロセスの場合は 0 である。 fork() を使うもっとも簡単なサンプルは次のようなものだろう。 #include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/wait.h> int main() { pid_t pid; pid = fork(); if (pid < 0) { fprintf(stderr, "fork(2) failed\n"); exit(1); } if (pid == 0) { printf("Hey, I'm a child process\n"); } else { int status; waitpid(pid, &status, 0); // 親は子を待つ必要がある printf("I spawned PID=%d, and it's done! [Read More]