karubabuの日記

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

【画像あり】栄養ペーストが旨すぎる 辺境の惑星Rimworldにある栄養ペーストが旨すぎると話題に

この記事は mstdn.maud .io Advent Calendar 2018 - Adventarの1日目の記事です
美少女なので時を遡れるし、誰もやっていなかったし勝手に埋めてしまってもよいよね

今回は、主にSteamで配信されているRimWorldというゲームの加工済み食品の一つである、栄養ペーストのが如何に素晴らしいアイテムであることを紹介します
これを読み終えた後には皆さんのコロニーはペーストディスペンサーが設置され電気コンロが埃を被る栄光の未来が待っているでしょう
栄養ペースト以外の部分の説明は適当に流すので困ったら不時着した惑星でドイツのトリを発見した - ぁを読んでください!最高の記事です

Rimworldとは

*1

シナリオセットはいくつかあり、カスタマイズも出来るのですが、ベーシックなシナリオでは、宇宙船が壊れ、未開の惑星「RimWorld」へと不時着したところから始まります。  
ほとんど体一つで放り出されてしまった3人は生活の拠点となる「コロニー」を発展させ、最終的には宇宙船を製造して惑星RimWorldから脱出します。  

プレイヤーは刻々と変わる様々なデータを見ながら、目標達成に向けて彼らに指示を出すことになります。  
要素が多いため初心者は簡単に全滅し、上級者でも決して気を抜けない、頭を使うのが好きな人にはたまらないゲームです。まあ俺のような一級プレイヤーは全滅などありえんけどなw

また、私達と同じ文明レベルを持つ漂流者向けに書かれたとされるドキュメント Rimworld世界観ドキュメント日本語訳 があります

栄養ペーストってなに

栄養ペーストはRimworldにおいて作成可能な加工食品の中で最も材料対栄養の効率が良い、人が問題なく生活する上での栄養素を全て含んだ完全栄養食です。
ペーストディスペンサーを使うことで0.3の材料栄養値分の資源を用いて0.9栄養値を持つ栄養ペーストを一瞬*2にして取得できます。

f:id:karubabu:20181213151534p:plain
栄養ペーストを食べる入植者達 まずそう

メリット

比較対象はfine meal(野菜5,肉類5の心情ボーナス5)です。
カサンドラ過激を想定して書いています。

  • 料理に人員を割く必要が無くなる
  • 栄養ペーストの作成に料理スキルが不要
  • 食中毒の発生確率が0になる
  • 使用材料が3/5(野菜、又は肉類を6)
  • 消費電力が電気コンロの4/7
  • 食べる時だけ栄養ペーストを作成するので通常プールする加工食品分の資産価値が抑えられる
  • 食べる時だけ栄養ペーストを作成するので食品を持ち運ぶことがなくなり、食堂一つにテーブルを置くだけで"テーブル無しで食事をした"ペナルティを常に回避できる
  • ペーストディスペンサーは壁として扱えるので栄養ペースト作成時に冷蔵室に侵入する必要はなく、料理を行うより遥かに冷蔵室への侵入回数が減り、温度管理が簡単になる

あーもうこれはどんどん栄養ペーストが食べたくなってきましたね

デメリット

  • -4の心情ペナルティ(fine mealと比較すれば-9)
    f:id:karubabu:20181213173404p:plain
    まずそうというか、食べた後じゃんね

メリットに対してデメリットは1つだけです
これはもう栄養ペーストを食べるしかないでしょう

メリットはデメリットを上回っているのか?

Rimworldにおいて、ネックなのが食材の調達とその加工です。
これらは人口が増える毎にコストが増加していき、更にさして緩和する方法がありません。
人口が増えることによって比例してコックの仕事量も増えていきます。 経験的に、入植者が12人を超えたあたりで一人のコックが一日中料理をするだけでは足りずに2人目のコックが必要になってきます。
コックの料理スキルが高くとも、調理場が汚なければ容易に食中毒になってしまいますし、この食中毒はver1.0で強化されておりこれを罹患した入植者は1日を棒に振ってしまいます。
その点栄養ペーストは少ない材料でコックを必要としません。食中毒も全く起きないので、食中毒による心情ペナルティも発生しません。

それでも栄養ペーストで発狂するのでは…と危惧されているかもしれませんが、これについても問題はありません。
多少減ったところで寝室を広く取る、食堂兼娯楽施設をよりよくすることで十分かつ恒久的な心情ボーナスが手に入ります。
心情値は入植者によって設定されている閾値を下回らなければ良いのであって大量にあっても意味は無いので効率を上げられる所はどんどん削っていきましょう。
サイコドローンが発生しても、比較的軽いドラッグであるビールやサイコペコーやスモークリーフジョイントを作成しておけば簡単に乗り切ることが出来ます。
ドラッグは襲撃者達からのドロップで事足りますが、金策のために作成しているコロニーが多いと思うのでこれが無いということはそうそう無いのではと思います。

それでも色々あって発狂することがあったとします。それでも栄養ペーストの優位は揺ぎません。
実際発狂なんて大したことがないものが多く、問題になってくる発狂行動は心情値が一桁%レベルまで落ち込んだ時であり、これはそもそも栄養ペースト以外が問題になっているパターンが多いです。*3 料理をしている時点でペーストディスペンサーから見れば料理をしている時間はコックが発狂しているのとなんら代わりませんし、料理ではカタルシスを上回る心情ボーナスが手に入りません。
食中毒になっている時間も発狂しているのとなんら代わらない上に、食中毒は罹患し、改善するまで1日かかるなんてザラです。
しかも食中毒にはカタルシスが無いどころか、"病気になった"と"痛み"で-20程度心情が持っていかれます。 栄養ペーストを食べている間は栄養ペーストを持ち歩かないので、"テーブル無しの食事"による心情ペナルティも付きません。
食事の後、食堂に併設された娯楽施設で遊ぶことを考えると食事の度に食堂へ戻るのも大したロスではありません。

また、ペーステディスペンサーを二つ直列に繋ぐことで虫肉と人肉の摂取時の心情ペナルティを踏み倒すことが出来ます。

これらを見るに、総じて上回っていると言って良いでしょう。
栄養ペーストを食べた入植者が結婚しているので栄養ペーストを食べると彼女も出来ます。

おわりに

ここまで読んだ皆さんはもう栄養ペーストが欲しくて欲しくてたまらなくなったかと思います。
私は栄養ペーストと共にカサンドラ過激を乗り越えてきたので完全に信頼しています。

RimworldはSteamで販売されています。セールはされないらしいので実質今が一番セールされているといっても過言ではありません買いましょう!RimWorld on Steam
日本語訳は初期設定で存在し、数々のMODがSteamワークショップで公開されています。
MODの有名所も有志によって翻訳されているので、英語がきびしい人でも問題なく楽しめます。
皆さんも是非栄養ペーストを使って辺境の惑星から脱出しましょう!

最後に1年前のアドベントカレンダーで非常に良い記事を書いてくれたとしあさん、としあさんが居なければ私がrimworldに興味を持つことはありませんでした。
そして私にrimworldをプレゼントしてくれたとしあさん、としあさんが居なければ私がrimworldで遊ぶ様になるのはもっとずっと先のことだったでしょう。本当にありがとう御座います。

こちらが二日目の記事です。
's Fagaim IExplore.exe • 【A:don:vent Calendar 2018 2日目】...

https://steamuserimages-a.akamaihd.net/ugc/946216664842837440/FA3CD371E1F2B6EA8C5DAD381B0FB1A9683DAA45/
画像がでかすぎる カサンドラ過激をクリアして嬉しかったので貼りました ほめてね

*1:不時着した惑星でドイツのトリを発見した - ぁ

*2:時間を停止した状態でも取得出来るので実際には一瞬ですら掛っていない。これはいったいー?

*3:でも侮辱だけは勘弁な!(TKUYRUATM

88x2buドライバのebuild まちがってたところを直した

もう大分前に直したやつの振り返りです
大分前すぎるしツイーヨしたけれどツイーヨを見付けられないしでわやになった
こんなことがないように覚えておこうね

なにがあった

# emerge @module-rebuildして再起動しても無線デバイスのドライバが存在しないことが何度も発生していた
よくわからんね…と思いながら放置していたのだけれど、ふとビルドログを眺めていると@module-rebuildなのに今使っているkernelに対するモジュールをビルドしていた
ここもっと詳しいのがツイーヨで残っていたはずなのだけれど見付からないしまあ雰囲気を感じてね

何をした

sedしてeselect kernelで設定されているカーネルに対してモジュールをビルドする様に変更した
詳しくはここを見てね
fix:88x2bu make it bulid against the correct kernel · karubabu/gentoo-overlay@946da91 · GitHub
この英語あっているんか

おわり

もはやなんも覚えていなくてこれを見てもなんもわからんな
Makefileの中身には気をつけよう!というやつです

media-video/mpv-0.27.2がemergeできない

できた
それ以前で有効だったUSEフラグを建てっぱなしにしておくと問題が出るみたい
フラグを建てっぱなしで放置するとなんか大変なことに巻き込まれるのラノベみたいじゃんね

なにがおきた

media-video/ffmpegを4.1にアップグレードすると、preserved-rebuildが必要になる
なのでmpvもリビルドだかあっぷぐれーどだかが必要になったのでリビルドする

You manually enabled the feature 'cuda-hwaccel', but the autodetection check failed. * ERROR: media-video/mpv-0.27.2::gentoo failed (configure phase): * configure failed * * Call stack: * ebuild.sh, line 124: Called src_configure * environment, line 4250: Called waf-utils_src_configure '--confdir=/etc/mpv' '--docdir=/usr/share/doc/mpv-0.27.2' '--htmldir=/usr/share/doc/mpv-0.27.2/html' '--disable-libmpv-shared' '--disable-libmpv-static' '--disable-static-build' '--disable-optimize' '--disable-debug-build' '--enable-html-build' '--disable-pdf-build' '--disable-cplugins' '--enable-zsh-comp' '--disable-test' '--disable-android' '--enable-iconv' '--disable-libsmbclient' '--enable-lua' '--disable-javascript' '--enable-libass' '--enable-libass-osd' '--enable-zlib' '--disable-encoding' '--disable-libbluray' '--disable-dvdread' '--disable-dvdnav' '--disable-cdda' '--enable-uchardet' '--disable-rubberband' '--disable-lcms2' '--disable-vapoursynth' '--disable-vapoursynth-lazy' '--disable-libarchive' '--enable-libavdevice' '--disable-sdl2' '--disable-sdl1' '--disable-oss-audio' '--disable-rsound' '--disable-sndio' '--enable-pulse' '--disable-jack' '--disable-openal' '--disable-opensles' '--enable-alsa' '--disable-coreaudio' '--disable-cocoa' '--disable-drm' '--disable-gbm' '--disable-wayland' '--enable-x11' '--enable-xv' '--disable-gl-cocoa' '--enable-gl-x11' '--enable-egl-x11' '--disable-egl-drm' '--disable-gl-wayland' '--disable-vdpau' '--disable-vdpau-gl-x11' '--disable-vaapi' '--disable-vaapi-x11' '--disable-vaapi-wayland' '--disable-vaapi-drm' '--disable-caca' '--disable-jpeg' '--disable-rpi' '--disable-plain-gl' '--disable-mali-fbdev' '--disable-vaapi-hwaccel' '--disable-vdpau-hwaccel' '--enable-cuda-hwaccel' '--disable-tv' '--disable-tv-v4l2' '--disable-libv4l2' '--disable-audio-input' '--disable-dvbin' '--disable-apple-remote' '--disable-build-date' * environment, line 5204: Called die * The specific snippet of code: * CCFLAGS="${CFLAGS}" LINKFLAGS="${CFLAGS} ${LDFLAGS}" "${WAF_BINARY}" "--prefix=${EPREFIX}/usr" "${libdir[@]}" "${@}" configure || die "configure failed" * * If you need support, post the output of emerge --info '=media-video/mpv-0.27.2::gentoo', * the complete build log and the output of emerge -pqv '=media-video/mpv-0.27.2::gentoo'. * The complete build log is located at '/var/tmp/portage/media-video/mpv-0.27.2/temp/build.log'. * The ebuild environment file is located at '/var/tmp/portage/media-video/mpv-0.27.2/temp/environment'. * Working directory: '/var/tmp/portage/media-video/mpv-0.27.2/work/mpv-0.27.2' * S: '/var/tmp/portage/media-video/mpv-0.27.2/work/mpv-0.27.2'

通らない!

なにした

大事なのは

You manually enabled the feature 'cuda-hwaccel', but the autodetection check failed.

この部分で、なんかcudaに対する某かが問題を起こしているっぽい
sudo flaggie --strict media-video/mpv -cuda
してcuda系のUSEフラグを外す
通る

おわり

なんかわからんけれど問題なく通ったのでよかった(こなみるく)
何に使っていたフラグなのか覚えていないけれど覚えていないってことは要らないってことでしょ

wireguard入門した時に困ったところ

公式もdebian wikiもarch wikiも相当充実しているのに結構詰まりました
わたしにやさしくして

鯖側

# sysctl -w net.ipv4.ip_forward=1をやっておくこと

これやらないとなんかよくわからんがダメみたい
wireguardのインターフェースから通常のインターフェースへ、又は逆へのトラフィックの転送を可能にするっぽい
でもこれって鯖側のwireguard設定につけることになるであろう、
/etc/wireguard/wgnet0.conf

PostUp = iptables -A FORWARD -i wgnet0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  
PostDown = iptables -D FORWARD -i wgnet0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE  

とかがあれば要らなそうに思える(けれど必要)
よくわかんないね

蔵側

DNSの設定を忘れないこと

特に設定していなければ基本的に問題はなさそうだけれど、私はdnsmasqとdoh-client

で適当に弄っているのでだめだったっぽい
/etc/dnsmasq.confに変更を書き加えれば問題なく動く

interface=wgnet0

その他

私は困らなかったけれどなんだかハマりそうな雰囲気を漂わせている部分があった

wireguardの設定ファイルにDNS= hogehugaを入れた時にdbus-org.freedesktop.resolve1.service not found.的メッセージが出て失敗する

これはFS#54796 : [systemd] missing dbus-org.freedesktop.resolve1.service when using systemd-resolve
が役に立ちそうな雰囲気だった
見たかんじsystemd-resolvedが動いていれば勝手にdbus-org.freedesktop.resolve1.serviceシンボリックリンクが貼られる様になって問題なく起動する様になるっぽい
他人事なので完全に適当に言っています

ここを参照しました:
WireGuard VPN Walkthrough
WireGuard: fast, modern, secure VPN tunnel
Wireguard - Debian Wiki

88x2buドライバのebuildを書いた時にめっちゃ困ったところ

公式docを読んだら完全に解決したし持つべきものは友と公式docなんだなあ
あらためてそうおもいました

src_prepare()は中身を弄ったらeapply_userが必要になる

EAPI Usage and Description – Gentoo Development Guide

The eapply_user command permits the package manager to apply user-provided patches. It must be called from every src_prepare function.
Note:eapply_user doesn't need to be called explicitly when default src_prepare is called.

これどういうことなのか良くわからなくて無限に文句を言われました…(公式docを読めていない)
標準のsrc_prepareを呼ぶのなら要らないよ!の意味が分かっていなかった
src_prepare()を書き加えたらeapply_userをsrc_prepare()の適当なところに足そう

MODULE_NAMESの書き方

Installing ${modulename} module" cd ${objdir} || die "${objdir} does not exist

とか言われたらこれが間違っている可能性が高いと思う
Gentoo Development Guide: linux-mod.eclass
modulenameは兎も角、libdir, srcdir, objdirがよくわからなくて詰った
基本的にはlibdirだけを自分で書いてsrcdirは${S}に(つまりデフォルトのままで良い)して、objdirもそのまま(つまりsrcdirと同じ)で問題なかった
色々なmoduleのebuildを見て回ったけれど基本的にこれだしアンパイがこれそう

おわり

問題なくemergeが通る様になるとemerge -av @module-rebuildに88x2buのパッケージが並ぶ様になる
これで毎回手動make installする必要がなくなっていいわねー🤗
gentoo-overlay/rtl88x2bu-9999.ebuild at master · karubabu/gentoo-overlay · GitHub
☝️(´・ω・`)書いたやつはこれなので"こうすると後々何か起きた時に分かりやすいよ"とか"こっちの方がええで"的なサムシングくれるイケメンはください!

linux版 Civ5はsys-libs/glibcとx11-libs/libxcbをsys-devel/gcc-8.2.0-r2でビルドすると動作しなかった

タイトルの通りです

なにがあった

# gcc-config -l  
 [1] x86_64-pc-linux-gnu-7.3.0 
 [2] x86_64-pc-linux-gnu-8.2.0 *

この状態で

# emerge -e @world

してシステム全体をビルドし直すと、Civ5を起動出来無くなった

実際はビルドし直した後からしばらく経ってからCiv5を起動してみているので本当にここが原因か確実と言える自信はないのかも…

どうした

コンソールで直に起動しようとすると、segmentation faultと出て終了している
dmesgを見ると、

と言われている
とりあえず前のemerge -e @worldが原因の可能性があるので、gccを7.3.0に戻した状態でlibxcb.soをインストールしたパッケージであるx11-libs/libxcbを再ビルドする

% equery b libxcb.so  
 * Searching for libxcb.so ... 
x11-libs/libxcb-1.13 (/usr/lib64/libxcb.so -> libxcb.so.1.1.0)
x11-libs/libxcb-1.13 (/usr/lib32/libxcb.so -> libxcb.so.1.1.0)
# emerge -av x11-libs/libxcb

これをやったところ、まだsegmentation faultで落ちた
dmesgを見ると、

今度はlibpthread-2.27.soで落ちているのでsys-libs/glibcをビルドし直した

% equery b libpthread-2.27.so
 * Searching for libpthread-2.27.so ... 
sys-libs/glibc-2.27-r6 (/lib64/libpthread-2.27.so)
sys-libs/glibc-2.27-r6 (/lib32/libpthread-2.27.so)
# emerge -av sys-libs/glibc

これで無事起動する様になった

おわりに

なんか一瞬で解決したしdmesgとか使って何が悪いのか調べたし雰囲気めっちゃ強そうじゃない??
ほめてね(何もわからんのにgcc8でシステムをビルドし直すな)

新しめの無線子機を使う時に確認しておきたいドライバ内容

なんか本文で何を言いたいのかよくわかんないね
新しめの無線アダブターを使おうとすると大体ギッヨパブからドライバーのソースコードを拾ってきて自前でビルドしてmodprobeみたいな流れをしなければならないよね
その無線アダプターが使うチップセットに対応したドライバでもその無線アダプターで使えることをドライバが知らないことがあるので、それを対応付ける作業が必要になるかもしれない
ということです

私もよくわかっていないけれど多分こんな感じだと思う

どういうことなものなの

ソースコードをcloneしてディレクトリの中に入った後grep USB_DEVICE\(0 ./os_dep/linux/usb_intf.cするとズラズラと何かが出てくる
これらがこのドライバをインストールした時に使える様になるデバイスの一覧、だと思っています
つまりここに無ければ起動しない(一敗)
ここに自分が使う無線アダプターの情報を書き加えてビルドし直す必要がある

どうした

公式がソースコードを公開している場合が多いので、それを取得してくる
公式が公開しているソースコードは自分の環境で動くかどうかは別として、その無線アダプターに対応したコードなので上記のデバイス一覧に間違いなく目的のコードが入っている
その行を見付ける為の目星を付ける必要がある
そこでその無線アダプターのBus IDを調べる
これはlsusbですぐ分かる
例としては、TP-LINK Archer T4U v3ではBus 003 Device 002: ID 2357:0115 TP-Linkとなっているので2357:0115のあたりがそれだと思う
後は公式のソースコードがあるディレクトリでgrep USB_DEVICE\(0 ./os_dep/linux/usb_intf.c | grep 2357とかをすると目的の行が見付けられる

後は知り得た情報を使ってソースコード追記する
追記するファイルは./os_dep/linux/usb_intf.c
追記する場合、プリプロセッサCONFIG_RTLXXXXBなどのディレクティブに注意して貼り付けること
大体コピペする予定の行にある.driver_infoCONFIG_に続く内容になっているので適当に探す

ビルドする できる

おわりに

これをTP-LINK Archer T4U v3についてやったものがこれです
GitHub - karubabu/rtl88x2BU_WiFi_linux_v5.2.4.4_26334.20180126_COEX20171012-5044: rtl88x2bu driver updated for modern kernels.
$ uname -r 4.17.12-gentooで動いています
多分もっときちんとググればこんなことプヨが既にやってあるコードを見付けられそう