PSXITA on PC

2022-03-26 2022-03-30 note arch pc

Motivation

ある日、ネットサーフィンをしていたとき、PS4 内蔵HDDにlinuxをインストールして起動する方法(5.05~) - yyoosskのメモ というブログ記事をみつけた。

記事の内容はPSXITAというArch Linux派生のディストリビューション(と呼べるほど分厚いかどうかは疑問)をJailBreak後のPS4の内蔵HDDへインストールするというものだ。

そこにこんなコメントがあったのだ。

Unknown 2021年2月15日 18:21 PS4以外のPCにも入れてちゃんと動きますか?

yyoossk 2021年2月15日 19:48 意味不 記事の題はps4と書いてません? もしかして日本語わからないとか? それならこのブログは日本のブログなのでもうこないでください

上記ブログを書いているyyoossk氏は「意味不」と申されているが、私には痛いほどわかる。Unknown氏はPSXITAが普通のPCで動くかを純粋に知りたいのだろう。

yyoossk氏は何故かご立腹な様だが、PSXITAの話なのだから、それほどoff-topicではないだろう。

実現可能性

では実現可能性に関して考察していきたい。

PS4はx86_64、PCもx86_64、Linuxにとって大きく異なるのはブートシーケンスやデバイスの見え方位だ。

ブートシーケンスは普通にブートローダーをインストールすれば簡単に上がってくることが容易に想像がつく。

あとはデバイスの見え方が変わる点だが、PCへの移植ならLinuxの標準的なドライバーソフトウェアで不自由無いだろう。

では、実際に動かしてみたいと思う。

準備

実機にインストールしても良いが、生憎空いているストレージが無い為、普段遣いのWindows 11上に以下の構成のHyper-VのVMを用意した。

  • Generation 2 VM (EFI PC)
  • RAM 1024MB (default)
  • Storage 127GB (default)
  • CPU 1 core (default)

そこに光学ドライブを追加し、源流Arch Linuxのインストールメディア archlinux-2022.03.01-x86_64.iso をマウントする。

また、Arch Linuxのインストールメディアは2022-03-26現在、セキュアブートに対応していない為、 Settings -> Security -> Secure Boot から Secure Boot を無効化した。

Install Battle

全体の流れとしては、Arch LinuxのInstallation Guideを参考にパーティションを切り、その上にPSXITAのイメージを展開し、更新、BootLoaderをインストールするといった形だ。

ではやっていく。

Partitioning

Installation Guide#Example layouts を参考に gdisk にて以下のようなパーティションテーブルを作成する。

  • 512MB EFI (/boot)
  • 512MB Swap
  • そこから先 Linux x86-64 root (/)

Format

Installation Guide#Format the partitions を参考に進めていく。

mkfs.fat -F32 /dev/sda1
mkswap /dev/sda2
mkfs.ext4 /dev/sda3

Mount

こちらも Installation Guide#Mount the file systems を参考に行う。

swapon /dev/sda2
mount /dev/sda3 /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

Download / Extract

ベースのrootfsとなる psxitarch.tar.xz をダウンロードし、展開する。今回は、LAN内のWindows PCからダウンロードした。

cd /mnt
scp [email protected]:/cygdrive/c/Users/ray/Documents/psxitarch.tar.xz .
tar xf psxitarch.tar.xz

これは、 Installation Guide#Install essential packages の代替となる。

Configure the System

では、通常のセットアップに戻る。 Installation Guide#Configure the system に従い、セットアップを続けていく。

genfstab -U /mnt > /mnt/etc/fstab
arch-chroot /mnt

Update

展開したばかりの PSXITA は様々なパッケージが古い。 新しく入れるBootLoaderとのかみ合わせもあるので、全てのパッケージを更新していこうと思う。

pacman -Syu

ここで、以下のようなエラーメッセージを得た。

xorg-server and xf86-video-ati-git are in conflict (X-ABI-VIDEODRV_VERSION). Remove xf86-video-ati-git? [y/N]

幸いにもこのPCには不要であるため、削除を選択した。 しかし、多くのpackage conflictが残る。

AURパッケージが入っている様に見えるので、ここで一度AUR helperを先にインストールすることにしてみた。

Morganamilo/paru を参考に、以下を実行。

cd
pacman -S --needed base-devel

以下のようなエラーに見舞われた。

署名を検証するためのキーサーバーが変わっているようだ。 それ単体の更新を素直に試みても、それ自身を検証できず失敗した。

さてどうしたものか。

pacman/Package signing#Change keyserver を参考に、 /etc/pacman.d/gnupg/gpg.conf 内の keyserver hkp://pool.sks-keyservers.net とある行を keyserver hkp://keyserver.ubuntu.com へと書き換え再試行したところ、archlinux-keyringbase-devel 共に通常通りインストールが完了した。

さて気を取り直してparuのインストールを再開する。

git clone https://aur.archlinux.org/paru
cd paru
makepkg -si

さてここでglibcの依存関係が壊れていることに気づく。

様々を更新せずにglibcだけバージョンが上がったことに起因する問題に見える。

少々強引だが、外側からpacstrapで様々を更新してから再挑戦する。

pacstrap /mnt pacman gettext glibc lib32-glibc
arch-chroot /mnt
cd ~/paru
makepkg -si

makepkg は一般ユーザーで動かすべきであることにエラーメッセージから気付かされた。

…何故かsuが正しく動かない。

pacmanもいつの間にか壊れていた

他にも様々が壊れつつあるので、外側から base を再インストールしたが解決せず。

suの破損を治すべく、libtirpc / rpcbind を再インストールしようとした所、conflict。

libxcrypt が正常にインストールできない様なので、--overwrite *.gz で黙らせる。

しかし、pacsortも壊れているようなのでpacman-contribを更新。

今度は、libp11-kitが壊れているようなので同様に--overwrite \*にて対処。

ここまで来てやっと、rpcbindの再インストールに望めた。

しかしsuは使えない。

当てずっぽうでlinuxを更新してみるも、状況変わらず。

ここまで来て、pamが壊れている可能性に気づき当てずっぽうでpamを更新したところ、問題が解決した。

気を取り直して、su psxitaを行っていく。

再度paruのインストールに挑む。

su psxita
git clone https://aur.archlinux.org/paru
cd paru
makepkg -si

llvmが古すぎるのか、paruのビルドがコケた。

特権に戻り、 llvm-libs を更新しようと思ったが、llvm-libs-svnが既に入っており、mesa-gitがそれに依存しているとのこと。

AURパッケージが多い今、それをちまちま解決するのは激しくダルい。

Go言語製で依存パッケージが少ないと思われる Jguer/yay を使う方針に切り替えた。

コケた。libxcrypt-compatを導入し、解決。

やっとAUR helperのインストールに成功した。

さてAUR repositoryが見えるyayなら簡単に依存関係が解決するかと思ったが、そうではないようだ。

見た所3つの依存関係問題が発生している。

  1. jwm-git
  2. lib32-mesa-git
  3. openobex

まず、jwm-git

依存関係がエライことになっている∧再インストールが簡単だと推測されるとき、そのパッケージを一時的にアンインストールすると自体解決が早い。

jwm-gitはどうやらデスクトップウィンドウマネージャーの様だ。

単体での再インストールは容易であることが推測できるためとりあえず削除する。

pacman -R jwm-git

次に lib32-mesa-git と行きたいところだが、パッケージ名をみるからにダルそうなので、後回しにして openobex に取り掛かる。

openobexは何らかの依存が生えていて簡単には消せない。 なので単体で更新することによって依存ツリーが解決されることを期待して単体更新を試みる。

yay -S openobex # -> 失敗

html2textなるpythonライブラリが足りないと申された為、Archレポジトリから導入。

sudo pacman -S python-html2text
yay -S openobex # -> 失敗

何故か同様のエラーで止まってしまった。 ここでふとPythonはバージョン間の互換性が弱いことを思い出した。

python --version # => 3.7.x
sudo pacman -S python
python --version # => 3.10.x
yay -S openobex # -> 成功

私は元々Pythonのパッケージマネジメントがあまり好きではないが、更に少し嫌いになり、また同時に普通にArch Linuxを一から手積みしたほうが楽だという気持ちになってきた。

しかしそれでは Unknown氏 の疑問に答えられない為、Arch Linux Update Battleを続行する。

残る依存関係の問題は lib32-mesa-git だ。 ダルい問題がそれ単体になったことだけでもまず喜ばしいことだが…。

lib32-mesa-git の渋い点として、ps4レポジトリ (PSXITA独自のレポジトリ)から入っている点が挙げられる。

これは現行のArchの公式Repositoryと十分な互換性がない可能性があるということになる。

万事休すかと思いドライバをリサーチした所、なんと普通にGitHub (Ps3itaTeam/ps4linux-video-drivers )に更に新しいバージョンがあるではないか。

何故依存関係が更新されているバージョンが入らないのだろうかと疑問に思ってREADME.mdを確認すると、どうやらレポジトリが変わったらしい。

README.mdに従い、/etc/pacman.confを修正した。

さてここまでの手順を踏むとなんとpacman -Syuが通るではないか。

と思いきや、依存関係は解決されたものの、またconflictが…。

ilmbaseopenexrで置き換わったらしいので黙らせた。

sudo pacman -S --overwrite \* openexr

その後、pacman -Syuを再試行した所解決した。

原状復帰にjwm-gitを復活させれば更新は完了したことになる。

yay -S jwm-git

Setup Bootloader

次にPC向けのBootloaderをインストールする。(ここだけが本質)

今回はsystemd-bootを採用した。

大凡のインストール手順は systemd-boot#Installation の通りだ。

pacman -S efibootmgr
bootctl install

/boot/loader/entries/arch.conf に以下を記述する。 (当然PARTUUIDは各環境に合わせて変更する。)

mkinitcpio -P #念の為(どの様なパッケージがPSXITAに含まれるかちゃんとは追ってないので)

Reboot

ブートローダーもインストールしたので、あとは再起動するだけだ。

するとHyper-V上にもかかわらず、当たり前のようにPSXITAのデスクトップ環境が起動し出迎えてくれた。(当たり前だが)

CPU情報等からこれがPS4上ではなく実際に私のWindows PC上であることが分かるのではないだろうか。

実用に向けて

まず間違いなくユーザパスワードを変更するべきだ。 何故か標準でSSHサーバーも建っているため、これは必須と言っても過言ではない。(事実、psxitaの初期パスワードはchangeitだ。)

しかしそれだけでは不十分だ。このままではSSHのホストキーが他のPSXITAユーザーと共通になってしまう為、仮にSSHを使う場合、MITM攻撃がありうる。

以下の記事を参考にSSH Hostkeyを更新するべきだ。

Talk:OpenSSH#Regenerate_host_keys

SSH-Hostkeyが既知ならば(PSXITAのrootfsは配布されているので当然既知)、SSHは単なる平文と何ら変わらない。 具体的なPoCは以下のレポジトリを参照されたし。

https://github.com/jtesta/ssh-mitm

また、CPU脆弱性対策の為、CPUマイクロコードパッケージのintel-ucodeamd-ucode等もインストールし、systemd-bootに設定するべきである。

あとがき

Unknown氏の疑問は理解できるもので、また、当然実現可能なことだ。

yyoossk氏の早合点には疑問を抱かざるを得ない。現に私はPSXITAを一般的なUEFI PC上にインストールしてしまった。

yyoossk氏 Unknown氏ら、そして読者の方々には是非Arch LinuxをInstall Guideに沿ってインストールしてみてほしい。きっと多くの発見があるはずだ。

P.S.

Hyper-V上のMenuに「Turn off PS4」や「Return to ORBIS OS」とあるのはやや面白い。

2022-03-30 追記

記事を書いた際、Psxitarch Linux v2 を参考に環境を構築したが、 同様に地獄を見ている人間が他にも居た。

Guide to Install PSXITArch Linux on PS4, Enable Wi-Fi and More by Hippie68

元記事は2019-01-31に投稿されているが、この記事は2021-08-22と比較的新しい。

最初から見つけられていればどれほど良かったか…。

Relevant Topics

MacBook 2017にTripleBoot環境を整えた話

2019-12-31 note debian macbook pc windows

WindowsとLinuxとmacOS、それぞれの検証環境がほしくなった為取り組み Read More


Recent Posts

PSXITA on PC

2022-03-26 2022-03-30 note arch pc

PS4向けArch LinuxのPCへのインストール Read More

MDR-100A メンテナンス

2020-07-09 note audio device repair

ヘッドホンから異音がした為、いじった Read More

Realme X2 Proの導入

2020-07-09 note android device smartphone

安く速いスマートフォンを導入した Read More

独自ページからHugoへ乗り換え

2020-06-30 note hugo web

自前フレームワークからHugoへの乗り換え。その利点と欠点。 Read More

AutoImageCompresserの制作

2020-02-22 portfolio booth csharp oss vrchat windows

軽快なファイル同期 (スクリーンショット想定) の為の画像圧縮デーモン Read More