はじめに

この記事は、Linux環境でISOイメージをマウントして作業している際に、「ファイルの権限を変更したいのに読み取り専用でできない」という問題に直面した方を対象としています。特に、LinuxのLiveCDやカスタムISOを扱う開発者やシステム管理者の方に役立つ内容です。

この記事を読むことで、ISOイメージの仕組みと、なぜ権限変更ができないのかを理解し、実際にファイルを編集可能な状態にするための具体的な方法を習得できます。mountコマンドの使い方から、ISOを書き換え可能な形で再構築する方法まで、段階的に解説します。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。

  • Linuxの基本的なコマンド操作(cd, ls, cp, chmodなど)
  • ファイルシステムとマウントの基本概念
  • ファイル権限(755, 644など)の基礎知識

ISOイメージの読み取り専属性の理由

ISO 9660形式は、もともとCD-ROM用に設計されたファイルシステムです。その特性上、読み取り専用(read-only) であることが基本仕様です。LinuxでISOイメージをマウントするとき、通常は以下のようなコマンドを使用します:

Bash
sudo mount -o loop ubuntu.iso /mnt/iso

このとき、mountコマンドは自動的に-o ro(read-only)オプションを適用します。これはISO 9660ファイルシステムの特性を考慮した安全な動作です。

また、最近のLinuxディストリビューションのISOには、squashfsという圧縮ファイルシステムが使われている場合もあります。squashfsも書き込み不可能なファイルシステムで、元々の設計が読み取り専用です。

ファイル権限を変更するための具体的な手順

ISOイメージに含まれるファイルの権限を実際に変更するには、ISOを直接書き換えるのではなく、一度展開して再構築する必要があります。

ステップ1:ISOイメージを展開する

まず、ISOイメージを展開(エクストラクト)します。7z(7-Zip)かbsdtarが便利です。

Bash
# 7zをインストール(未インストールの場合) sudo apt install p7zip-full # ISOを展開 7z x ubuntu.iso -oextracted_iso

展開後、中身を確認してみましょう:

Bash
cd extracted_iso ls -la

ステップ2:ファイルシステムを展開する

多くのLinux ISOにはfilesystem.squashfsというファイルが含まれています。これが実際のOSファイルを含む圧縮ファイルシステムです。

Bash
# squashfs-toolsをインストール sudo apt install squashfs-tools # squashfsを展開 unsquashfs filesystem.squashfs

これでsquashfs-rootディレクトリが作成され、中に実際のファイルシステムが展開されます。

ステップ3:権限を変更する

展開したファイルシステム内で、自由にファイルの権限を変更できます。

Bash
cd squashfs-root # 例:特定のディレクトリの権限を変更 sudo chmod 755 usr/local/bin/myscript sudo chown root:root usr/local/bin/myscript

複数のファイルを一度に変更することも可能です:

Bash
# スクリプトファイルを実行可能にする find . -name "*.sh" -exec chmod 755 {} \;

ステップ4:squashfsを再構築する

権限変更が完了したら、squashfsを再構築します:

Bash
# バックアップを取る cd .. mv filesystem.squashfs filesystem.squashfs.orig # 新しいsquashfsを作成 mksquashfs squashfs-root filesystem.squashfs -comp xz -b 1M

ステップ5:ISOを再構築する

最後に、展開したISOディレクトリから新しいISOイメージを作成します:

Bash
# 必要なツールをインストール sudo apt install genisoimage # ISOを再構築(EFIブート対応) cd extracted_iso genisoimage -o ../modified_ubuntu.iso \ -b isolinux/isolinux.bin \ -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -eltorito-alt-boot -e EFI/boot/grubx64.efi -no-emul-boot \ -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \ -V "ModifiedUbuntu" .

ハマった点やエラー解決

エラー1:「read-only file system」エラー

ISOをマウントしたままファイルを直接編集しようとして、上記のエラーが出ることがあります。これはISO 9660ファイルシステムの仕様上、正しい動作です。必ず展開してから作業してください。

エラー2:squashfs展開時の「Filesystem uses xz compression, this is unsupported by this version」

古いバージョンのsquashfs-toolsを使っていると、このエラーが出ることがあります。解決策は以下の通りです:

Bash
# 最新版をソースからビルド git clone https://github.com/plougher/squashfs-tools.git cd squashfs-tools/squashfs-tools make && sudo make install

エラー3:再構築したISOがブートしない

EFIブートに対応していない場合、再構築したISOが起動しないことがあります。上記のgenisoimageコマンド例では、EFIブート用のオプションを含んでいますが、元のISOに合わせてオプションを調整する必要があります:

Bash
# 元のISOのブート情報を確認 isoinfo -d -i ubuntu.iso

この情報を基に、適切なオプションを指定し直してください。

まとめ

本記事では、LinuxでISOイメージをマウントした際にファイル権限が変更できない問題の背景と、それを解決するための具体的な手順を解説しました。

  • ISO 9660とsquashfsは元々読み取り専用のファイルシステムである
  • ISOを展開→ファイルを編集→再構築することで、権限変更が可能になる
  • 最新のツールを使用し、正しい手順で再構築することで、ブート可能なISOを作成できる

この記事を通して、ISOイメージの内部的な構造を理解し、カスタマイズするための実践的なスキルを身につけていただければ幸いです。

今後は、展開したファイルシステムをchrootで起動してパッケージの追加や設定変更を行う方法についても記事にする予定です。

参考資料