core-image-minimalなどのコンソール環境で自動ログインする。
昔はIMAGE_FEATURESにautologinとか入れれば、実現できたらしいが 機能の実現に使用していたパッケージがメンテナンスされてなかったらしく、 この機能が削除されてしまったらしい。
基本的には、tty1のgettyのパラメータを変更することで実現できるが、sysvinitとsystemdで修正するファイルが異なる。
sysvinitでの自動ログイン
sysvinitでは/etc/inittab
を変更することで、自動ログインを実行する。
sysvinitではデフォルトでbusyboxのgettyが使用されるので、autologinが使用できないので、
agettyやmingettyを入れる必要がある。
local.confを修正して、agettyを入れる。
IMAGE_INSTALL_append = " util-linux-agetty"
その後、core-image-minimalのイメージにログインして、次のコマンドを実行する。
sed -i 's|/sbin/getty|/sbin/agetty -a root --noclear|' /etc/inittab
再起動後、自動的にrootでログインされるようになる。
systemdでの自動ログイン
ドロップインファイルを作成し、agettyのパラメータを変更する。
$ mkdir /etc/systemd/system/getty@tty1.service.d $ cat << 'EOF' > /etc/systemd/system/getty@tty1.service.d/autologin.conf [Service] ExecStart= ExecStart=-/sbin/agetty -a root --noclear %I $TERM EOF
yoctoへの組み込み
meta-autologinの作成
$ yocto-layer create autologin 10 $ mkdir -p meta-autologin/classes $ mv ./meta-autologin ../poky $ bitbake-layers add-layer ../poky/meta-autologin
autologin.bbclassの作成
bbclassを使用してROOTFS_POSTPROCESS_COMMAND、イメージ作成時に処理をフックする。
meta-autologin/classes/autologin.bbclass
を作成
$ emacs ../poky/meta-autologin/classes/autologin.bbclass
次の内容を記述
auto_login_sysvinit() { sed -i 's|/sbin/getty|/sbin/agetty -a root --noclear|' \ ${IMAGE_ROOTFS}/etc/inittab } auto_login_systemd() { mkdir ${IMAGE_ROOTFS}/etc/systemd/system/getty@tty1.service.d cat << 'EOF' > ${IMAGE_ROOTFS}/etc/systemd/system/getty@tty1.service.d/autologin.conf [Service] ExecStart= ExecStart=-/sbin/agetty -a root --noclear %I $TERM EOF } ROOTFS_POSTPROCESS_COMMAND += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'auto_login_systemd;', 'auto_login_sysvinit;', d)}" RRECOMMENDS_base-files_append = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', ' util-linux-agetty', d)}"
local.confの修正
local.confに次の行を追加
INHERIT += "autologin"
ビルド
$ bitbake core-image-minimal
ラズベリーパイなら
$ bitbake rpi-basic-image
これで、rootとして自動ログインされるようになる。