メインコンテンツへスキップ

パソコンでスマホLinuxシステムを試す:postmarketOS QEMU/KVM仮想マシンのインストール手順

·
カテゴリー スマートフォン 真のLinuxスマホ
タグ PostmarketOS QEMU-KVM
目次

本物のスマホ版LinuxであるpostmarketOSは、すでに多くの古いAndroidスマホへインストールできるようになっており、それらを再び役立たせることができます。postmarketOSはAlpine Linuxをベースに開発されたスマホ向けLinuxディストリビューションで、dockerを含むアプリケーションを実行できます。さらに、スマホ向けに設計されたLinux APPも少しずつ出てきています。

こちらを見て、postmarketOSのインストール方法を確認してください。

スマホにpostmarketOSを書き込めないなら、パソコン上の仮想マシンで試してみてはどうでしょうか。QEMU/KVM仮想マシンを通じて、スマホLinuxインターフェースの開発状況を体験できます。スマホLinux向けにアプリケーションをテストしたい場合にも、この仮想マシンは役に立ちます。

postmarketOS公式はGeneric x86_64 EFI Systemのシステムイメージを提供しており、他のデスクトップ版GNU/Linuxのように一般的なx86パソコンへインストールできます。ただし、postmarketOSはAlpine Linuxベースで開発されており、パッケージリポジトリもだいたい共通です。そのため、メインのデスクトップシステムとしてインストールするなら、素直にAlpine Linuxを入れればいいでしょう。

この記事の主な目的は、開発テスト環境をインストールし、postmarketOSがどんな見た目なのかを試すことです。注意点として、仮想マシンではグラフィックアクセラレーションを提供しにくいため、Waylandデスクトップ環境のレンダリングにbugが出る可能性があります。

以下では、postmarketOS仮想マシンをインストールする2つの方法を扱います。

1. pmbootstrap経由でQEMU仮想マシンをインストールする
#

pmbootstrapを通じてデスクトップ環境をカスタマイズします。この方法は開発者向けです。

pmbootstrapはpostmarketOSのインストールファイル生成と新機種移植に使うツールチェーンです。pmbootstrapはchroot環境を作成するため、パソコンはLinuxシステムである必要があります。仮想マシンでも構いませんが、WSLは不可です。

  1. ここではパソコンのホスト機をUbuntuとし、gitでpmbootstrapをインストールします:
git clone https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git

cd pmbootstrap

mkdir -p ~/.local/bin

ln -s "$PWD/pmbootstrap.py" ~/.local/bin/pmbootstrap

pmbootstrap --version
  1. 次のコマンドを入力して設定を開始します:
pmbootstrap init
  1. 続いて一連の質問に答えます。以下で順に説明します。
# 初期化
pmbootstrap init

# Enterを押してデフォルトの作業ディレクトリを使用 (~/.local/var/pmbootstrap)
Work path: Enter

# 更新チャンネルはedgeを選ぶか、Recommended for best stabilityと書かれている安定版を入力します。
Channel: edge

# メーカーを選択します。ここではQEMUと入力します
Vendor: qemu

# AMD64版を選択します。AARCH64のクロスアーキテクチャエミュレーションは非常に遅く、KVMアクセラレーションが効きません
Device codename: amd64

# pmOSのユーザーアカウントを作成します

Username: User

# デスクトップ環境を選択します。Waylandのみ対応のPhoshデスクトップは起動できない可能性があるため、Plasma MobileまたはGNOMEを選びます。
User Interface: plasma-mobile
# 残りはすべてEnter
  1. 続いてシステムのインストールを開始します:
pmbootstrap install
  1. 次に起動します。pmbootstrapのデフォルトRAMは小さすぎて非常にもたつくので、以下のコマンドで起動することをおすすめします。Host CPUを使用し、4GBメモリを割り当て、ディスク容量を32GBにし、スマホの縦画面を模擬し、音声を有効にします。pmbootstrap --helpを入力するとヘルプオプションを確認できます。
pmbootstrap qemu --cpu max --memory 4096 --image-size 32G --video 720x1080 --audio pa
  1. 起動後は、QEMUが開いた端末からシステムへログインするか、SSHでログインできます:
ssh user@虛擬機IP -p 2222
  1. 起動後、仮想マシンのウィンドウはデスクトップに入るはずです。ウィンドウを拡大縮小すると自動でサイズが変わります。QEMU仮想マシンはキーボードとマウス入力も自動で取得します。

この記事の例では、私が選んだインターフェースはPlasma Mobileです。ウィンドウの拡大縮小に合わせてUIも変わります。KDE Plasmaを受け継いでいますが、スマホ向けに最適化されたインターフェースになっています。

ソフトウェアストアDiscoverをインストールすると、ソフトウェアをダウンロードするフロントエンドとして使えます。APPのソースはpostmarketOSとAlpine Linuxのソフトウェアリポジトリです。

端末も欠かせません。インストール推奨はchromiumfont-noto-cjkdockerです。これでpostmarketOS上のdocker実行性能を評価できます。

一部のソフトウェアは使ってみると完全にパソコン版で、一部のソフトウェアはウィンドウサイズに応じて自動的にUIを変形させます。

この仮想マシンはシャットダウン後もファイルが残りますが、pmbootstrap initを実行するたびにシステムが旧版のファイルシステムを自動削除します。そのため、~/.local/var/pmbootstrap/chroot_native/home/pmos/rootfs/にあるQEMU imageのバックアップを忘れないでください。

2. Virt ManagerでpostmarketOS仮想マシンを手動インストールする
#

公式の事前ビルド済みpostmarketOSイメージファイルを使ってシステムを起動します。pmbootstrapは不要です。

この方法は少し面倒です。postmarketOS公式は.isoイメージファイルではなく.imgファイルを提供しているため、手動でddして書き込む必要があります。(注:os-installerイメージファイルはありますが、主に実機インストール向けです)

  1. LinuxにVirt Managerをインストールします。

  2. postmarketOS公式サイトGeneric x86_64 EFI Systemのイメージファイルをダウンロードします。例えば私はPhosh版を選びました。

  3. ダウンロード後、.xzファイルを展開すると.imgファイルが得られます。

  4. Virt Managerを開き、仮想マシンを1つ追加します。システムはAlpine Linuxを選択します。起動ファームウェアはUEFI、ビデオカードはVGAを選び、64GB以上のqcow2仮想ディスクを追加します。まだ起動しないでください。

  5. 起動する前に、まずqcow2をNBDデバイスとしてマウントします。

sudo modprobe nbd max_part=10

sudo qemu-nbd -c /dev/nbd0 /var/lib/libvirt/images/postmarketos.qcow2
  1. ddコマンドでpostmarketOSイメージファイルを書き込み、その後NDBデバイスを取り外します。
sudo dd if=postmarketos-phosh.img  of=/dev/nbd0 bs=4M status=progress conv=fsync

sudo qemu-nbd -d /dev/nbd0
  1. Virt Managerへ戻り、起動すればシステムを使えます。

参考資料
#

QEMU - PostmarketOS Wiki

関連記事


最後までお読みいただきありがとうございます。本サイトでは公開コメント欄を設けていません。私はソーシャルな反応やアクセス数を追い求めるためではなく、自分の考えを誠実に探求するために文章を書いています。記事を丁寧にお読みいただいたうえで、ご感想やご意見をお寄せいただければ幸いです。誤字・誤り・技術的な問題などを見つけた場合、またはフィードバックを共有したい場合は、Aboutページに記載しているメールアドレスまでお気軽にご連絡ください。