Rust ArchでPistonを動かそう

序文

Rustで書かれたゲームエンジンPistonを見つけた。

早速git cloneしてあれこれ書いて、cargo runで走らせる。
どっきどっきわっくわっくしながら待っている。

そして次の結果が出た。

f:id:mukichem24:20171227040130p:plain

は?

ということで、本記事ではManjaro Linux(Arch Linux)でPistonにご挨拶する方法を書き記す。
タイトル詐欺だと?ManjaroもArchも似たようなもんじゃ((暴言

解決法を探す

ということで吐かれたエラーをコピペしてググってみる。

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "Couldn\'t find any pixel format that matches the criterias."', /checkout/src/libcore/result.rs:906:4
note: Run with `RUST_BACKTRACE=1` for a backtrace.

やはり同じような悩みを抱える人間は存在するものである。
このページにたどり着く。

圧倒的英語文献と天才的な英語力を持つ私との激しい戦闘の末、以下の文章を見つけた。

Now that Ubuntu 17.10 artful has been released with Mesa version 17.2.2 this issue will affect more people. Including me!

The bug is indeed a regression of Mesa from the 17.1 branch to the 17.2 branch.

...よくわからないが((おい どうもmesaのヴァージョンが17.2だと動かないとか何とか。

ということでmesaのヴァージョンを下げてみよう!!
ちなみに2017年12月27日現在で最新版は17.3.0-2である。
え?問題は17.3ではなく17.2と?同じエラー吐かれたのだから同じだろ。

解決法 downgraderを使う

さっきのページを読み進めると解決法は示してあるが、Archにやさしい手段ではない。

mesapacmanのパッケージにあるのだから、「pacman 古いバージョン」でググったら何か出るのではないだろうか。

とググったらあった。パッケージのダウングレード

色々方法はあるが、私はdowngraderを使った。

AURのインストールがわからなかったら後述の追記を見てね。

インストールが済んだらターミナル上でdowngrader mesaと入力する。
すると以下の文が出る。

 Downgrade package: mesa  
1: mesa-9.2.5-1  (from ALA)
2: mesa-9.2.4-1  (from ALA)
3: mesa-9.2.3-2  (from ALA)
4: mesa-9.2.3-1  (from ALA)
5: mesa-9.2.2-1  (from ALA)
6: mesa-9.2.1-1  (from ALA)
7: mesa-9.2.0-2  (from ALA)
8: mesa-9.2.0-1  (from ALA)
9: mesa-17.3.1-2  (from ALA)
10: mesa-17.3.1-1  (from ALA)
11: mesa-17.3.0-2  (from ALA)
12: mesa-17.3.0-1  (from ALA)
13: mesa-17.2.6-1  (from ALA)
14: mesa-17.2.5-1  (from ALA)
15: mesa-17.2.4-1  (from ALA)
16: mesa-17.2.3-2  (from ALA)
17: mesa-17.2.3-1  (from ALA)
18: mesa-17.2.2-1  (from ALA)
19: mesa-17.2.1-3  (from ALA)
20: mesa-17.2.1-1  (from ALA)
21: mesa-17.2.0-3  (from ALA)
22: mesa-17.2.0-2  (from ALA)
23: mesa-17.1.8-2  (from ALA)
24: mesa-17.1.8-1  (from ALA)
25: mesa-17.1.7-2  (from ALA)
26: mesa-17.1.7-1  (from ALA)
27: mesa-17.1.6-1  (from ALA)
28: mesa-17.1.5-1  (from ALA)
29: mesa-17.1.4-1  (from ALA)
30: mesa-17.1.3-1  (from ALA)
>> Please enter package number, [q] to quit

ここで17.1にしたいのだから23を入力してみよう。
するとえっちらおっちらダウングレードしてくれる。

※最新版に依存しているパッケージがあると最悪動かなかったりする(多分)のでダウングレードする際は注意してね。まあ動かなくなるのはそのパッケージだけだからそんな気にしなくていい。

ここで再びPistonのディレクトリでcargo runを入力する。

f:id:mukichem24:20171227040204p:plain

やったぜ!!

古いバージョンを維持する

ここでpacman -Suyでパッケージを更新すると、mesaもアップグレードしてしまう。
苦労してダウングレードしたのに再びアップグレードされては困る。

特定のパッケージをアップグレードして欲しく無いときは、/etc/pacman.confファイルの#IgnorePkg =IgnorePkg = mesaと書き換えればいい。
#はちゃんと消してね。

なお編集する際は管理者権限でエディタを開く必要がある。例えば、nanoを使う場合はsudo nano /etc/pacman.conf, vimを使う場合はsudo vim /etc/pacman.confと入力すれば良い。

これでpacman -Suyでパッケージを更新しても、mesaのバージョンは更新されない。
やったぜ!!
参考文献(2017/12/27)

結論

  • Pistonを使うにはmesaのヴァージョンを17.1にする必要がある
  • pacmanのパッケージのヴァージョンを下げるには幾つか方法があるが、私はdowngraderを使った
  • pacman -Suyによるパッケージの更新でパッケージをアップグレードさせないためには、/etc/pacman.confIgnorePkg = *パッケージ名*を記述すれば良い

追記

疲れたから後で書く