<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Chroot on Ivon's Blog</title><link>https://ivonblog.com/ja-jp/tags/chroot/</link><description>Recent content in Chroot on Ivon's Blog</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><managingEditor>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</managingEditor><webMaster>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</webMaster><copyright>Ivon's Blog (ivonblog.com）の記事のシェアを歓迎します。記事を引用する際は元のURLを明記し、CC BY-NC-ND 4.0ライセンスに従ってください。商用利用の場合は、私宛にメールでご連絡ください。</copyright><lastBuildDate>Sat, 31 Aug 2024 23:00:00 +0800</lastBuildDate><atom:link href="https://ivonblog.com/ja-jp/tags/chroot/index.xml" rel="self" type="application/rss+xml"/><item><title>Termux prootでsystemctlコマンドが使えない場合の解決策</title><link>https://ivonblog.com/ja-jp/posts/termux-systemd-issues/</link><pubDate>Sat, 31 Aug 2024 23:00:00 +0800</pubDate><author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author><guid>https://ivonblog.com/ja-jp/posts/termux-systemd-issues/</guid><description>&lt;!-- Co-translated by ChatGPT --&gt;
&lt;p&gt;Systemdはinitプログラムの一種です。ほぼすべてのLinuxディストリビューションがSystemdを使ってシステムサービスを管理しており、よく使うコマンドには&lt;code&gt;systemctl&lt;/code&gt;や&lt;code&gt;journalctl&lt;/code&gt;などがあります。&lt;/p&gt;
&lt;p&gt;しかしTermuxではSystemdを使えません。Termuxのproot-distroやchrootコンテナ環境で&lt;code&gt;systemctl start&lt;/code&gt;関連のコマンドを実行すると、次のエラーが出ます：&lt;code&gt;System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;これはコンテナ環境がSystemdをサポートしていないためです。&lt;/p&gt;
&lt;p&gt;実のところ、これには根本的な解決策はありません。Termux開発チームがMicrosoft WSLのようにSystemdを動かす方法を用意しない限り無理です。ただし、この問題を回避する代替案はいくつかあります。&lt;/p&gt;

&lt;h2 class="relative group"&gt;方法1：実行ファイルのパスから直接プログラムを起動する
 &lt;div id="方法1実行ファイルのパスから直接プログラムを起動する" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%96%b9%e6%b3%951%e5%ae%9f%e8%a1%8c%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e3%83%91%e3%82%b9%e3%81%8b%e3%82%89%e7%9b%b4%e6%8e%a5%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%82%92%e8%b5%b7%e5%8b%95%e3%81%99%e3%82%8b" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;まず知っておくべきなのは、Systemdはシステムサービスを管理するinitプログラムにすぎないということです。Linuxの起動後にプログラムを起動し、ユーザーがプログラムを開始/停止できるようにする役割を担っています。ただし、単に特定のプログラムを起動するだけなら、実は&lt;code&gt;systemctl&lt;/code&gt;に依存する必要はありません。&lt;/p&gt;</description></item><item><title>x86環境のdebootstrapでARM版rootfsを作成し、Androidにchroot Debian環境をインストールする</title><link>https://ivonblog.com/ja-jp/posts/debootstrap-create-rootfs-for-android/</link><pubDate>Thu, 16 Nov 2023 23:00:00 +0800</pubDate><author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author><guid>https://ivonblog.com/ja-jp/posts/debootstrap-create-rootfs-for-android/</guid><description>&lt;!-- Co-translated by ChatGPT --&gt;
&lt;p&gt;&lt;a href="https://wiki.debian.org/Debootstrap" target="_blank" rel="noreferrer"&gt;Debian Wiki&lt;/a&gt;によると、debootstrapはwrapper scriptで、好みに合わせてDebianまたはUbuntuの最小rootfs（ルートファイルシステム）を生成できます。Linuxを一から自分で設定したい人に向いており、Arch Linuxの&lt;code&gt;pacstrap&lt;/code&gt;のような方式でLinuxシステムをインストールできます。&lt;/p&gt;
&lt;p&gt;ただし、ここでの私の目的はそれではありません。作成したrootfsをスマホへ移動し、chrootまたは&lt;a href="https://ivonblog.com/posts/termux-proot-distro/" target="_blank" rel="noreferrer"&gt;Termux proot&lt;/a&gt;で使い、スマホ上でDebian環境を動かすことです。&lt;/p&gt;
&lt;p&gt;私はLinux PCでDebian rootfsを作成します。PCはx86_64アーキテクチャなので、PC上でARM64アーキテクチャのchroot環境に入るにはQEMUエミュレータが必要です。&lt;/p&gt;
&lt;p&gt;PCを使いたくない場合は、少し回り道してください。まずスマホに&lt;a href="https://ivonblog.com/ja-jp/posts/termux-chroot-ubuntu/" target="_blank" rel="noreferrer"&gt;chroot Ubuntu&lt;/a&gt;をインストールし、その中に&lt;code&gt;debootstrap&lt;/code&gt;を入れてDebian rootfsを作成します。この方法ならQEMUによる変換は不要ですが、rootなしのTermux環境からは作成できません。&lt;/p&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;debootstrapパッケージをインストールします。これは大半のLinuxディストリビューションに収録されています。&lt;code&gt;arch-linstall-scripts&lt;/code&gt;を入れるのは、便利な&lt;code&gt;arch-chroot&lt;/code&gt;スクリプトがあるためです。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install debootstraparch-linstall-scripts&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;x86アーキテクチャのPCでARMアーキテクチャのrootfsを作るには、&lt;code&gt; qemu-user-static&lt;/code&gt;ツールを使ってARM64命令セットをエミュレートする必要があります。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install qemu-user-static&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;binfmtサービスが起動していることを確認します。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; --now systemd-binfmt.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Debian rootfsディレクトリを作成します。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/Downloads
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir debian&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="5"&gt;
&lt;li&gt;Debian 12 Bookwormのrootfs作成を開始し、台湾のDebianサーバーからパッケージをダウンロードします。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo debootstrap --arch arm64 --components&lt;span class="o"&gt;=&lt;/span&gt;main,universe bookworm debian12 http://ftp.tw.debian.org/debian/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="6"&gt;
&lt;li&gt;インストール後、まず&lt;code&gt;qemu-aarc64&lt;/code&gt;をrootfsへ入れます。これで命令が自動的に変換されます。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;which qemu-aarch64
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo cp /usr/bin/qemu-aarch64 debian/usr/bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="7"&gt;
&lt;li&gt;chrootに入って初期設定を行います。&lt;code&gt;arch-chroot&lt;/code&gt;を使う場合、&lt;code&gt;/proc&lt;/code&gt;などを手動でマウントする必要はなく、すべて自動で処理されます。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo arch-chroot debian&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ol start="8"&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;cat /etc/os-release&lt;/code&gt;でDebianシステムであることを確認します。
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://ivonblog.com/ja-jp/posts/debootstrap-create-rootfs-for-android/images/Screenshot_20231116_234211.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/cannotloadimage.avif'"
 width="559"
 height="265"&gt;&lt;/figure&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ivonblog.com/ja-jp/posts/debootstrap-create-rootfs-for-android/featured.webp"/></item><item><title>AndroidスマートフォンにLinuxディストリビューションを入れる：Termux proot-distro使用方法</title><link>https://ivonblog.com/ja-jp/posts/termux-proot-distro/</link><pubDate>Thu, 16 Nov 2023 15:00:00 +0800</pubDate><author>infoivonblog.nkfjt@aleeas.com (Ivon Huang)</author><guid>https://ivonblog.com/ja-jp/posts/termux-proot-distro/</guid><description>&lt;!-- Co-translated by ChatGPT --&gt;
&lt;p&gt;この記事では、proot-distroでLinuxディストリビューションをインストールする方法を説明する。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ivonblog.com/ja-jp/posts/how-to-use-termux/" target="_blank" rel="noreferrer"&gt;Termux&lt;/a&gt;はターミナルエミュレーターとして、Root権限なしで&lt;code&gt;proot-distro&lt;/code&gt;ツールを使い、スマートフォン上にLinuxディストリビューションをインストールできる。&lt;/p&gt;
&lt;p&gt;たとえばUbuntu、Arch Linux、Alpine Linux、Fedora、Debian、openSUSEなどをインストールできる。
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://ivonblog.com/ja-jp/posts/termux-proot-distro/images/5AoFyAZ.webp"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/cannotloadimage.avif'"
 width="1080"
 height="462"&gt;&lt;figcaption&gt;Sony Xperia 5 IIでDebian 11システムを実行&lt;/figcaption&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;proot-distroでインストールしたLinuxディストリビューションはテキストインターフェイスのみで、グラフィカルインターフェイスは自分で設定する必要がある。&lt;/p&gt;
&lt;p&gt;面倒だと感じる場合は、記事末尾に載せた自動化スクリプトを参照してほしい。&lt;/p&gt;

&lt;h2 class="relative group"&gt;1. proot &amp;amp; proot-distroとは
 &lt;div id="1-proot--proot-distroとは" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-proot--proot-distro%e3%81%a8%e3%81%af" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;PCのGNU/Linuxシステムでは、&lt;a href="https://zh.wikipedia.org/zh-tw/Chroot" target="_blank" rel="noreferrer"&gt;chrootコマンド&lt;/a&gt;を使って隔離されたLinux環境を作れる。これはcgroups以前からある、最初期のコンテナ概念だ。chrootコマンドで中へ切り替えると、まるで別のシステムに入ったように見える。たとえばUbuntuでdebootstrapを使ってDebian環境を作り、そのDebian環境を動かす、といった使い方だ。&lt;/p&gt;
&lt;p&gt;chrootは仮想マシンでもエミュレーターでもない。chrootコンテナ内部はホストとLinuxカーネルを共有し、多くのシステムリソースも共有するためだ。&lt;/p&gt;
&lt;p&gt;関連記事：&lt;a href="https://ivonblog.com/ja-jp/posts/termux-chroot-ubuntu/" target="_blank" rel="noreferrer"&gt;Termux chroot Ubuntu&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;しかしchrootには必ずroot権限が必要になる。AndroidのTermux端末には、その代替として&lt;code&gt;proot&lt;/code&gt;パッケージが収録されている。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/proot-me/PRoot/" target="_blank" rel="noreferrer"&gt;PRoot公式サイト&lt;/a&gt;の説明によると、prootはchrootのuserspace実装で、ptraceを使ってシステムコールをエミュレートし、bindやbinfmtなどの機能も含む。
&lt;figure&gt;
 &lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt=""
 src="https://ivonblog.com/ja-jp/posts/termux-proot-distro/images/proot.png"
 onerror="this.onerror=null;this.src='https://ivonblog.com/images/cannotloadimage.avif'"
 width="200"
 height="200"&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;ptraceを使う関係で、proot上のプログラム実行速度はchrootより必ず遅くなる。しかし、root権限なしでLinux環境を動かせるのが利点だ。&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://ivonblog.com/ja-jp/posts/termux-proot-distro/featured.png"/></item></channel></rss>