はじめに
chrootを使って、Linuxのimgにライブラリをインストールする。
環境
- ホスト:Ubuntu 24.04
問題、課題
LinuxのUbuntuをimgファイルを複数回、再インストールを行う作業を行っていた。その際、必要なライブラリを都度にインストールすることが手間がかかったため、imgに直接にインストールすることで、ライブラリのインストールにかかる時間の短縮化する。
chrootコマンドを使って、debファイルをインストールする。
解決
chrootコマンドについて
chroot コマンドは、Unix系オペレーティングシステムで使用されるコマンドで、指定したディレクトリを新しいルートディレクトリ(/)として設定し、その環境内でコマンドを実行するためのものである。これにより、プロセスがその新しいルートディレクトリを基準にファイルシステムを参照するようになる。
imgをマウントして、chrootしてそのマウント先を新しいルートディレクトリとして操作することで、ライブラリをインストールする。
パスを確認
使用するファイルのパスを確認する。
$ ls <library>.deb ubuntu-22.04.1-server_work.img
イメージファイルをマウント
まず、イメージファイルをループバックデバイスとしてマウントする。
$ ls ubuntu-22.04.1-server_work.img ubuntu-22.04.1-server_work.img $ sudo losetup -fP ubuntu-22.04.1-server_work.img
これにより、イメージファイルがループバックデバイスに関連付けられる。 次に、どのデバイスに関連付けられたかを確認する。
$ sudo losetup -l NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC /dev/loop0 0 0 0 0 /home/admin/cdi/RMcli_v1.0.0.108/RMcli_RedHat8.6_v1.0.0.108/ubuntu-22.04.1-server_work.img 0 512
/dev/loop0 に関連付けられたことを確認した
パーティションをマウント
イメージファイル内のパーティションをマウントする。 まず、パーティション情報を確認する。
$ sudo fdisk -l /dev/loop0 Disk /dev/loop0: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 1E86FE81-6066-45BB-A5CC-6E4A9CC07D76 Device Start End Sectors Size Type /dev/loop0p1 2048 2203647 2201600 1.1G EFI System /dev/loop0p2 2203648 18980863 16777216 8G Linux filesystem
Linux filesystemと記載のあるdeviceに対して、マウントポイントを作成し、パーティションをマウントする。
$ sudo mkdir /mnt/ubuntu_image $ sudo mount /dev/loop0p2 /mnt/ubuntu_image #確認 $ mount | grep /mnt/ubuntu_image /dev/loop0p2 on /mnt/ubuntu_image type ext4 (rw,relatime,seclabel)
インストーラをコピー
chroot環境内でdebパッケージをインストールする。まず、debパッケージをchroot環境内にコピーする。
$ cp -r ./<library>.deb /mnt/ubuntu_image/tmp/
chroot環境に入る
chroot環境のために、ホスト側の必要なファイルをマウントし、マウントしたイメージファイルのルートファイルシステムにchrootする。
$ sudo mkdir /mnt/ubuntu_image/dev $ sudo mount --bind /dev /mnt/ubuntu_image/dev #確認 $ mount | grep /mnt/ubuntu_image/dev devtmpfs on /mnt/ubuntu_image/dev type devtmpfs (rw,nosuid,seclabel,size=7822248k,nr_inodes=1955562,mode=755) $ sudo mkdir /mnt/ubuntu_image/proc $ sudo mount --bind /proc /mnt/ubuntu_image/proc #確認 $ mount | grep /mnt/ubuntu_image/proc proc on /mnt/ubuntu_image/proc type proc (rw,nosuid,nodev,noexec,relatime) $ sudo mkdir /mnt/ubuntu_image/sys $ sudo mount --bind /sys /mnt/ubuntu_image/sys #確認 $ mount | grep /mnt/ubuntu_image/sys sysfs on /mnt/ubuntu_image/sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
chrootに入る。
$ sudo chroot /mnt/ubuntu_image (20秒ほど時間がかかる) root@localhost:/# whoami root
ライブラリのインストール
chroot環境内で以下のコマンドを実行してインストールする。
root@localhost:/# dpkg -i /tmp/<library>.deb #確認 root@localhost:/# dpkg -l | grep cortex (インストールしたライブラリが表示されることを確認)
chroot環境から抜ける
インストールが完了したら、chroot環境から抜けます。
# exit exit
マウントを解除
最後に、すべてのマウントを解除し、ループバックデバイスを解放する。
$ sudo umount /mnt/ubuntu_image/dev $ sudo umount /mnt/ubuntu_image/proc $ sudo umount /mnt/ubuntu_image/sys $ sudo umount /mnt/ubuntu_image $ sudo losetup -d /dev/loop0 #確認 $ mount | grep /mnt/ubuntu_image (何も表示されない)