Ubuntu 24.04 に glmark2 をインストールするまで　前編

## そもそものきっかけは
* 昨日まで使ってたのは、どこかで拾ってきた Quadro/K4000 であります。なんで手に入れたか忘れた。
 ![Quadro-K4000.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91470/d0d1b3d1-a2af-d60e-c100-2250f450d72a.jpeg)

* 流石に古くて nVidia のドライバ供給も 470.256.02 で昨年夏頃に終了した次第。
* 世間は、RTX50xx発売で大盛り上がりですがそんなときでも揺らがず「モノハダイジ」的な（多分違う
* 私は、まーたどこかで拾ってきた代わり映えしない RTX1050Ti をぶっ刺しまして取り敢えずドライバだけでも新しくしようじゃんね？　ということに。
* Driver Version: 570.86.16 ってことで、 CUDA11.4 -> 12.8 には進みました（しょぼい
* まあ、ドライバの上げ方はこんな感じでした。
### nVidia driver upgrade on ubuntu24.04
* まずは nVidiaのサイトでドライバを取ってきます。　
* https://www.nvidia.com/ja-jp/drivers/unix/　だと 560までです。
 が、
* https://www.nvidia.com/en-us/drivers/unix/ では、 570のベータがあります。やったあ。
* 落としたファイルが ~strnh/ダウンロード なんてところにあるのは後で困るので取り敢えず /root に移動です。
*　そこから徐ろに NVIDIA-Linux-570.[0-9]+.[0-9]+.run を実行したいですが X11でドライバやらライブラリを掴んでいるから駄目といわれます。
*　rescue モード再起動で、root/CUI のログインを試みます。 こんな感じ　
　![Screenshot 2025-02-01 at 12-51-34 ubuntu rescue mode root - Google 検索.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91470/0201fc3f-295d-8727-5d39-ac929e532adc.png)

* 普通に考えて resque の CUI では、日本語が打てないんです。 故に /root　に入れとかないとアクセスに困ります・・・Gnomeの日本語化やりすぎ問題。、Download、Desktop で良いじゃないのと思うところ。
* NVIDIA-Linux-570.*.run は shell スクリプトなので sh ./NVIDIA-Linux-570... と打てば取り敢えずmodをどうにかしようとは試みてくれます。
* 実は 手元の ubuntu マシン、カーネルを 6.8から進めても良いんですが、6.8.12 にしています
* そうなると ubuntu24.04 を前提に供給される modバージョンは 6.8.0 だったりしてコンパイルが必要。
* https://qiita.com/search?q=nvidia+driver+ubuntu とかで、やり方調べの
* sudo dkms install -m nvidia -v <driver_version>
* >> NVIDIA Driver って突然使えなくなりますよね。
https://qiita.com/COJICOJI/items/eff2d75cfad286416840
    まぁ、FreeBSDでも "DKMS"ドライバ周りは linux から来るし、ハードウェア＝プロプライエタリ地獄が口を開けているわけすが・・・。 470レガシドライバを何とか入れて(= nouveau で放置してた）から進みました。

## 1050Ti の性能をみたい → ベンチないんか？　glmark2 ？
* glmark2 を探しますが apt から落ちてきません？なぜ？
* https://answers.launchpad.net/ubuntu/noble/+package/glmark2-es2-x11
* deb ファイル 2023年。古い。ちょっと入れたくないです・・・
* snap で インストールを試みます
https://snapcraft.io/graphics-test-tools
"glmark2" らしいスクリーンショットが写っているんですが・・・
```
$ ls /usr/bin/gl*
/usr/bin/glib-compile-resources  /usr/bin/glib-mkenums	    /usr/bin/glxdemo			/usr/bin/glxheads
/usr/bin/glib-compile-schemas	 /usr/bin/glslang	    /usr/bin/glxdemo.x86_64-linux-gnu	/usr/bin/glxheads.x86_64-linux-gnu
/usr/bin/glib-genmarshal	 /usr/bin/glslangValidator  /usr/bin/glxgears			/usr/bin/glxinfo
/usr/bin/glib-gettextize	 /usr/bin/glslc		    /usr/bin/glxgears.x86_64-linux-gnu	/usr/bin/glxinfo.x86_64-linux-gnu
```
glxdemo じゃないんですよ。今ほしいの。

* てなわけで、「落ちてこなきゃ コンパイルすればいいじゃない」というのが記事の本題で（前置きが長い）

# コンパイルしよう
* githubで拾ってきます。
* "INSTALL" では、ビルドに meson/ninja が要るっていうんですね。 入ってなきゃ入れるまで。
from:  https://launchpad.net/ubuntu/noble/+source/ninja 　

>> ninja information
>> No published releases of this package have been uploaded in Ubuntu Noble

from: https://www.ubuntuupdates.org/package/core/noble/universe/base/ninja-build

Other versions of "ninja-build" in Noble
No other version of this package is available in the Noble release.

「ニンジャは実在しない。 いいね?」
「アッハイ」

 FreeBSDでは portsでコンパイルをすれば嫌でも入ってくる ninja さんですが、ubuntu のように 逸煩人向けになっていますとニンジャガエシでもついているのか普通に入っていません。まあ普通だよね。普通の人コアを全部専有するようなちきゅうかんきょうにあくえいきょうはなはだしい並列コンパイルなんてやらんものね。

* Yes.  Ninja is real. 
```
$ git clone https://github.com/ninja-build/ninja.git
Cloning into 'ninja'...
remote: Enumerating objects: 13420, done.
remote: Counting objects: 100% (342/342), done.
remote: Compressing objects: 100% (208/208), done.
remote: Total 13420 (delta 234), reused 144 (delta 134), pack-reused 13078 (from 4)
Receiving objects: 100% (13420/13420), 5.14 MiB | 14.61 MiB/s, done.
Resolving deltas: 100% (9388/9388), done.
```
* configure .. 

```
$ python configure.py 
warning: A compatible version of re2c (>= 0.15.3) was not found; changes to src/*.in.cc will not affect your build.
wrote build.ninja.
```
ぬぅう、re2c がないだと？
```
$ sudo apt install re2c
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
E: パッケージ re2c が見つかりません
```
* どうも ubuntu-pro を入れてから、安定版のもの以外一切受け付けないrepo編成になっているようです！ なんてこった、カノニカルのニンジャガエシがここにあったのか。 ubuntuあしらいがマジ苦手な私。re2cも野良ビルドか。

* オレは、debian ＊＊＊！
http://launchpadlibrarian.net/765976929/re2c_4.0.2-1_amd64.deb

debianに鞍替えしようかと思うのですが、無精者にdebian管理はできそうにないので、deb バイナリだけ拝借してごまかします。 re2c 入りました。

* README.md にしたがって
``` 
./configure.py --bootstrap 

```

```
$ cmake -Bbuild-cmake

-- The CXX compiler identification is GNU 13.3.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- IPO / LTO enabled
-- Performing Test flag_no_deprecated
-- Performing Test flag_no_deprecated - Success
-- Looking for ppoll
-- Looking for ppoll - found
-- Looking for fork
-- Looking for fork - found
-- Looking for pipe
-- Looking for pipe - found
-- Could NOT find GTest (missing: GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY) 
-- The C compiler identification is GNU 13.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Found Python: /usr/bin/python3 (found version "3.12.3") found components: Interpreter 
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE  
-- Configuring done (2.0s)
-- Generating done (0.0s)
-- Build files have been written to: /home/strnh/workdir/ninja/build-cmake

$ cmake --build build-cmake                                                                                       [13:49:21]

[  1%] Generating lexer.cc
[  2%] Generating depfile_parser.cc
[  3%] Building CXX object CMakeFiles/libninja-re2c.dir/depfile_parser.cc.o
[  5%] Building CXX object CMakeFiles/libninja-re2c.dir/lexer.cc.o
[  5%] Built target libninja-re2c
[  6%] Building CXX object CMakeFiles/libninja.dir/src/build_log.cc.o
[  7%] Building CXX object CMakeFiles/libninja.dir/src/build.cc.o
[  8%] Building CXX object CMakeFiles/libninja.dir/src/clean.cc.o
[ 10%] Building CXX object CMakeFiles/libninja.dir/src/clparser.cc.o
[ 11%] Building CXX object CMakeFiles/libninja.dir/src/dyndep.cc.o
[ 12%] Building CXX object CMakeFiles/libninja.dir/src/dyndep_parser.cc.o
[ 13%] Building CXX object CMakeFiles/libninja.dir/src/debug_flags.cc.o
[ 15%] Building CXX object CMakeFiles/libninja.dir/src/deps_log.cc.o
[ 16%] Building CXX object CMakeFiles/libninja.dir/src/disk_interface.cc.o
[ 17%] Building CXX object CMakeFiles/libninja.dir/src/edit_distance.cc.o
[ 18%] Building CXX object CMakeFiles/libninja.dir/src/elide_middle.cc.o
[ 20%] Building CXX object CMakeFiles/libninja.dir/src/eval_env.cc.o
[ 21%] Building CXX object CMakeFiles/libninja.dir/src/graph.cc.o
[ 22%] Building CXX object CMakeFiles/libninja.dir/src/graphviz.cc.o
[ 23%] Building CXX object CMakeFiles/libninja.dir/src/json.cc.o
[ 25%] Building CXX object CMakeFiles/libninja.dir/src/line_printer.cc.o
[ 26%] Building CXX object CMakeFiles/libninja.dir/src/manifest_parser.cc.o
[ 27%] Building CXX object CMakeFiles/libninja.dir/src/metrics.cc.o
[ 28%] Building CXX object CMakeFiles/libninja.dir/src/missing_deps.cc.o
[ 30%] Building CXX object CMakeFiles/libninja.dir/src/parser.cc.o
[ 31%] Building CXX object CMakeFiles/libninja.dir/src/real_command_runner.cc.o
[ 32%] Building CXX object CMakeFiles/libninja.dir/src/state.cc.o
[ 33%] Building CXX object CMakeFiles/libninja.dir/src/status_printer.cc.o
[ 35%] Building CXX object CMakeFiles/libninja.dir/src/string_piece_util.cc.o
[ 36%] Building CXX object CMakeFiles/libninja.dir/src/util.cc.o
[ 37%] Building CXX object CMakeFiles/libninja.dir/src/version.cc.o
[ 38%] Building CXX object CMakeFiles/libninja.dir/src/subprocess-posix.cc.o
[ 38%] Built target libninja
[ 40%] Generating build/browse_py.h
[ 41%] Building CXX object CMakeFiles/ninja.dir/src/ninja.cc.o
[ 42%] Building CXX object CMakeFiles/ninja.dir/src/browse.cc.o
[ 43%] Linking CXX executable ninja
[ 43%] Built target ninja
[ 45%] Building CXX object _deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
[ 46%] Linking CXX static library ../../../lib/libgtest.a
[ 46%] Built target gtest
[ 47%] Building CXX object CMakeFiles/ninja_test.dir/src/build_log_test.cc.o
[ 48%] Building CXX object CMakeFiles/ninja_test.dir/src/build_test.cc.o
[ 50%] Building CXX object CMakeFiles/ninja_test.dir/src/clean_test.cc.o
[ 51%] Building CXX object CMakeFiles/ninja_test.dir/src/clparser_test.cc.o
[ 52%] Building CXX object CMakeFiles/ninja_test.dir/src/depfile_parser_test.cc.o
[ 53%] Building CXX object CMakeFiles/ninja_test.dir/src/deps_log_test.cc.o
[ 55%] Building CXX object CMakeFiles/ninja_test.dir/src/disk_interface_test.cc.o
[ 56%] Building CXX object CMakeFiles/ninja_test.dir/src/dyndep_parser_test.cc.o
[ 57%] Building CXX object CMakeFiles/ninja_test.dir/src/edit_distance_test.cc.o
[ 58%] Building CXX object CMakeFiles/ninja_test.dir/src/elide_middle_test.cc.o
[ 60%] Building CXX object CMakeFiles/ninja_test.dir/src/explanations_test.cc.o
[ 61%] Building CXX object CMakeFiles/ninja_test.dir/src/graph_test.cc.o
[ 62%] Building CXX object CMakeFiles/ninja_test.dir/src/json_test.cc.o
[ 63%] Building CXX object CMakeFiles/ninja_test.dir/src/lexer_test.cc.o
[ 65%] Building CXX object CMakeFiles/ninja_test.dir/src/manifest_parser_test.cc.o
[ 66%] Building CXX object CMakeFiles/ninja_test.dir/src/missing_deps_test.cc.o
[ 67%] Building CXX object CMakeFiles/ninja_test.dir/src/ninja_test.cc.o
[ 68%] Building CXX object CMakeFiles/ninja_test.dir/src/state_test.cc.o
[ 70%] Building CXX object CMakeFiles/ninja_test.dir/src/string_piece_util_test.cc.o
[ 71%] Building CXX object CMakeFiles/ninja_test.dir/src/subprocess_test.cc.o
[ 72%] Building CXX object CMakeFiles/ninja_test.dir/src/test.cc.o
[ 73%] Building CXX object CMakeFiles/ninja_test.dir/src/util_test.cc.o
[ 75%] Linking CXX executable ninja_test
[ 75%] Built target ninja_test
[ 76%] Building CXX object CMakeFiles/build_log_perftest.dir/src/build_log_perftest.cc.o
[ 77%] Linking CXX executable build_log_perftest
[ 77%] Built target build_log_perftest
[ 78%] Building CXX object CMakeFiles/canon_perftest.dir/src/canon_perftest.cc.o
[ 80%] Linking CXX executable canon_perftest
[ 80%] Built target canon_perftest
[ 81%] Building CXX object CMakeFiles/clparser_perftest.dir/src/clparser_perftest.cc.o
[ 82%] Linking CXX executable clparser_perftest
[ 82%] Built target clparser_perftest
[ 83%] Building CXX object CMakeFiles/depfile_parser_perftest.dir/src/depfile_parser_perftest.cc.o
[ 85%] Linking CXX executable depfile_parser_perftest
[ 85%] Built target depfile_parser_perftest
[ 86%] Building CXX object CMakeFiles/elide_middle_perftest.dir/src/elide_middle_perftest.cc.o
[ 87%] Linking CXX executable elide_middle_perftest
[ 87%] Built target elide_middle_perftest
[ 88%] Building CXX object CMakeFiles/hash_collision_bench.dir/src/hash_collision_bench.cc.o
[ 90%] Linking CXX executable hash_collision_bench
[ 90%] Built target hash_collision_bench
[ 91%] Building CXX object CMakeFiles/manifest_parser_perftest.dir/src/manifest_parser_perftest.cc.o
[ 92%] Linking CXX executable manifest_parser_perftest
[ 92%] Built target manifest_parser_perftest
[ 93%] Building CXX object _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o
[ 95%] Linking CXX static library ../../../lib/libgmock.a
[ 95%] Built target gmock
[ 96%] Building CXX object _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o
[ 97%] Linking CXX static library ../../../lib/libgmock_main.a
[ 97%] Built target gmock_main
[ 98%] Building CXX object _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o
[100%] Linking CXX static library ../../../lib/libgtest_main.a
[100%] Built target gtest_main


```
と、取り敢えず ninja 完成。

* meson を入れる・・・

```
$ sudo apt install meson
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
パッケージ meson は使用できませんが、別のパッケージから参照されます。
これは、パッケージが欠落しているか、廃止されたか、または別のソース
からのみ利用可能であることを意味します。

E: パッケージ 'meson' にはインストール候補がありません
```
repository を切り替えろという声が聞こえますが、何してもカノニカルからの保証がなくなるなら ソースから入れておけばいいじゃん主義者ですので、そっちにしておきます。

git から持ってきたら、

```console
python3 -m pip install meson
```
と書いてあります。。ぐぬぬこれは。

```
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

```
pipx 使えば逃げれますよともあるので、pipx さんに頼ります。

```
$ python3 -m pipx install meson   
 installed package meson 1.7.0, installed using Python 3.12.3
  These apps are now globally available
    - meson
  These manual pages are now globally available
    - man1/meson.1
done! ✨ 🌟 ✨

```
* ninja も pipx で入れちゃえばよかったのでは :-}
```
pipx install ninja
⚠️  Note: ninja was already on your PATH at /usr/bin/ninja
  installed package ninja 1.11.1.3, installed using Python 3.12.3
  These apps are now globally available
    - ninja
done! ✨ 🌟 ✨

```

* libdrm  がありません！

よーやっと、glmark2 のコンパイルです。ここまで2時間掛かっています。
```
strnh@ryzen5700-pc:~/workdir/glmark2$   meson setup build -Dflavors=dispmanx-glesv2,drm-gl,drm-glesv2,wayland-gl,wayland-glesv2,x11-gl,x11-glesv2
The Meson build system
Version: 1.7.0
Source dir: /home/hiko/workdir/glmark2
Build dir: /home/hiko/workdir/glmark2/build
Build type: native build
Project name: glmark2
Project version: 2023.01
C compiler for the host machine: cc (gcc 13.3.0 "cc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0")
C linker for the host machine: cc ld.bfd 2.42
C++ compiler for the host machine: c++ (gcc 13.3.0 "c++ (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0")
C++ linker for the host machine: c++ ld.bfd 2.42
Host machine cpu family: x86_64
Host machine cpu: x86_64
Found pkg-config: YES (/usr/bin/pkg-config) 1.8.1
Run-time dependency x11 found: YES 1.8.7
Found CMake: /usr/bin/cmake (3.28.3)
Run-time dependency libdrm found: NO (tried pkgconfig and cmake)

meson.build:53:17: ERROR: Dependency "libdrm" not found, tried pkgconfig and cmake

A full log can be found at /home/hiko/workdir/glmark2/build/meson-logs/meson-log.txt

```

道半ばですね。ほんじつここまでです。後編に続けます。