さまざまな Linux サーバー ディストリビューション (Fedora、Ubuntu、Centos など) でテストを実行しようとしています。
起動後にプログラムを実行できる init システムがあることは知っています (ログインなし)。問題は、ディストリビューション間で異なる init システムごとに特別なケースを用意したくないことです。起動後にルート自動ログインを許可する方法はありますか?
こうすることで、どのディストリビューションでも同じシェル スクリプトを使用できます。または、この問題を回避する方法はありますか?
答え1
起動後に(ログインなしで)プログラムを実行できる init システムがあることは知っています。
残念ながら、最近では1つinit システムには、人気のある init システムが 6 つあります。たとえば、sysv init、systemd、upstart などです。
いずれにせよ、システムでルート アクセスを持つコンソールを本当に提供したい場合は、おそらく init システムを更新する必要があります。
私はいくつかのシステムのシリアル ポートに対してこれを行います。 2 つの非常に異なる構成があり、2 つの異なるリリースの Debian のみを使用しています。 すべてのディストリビューションに適用できる単一の方法を思いつくことができるとは思えません。物事を開始する方法に一貫性がないのです。 Systemd はディストリビューション間でかなり似ているはずですが、まだ広く受け入れられていません。
sysv init (wheezy) を使用した Debian でシリアル ポートのルートにドロップする
# /etc/inittab
...
# serial port getty spawns sulogin, which drops to a root shell
# on debian if root has a disabled password
T0:23:respawn:/sbin/getty -n -l /sbin/sulogin -L ttyS0 57600 vt102
...
systemd (jessie) を搭載した Debian でシリアルポートからルートにドロップする
#/etc/systemd/system/getty.target.wants/[email protected]
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Serial Getty on %I
Documentation=man:agetty(8) man:systemd-getty-generator(8)
Documentation=http://0pointer.de/blog/projects/serial-console.html
BindsTo=dev-%i.device
After=dev-%i.device systemd-user-sessions.service plymouth-quit-wait.service
After=rc-local.service
# If additional gettys are spawned during boot then we should make
# sure that this is synchronized before getty.target, even though
# getty.target didn't actually pull it in.
Before=getty.target
IgnoreOnIsolate=yes
[Service]
ExecStart=-/sbin/agetty -n -l /sbin/sulogin --keep-baud 115200,38400,9600 %I $TERM
Type=idle
Restart=always
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
KillMode=process
IgnoreSIGPIPE=no
SendSIGHUP=yes
[Install]
WantedBy=getty.target
最善策は、root としてログインするという考えをあきらめて、代わりに puppet などの構成管理ツールを使用することです。これにより、さまざまなディストリビューションのリリースの違いを抽象化できます。そのツールでテストの実行をトリガーします。
答え2
答え3
何を望んでいるのかよく分かりませんが、Linux の起動後に root として何かを実行したい場合は、ほとんどのディストリビューションでここに入力します:
/etc/rc.local
あるいは時には
/etc/rc.d/rc.local
答え4
コマンドライン プログラミングの場合は、SSH 経由で実行する方がよいでしょう。さらに、SSH キーを使用してパスワードなしでログインすることもできます。