karubabuの日記

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

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で動いています
多分もっときちんとググればこんなことプヨが既にやってあるコードを見付けられそう

keybaseのprivateレポジトリにアクセスしたらkeybase This device does not yet have read access to directoryと言われる

This device does not yet have read access to directory /keybase/private/d1rewolf, log into Keybase from one of your other devices to grant access: is not readable by d1rewolf (uid: )

とか出たらこれです
ログインして認証が通っているのにも関らずこれが出た場合とりあえずkeybase関連のサービスを全て再起動すればアクセス出来る様になることがある
私はよくわからなかったのでパヨヨンごと再起動しました