karubabuの日記

タイトルに解決と書いているものがあるけれど、別に付いていない物は解決していないというわけではないです。つまるところ記事を書いた後に解決してちょっと嬉しかったので付けました。

gcc10を使ってビルドするときに確認しないといけないやつ

そのままビルドし始めると結構なソフトウエアがビルドに失敗するやつ
Porting to GCC 10 - GNU Project - Free Software Foundation (FSF)

Gcc 10 porting notes/fno common - Gentoo Wiki
gentooは、リンク先に書かれている通りにビルドする時に環境変数を追加するのも良いけれど、
/etc-portage/env/${CATEGORY}/${P} なファイルにCFLAGS="${CFLAGS} -fcommon"と書いておけば勝手にgcc9の様な感じでビルドが通る

Porting to GCC 10. · karubabu/netplan@677a01a · GitHub
大分前にnetplanのgcc10対応のコードを書いたのだけれど、PRを送らずにそのまま別の人が対応のPRを送ったので供養しておくね
ランチパッドみたいな名前の場所にissueをクローズしにいくのが大儀だった

btrfsの圧縮アルゴリズムを変更する時に必要っぽいこと

つまるところ、全体の圧縮アルゴリズムを変更する時は、マウントオプションでアルゴリズムを設定してからbtrfs filesystem defragment -r -t5G .をやるのが良さそう

背景

LUKS の☝️にbtrfs を乗せて暗号化しつつ適当に圧縮かけて捗らせたいね、というのが趣旨
基本的に保存すること自体が目的のオキニの動画や画像やその他のファイルを、HDDに保存したいので、
書き込み速度やなんやらを全て無視して、読み込み速度がそれなりで圧縮効率が良さそうなbtrfsのzstdの15レベルを使って圧縮したい…

けれど、この作業を始めた当初はzstdというものを知らなかったので、とりあえずcompress=lzoを付けてHDDをマウントしてファイルをコピーし始めてしまった
勿論データを全て消してからcompress=zstd:15を付けてマウントしてやり直せば間違いはないのだけれど、
後から圧縮アルゴリズムをzstd:15に変更するにはどうすればええねんということを調べたり、そもそもその作業が成功しているかどうかを確認する方法はどうすれば良いのか調べた

謎ら

95割はCompression - btrfs Wikiここを読めばよいのだけれど、それでも何だか謎みあることが幾つかある。

  • btrfs filesystem defragment-cオプションはzstd:15の様なレベル指定を受け付けてくれない
  • btrfs filesystem defragment-cオプションはzlibらしいのだけれど(man btrfs-filesystemに書いてある)、This is independent of the mount options compress or compress-force, and using the option -c you can set the compression algorithm.の意味が分からない
  • 圧縮された後のファイルから、どの圧縮アルゴリズムが使われているのか判断出来無い
  • 計測の方法が分からない

わからんことだらけやんけ

やったこと

しっかり計測したことなんてないし、ここを詰めると絶対に面倒なやつなので計測は適当にやる
基本的に、dfコマンドを使ってどれだけ空き容量が空くかで上手くいっているのかどうかを判断した
dfbtrfs filesystem dfだと出力されるサイズが違うという話はあるのだけれど、まあ誤差でしょう

https://mstdn.maud.io/@babukaru/104629699414995825
これらが試行錯誤した結果なのだけれど、調べ方が行き当りばったりだし、後から見ると色々情報が抜けていて何を言っているのか分からんねえ
空き容量って何に対してやねん
でも面倒だし、このツイーヨした部分は重要ではないと勝手に私は思っているので、何か読み取りたい人はこのツイーヨからエスパーしてね

これらを試した後、rm -rf /mnt/encrypt_data/*;sync;umonut /mnt/encrypt_dataして(/mnt/encrypt_data は圧縮したいHDD)、
当初の目的だったzstd:15での圧縮をマウント時から指定して(compress-force=zstd:15)ファイルをコピーし直した結果、
btrfs filesystem df /mnt/encrypt_dataのサイズは、"マウントオプションでcompress-force=zstd:15を設定してbtrfs filesystem defragment -r -t5G /mnt/encrypt_dataしたもの"とほぼ等しくなった
このことから、少なくとも箇条書きした疑問点の2番目は、-cオプションを付けなければzlibになるというわけではなさそうだとは思う
よくよく考えてみれば当たり前ではあるのだけれど、自信はないみたいな感じだった

おわりに

分かったような分かっていないような
そもそも計測の仕方がガバガバなのでもう全てがガバガバで何の腹の足しにもなっていない感じがすごい
最終的にはzstd:15で圧縮されたことは間違いないだろうしまあ良いでしょう
最後の大事な話です
https://mstdn.plusminus.io/@mohemohe/104634297256629871
https://mastodon.cardina1.red/@lo48576/104634286070925741
https://mastodon.cardina1.red/@lo48576/104634289896653923
百里ある

proton経由でゲームを起動するとやたら捗る

wineでunity製のゲームを起動すると、wineのウインドウが非アクティブになった時点でwineが操作不能になったりするのが修正されていたりするよ
他にもunity製のゲームはwineで起動するとキーボード操作が聞かないものがあったりするけれど、そこも修正されているよ
単純にwineに手を加えたという感じでかゆいところに手が届くのでえらい

何も考えなくともsteam外ゲームをsteamに登録するとこれが使われるはずなので、私の言うことは今更感はあるかもしれないけれども
以下は私が困ったところ

まず起動しない

STEAM_COMPAT_DATA_PATH環境変数が定義されていない
$HOME/.wine的な感じで、~/.proton/起動したいあぷりねーむとかディレクトリを作って、起動時に
STEAM_COMPAT_DATA_PATH=~/.proton/game_name python3 /home/user/.local/share/Steam/steamapps/common/Proton\ 4.11/proton waitforexitandrun /home/user/Games/game_name.exe
とか指定してあげるとよい

pfx.lockが見つからない

protonをsteamからダウンロードして、直接cliから起動しようとして、 FileNotFoundError: [Errno 2] No such file or directory: '/home/user/path/to/STEAM_CAMPAT_DATA_PATH/pfx.lock'
とか言われた時は大体STEAM_COMPAT_DATA_PATHへのディレクトリが作成されていない
自動でディレクトリを作ってくれたりはしないので、よしなに作ってね

go製のプロジェクトのebulidを書く

emakeやれば終わるものとは別ゲーすぎません???
次も大変な思いをしない様に困ったところは書いておくね
今回ebulidを書いたやつ
GitHub - m13253/dns-over-https: High performance DNS over HTTPS client & server
今回のebuild
gentoo-overlay/dns-over-https-2.2.1.ebuild at master · karubabu/gentoo-overlay · GitHub

モジュールはEGO_VENDORに列挙する必要がある

今になって考えてみると当たり前なのだけれども、モジュールをgo.modにある通りに適当にgo getしてくると、
portage側でその真正性が確認出来無い問題が出るので、ebuild内ではgo get自体が出来無くなっている
そのため、必要なモジュールをSRC_URIと同じ様にハッシュか何かをmanifestに保存しつつ同タイミングでダウンロードすることになる
というわけで以下の部分がそれ
gentoo-overlay/dns-over-https-2.2.1.ebuild at master · karubabu/gentoo-overlay · GitHub
EGO_PNはビルドするプロジェクトの名前、EGO_VENDORはモジュールの名前とハッシュかバージョンそしてgolang-vcs-snapshotを継承する
golang-vcs-snapshotを継承するタイミングはEGO_VENDORを列挙した後でないと、この変数は読み取り専用ですよ!と文句が出るので気を付けよう(1敗)
詳しくはgolang-vcs-snapshotのソースコードにある解説を読むと全部わかるのでえらい
golang-vcs-snapshot.eclass\eclass - repo/gentoo.git - Official Gentoo ebuild repository

ビルド時に-mod=vendor引数を入れる

☝️に付随する事柄だけれど、☝️の方法で入ったモジュールはGOPATH以下ではなくプロジェクトのrootディレクトリ/vendorに置かれるので、それを認識させる必要がある
以下の部分がそれ
gentoo-overlay/dns-over-https-2.2.1.ebuild at master · karubabu/gentoo-overlay · GitHub

あとは手慣りでsrc_installすれば良いと思う

おわりに

やたら大変だったのでゆるしていないよ
そもそもgoでプログラムを書いたことが無いので何が何処にあるのかさっぱり分からなくてはちゃめちゃに辛かった
まあ別に他の言語のプロジェクトも全然わからんしmakeを叩けばよしなにやってくれるやつ以外は全部辛いのだけれども
あとgoはgo help moduleとかやるとlessもなしに英語ドバー!!!してくるのが精神を抉ってくるのでやめなさーい!!
二つ目の問題もgo help moduleをしっかり読めば一瞬で分かることなのだけれど、しっかり読みたくなくてこれに気が付くまで時間がかかりました…

後はgo系のebuild classがやたら一杯あるのが謎だったね
結局golang-vcs-snapshotのみを使ったけれど、これでよかったのか、もっと相性の良いものがあったのか、全然わからん!

変更し難いebuildに自家製patchを加える方法

こんなん学校で教えて貰わなかったんですけど!
この機能を知っている人はどうやってこれを知ったものなの

ことの発端

sys-kernel/gentoo-sources-5.5.0をインストールする
そのmoduleとして、x11-drivers/nvidia-drivers-440.44-r1をビルドしようとする
この時この様なエラーが出る、具体的にはこれ
706774 – x11-drivers/nvidia-drivers-440.44-r1 with kernel 5.5 - .../work/kernel/nvidia-drm/nvidia-drm-fb.h:30:10: fatal error: drm/drmP.h: No such file or directory

解決とタイトル回収

このbugzillaのコメントに、これに対応するパッチとその適用方法が書いてある、具体的にはこれ
/etc/portage/patches - Gentoo Wiki
自分が管理していないebuildが触っているsource codeに対してパッチを煩雑な方法無しで適用出来る様になる
適当にダイレクトリを作ってパッチを置いてemergeするだけ!簡単 みんな作ってる 作ってないのはお前だけ

おわりに

この機能を知ってめちゃ嬉しかったので書いたよ
こういうのめっちゃ欲しかったけれど、やり方が分からなくて放置するみたいなことをやりまくってきたのでめちゃ有り難いね
この機能が知れたのも嬉しいのだけれど、そもそもこの様な機能が存在すること自体を知る方法が知りたいんだよなあ(◞‸◟)

やる夫スレがラノベ化!今すぐ読もう!

この記事はdon.8mitsu.net Advent Calendar 2019 - Adventar 1日目の記事です

皆さんはやる夫スレを見ていますか?
私は最近とんと見ていません
私が見て居ない間にはちゃめちゃ良いニュースがあったことを知ったのでここでおすすめさせてね

やる夫はカードを引くようですのラノベ

アキトはカードを引くようです
ざっくり言うと、女神とかいう謎のやつらに征服された人間達は戦争と娯楽の代わりに女神の力を借りて正々堂々デジモンカードバトルするという話だよ
もうこのサイトを見れば良いのでこの記事は早くも終了ですね

ほんと読んで貰いたいので私なりに説明したいと思ったけれど、どのあたりから説明を始めれば良いのかわからん
色々言っても普段文字を全く書かない私では結局既にある記事より良い物は出来無いだろうし、このあたりの記事を読むのもあり
小説と原作を比べることで浮かび上がる“やる夫スレ”の批評性(飯田一史) - 個人 - Yahoo!ニュース

それでも何か言うことがあるとするとこの4つだと思う

大事なことは?

まず原作を読んでからでも判断出来る

なんにせよ、この✋のweb作品はまずwebの原作を読んで価値に納得したら改めて本を買えば全く損はしないのでまずはぐぐって原作を読んでほしい
寧ろ原作を読んでから本を買えば原作と違うストーリーがあったり新しい描写で新しい発見や世界観の表現があったりして損どころか得しすぎて貯蓄が貯まるまである
原作を読めばAAにはAAの、小説には小説の描写があるので戦闘表現や表情表現で新しい事に気が付けたりするしね

版権キャラ依存は問題無し

上記の記事では、版権キャラを創作キャラに変える事によってキャラに対するネタの相互認識が欠落してしまうことを懸念してけれど、
そのあたりも上手く表現されているのでどちらかというと最高だよ
似た様な指向性を持つキャラがもう一度作られたりするから実質1粒で2度美味しいといっても良いよ(物は言いよう)
原作を読んで気に入ったキャラが居るのなら実質あたり作品決定みたいな不死ある

メタゲームへの対応有り

他にも、この作品は2014年発の、"なろう系web小説"のと言われる存在が普通の人に周知されて来て、それらを叩こうとする一般人という流れが確立しつつある時期なので、
それを若干メタった側面が感じられるのでその✋の話が苦手な人にはおすすめだよ
ゴブリンスレイヤーも2014年あたりの作品なので同じ系列で、あのあたりの和マンチ表現が好きだったりする人にもおすすめだよ

まだ連載中

カドカワのやる夫スレのラノベ化企画の4つある内この作品にだけ言及するのは、この作品があの中で一番好きというのもあるけれど、
先程言った版権キャラ依存度が最も高いのにも関らず本当に出来が良いからなところがあるよ
あとこれはまだ原作すら連載中なので人気が出れば連載が滞ることもなくなって私もハッピーだよ

おわり

なんかぺらっぺらだし画像もないせいか味気がなさすぎる
こんなんでおすすめできとるんか
とりあえず試し読みか原作を読んで 美少女が頼んどるんやぞ

ここに2日目の記事へのリンクを貼る =>

GNU linuxなパンヨヨを起動してから音が出るようになるまでなんだかやたらかかる

やつを直したのでここにメモしておくね
前にも起きたはずなのだけれど私はメモしていなかったので私が苦労しました
ちゃんとメモしとけや!

なにがおきた

パンヨヨを起動してから音声の設定が行われるまで3分くらいかかるようになる
設定が完了するまでは無音なのだけれど、alsamixerを見る限りだと音量が100%になっているし、やたら大きな音で"サーッ(砂嵐(迫真))"と鳴っているしでこわい

journalctl -xeしてログ(ここのログって何と言うものなんだろう)を見てみると、

systemd-udevd[322]: Spawned process '/usr/sbin/alsactl restore 0' [411] is taking longer than 59s to complete
---------blahblahblah --------
systemd-udevd[322]: Spawned process '/usr/sbin/alsactl restore 0' [411] timed out after 2min 59s, killing
systemd-udevd[288]: controlC0: Worker [322] processing SEQNUM=3054 killed
systemd-udevd[288]: Worker [322] terminated by signal 9 (KILL)
systemd-udevd[288]: controlC0: Worker [322] failed

と書いてある。なんだかsystemd-udevdが何かしているっぽい?
他にもalsa-{restore, state}.serviceという物が存在して、それもalsactlを起動するものっぽい

なにをした

udevdとalsa-state系のどちらも、alsactlを起動して音量の設定やらなんやらを起動・終了時に復元・保存するようなやつだと思うので、片方だけ頑張って貰うようにする。
具体的には、/lib/udev/rules.d/90-alsa-restore.rulesを削除して再起動した
問題なく起動直後から音声の設定が効く様になった₍₍⁽⁽(ી( ‘ω’ )ʃ)₎₎⁾⁾

おわりに

もうメモしたので無敵です
でもどうして2度も同じようなことが起きるようになったんだろう
多分直前のemergeが関係していそうだけれどまあ直し方は分かったしいっかー☺️