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 ofemerge -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_info
がCONFIG_
に続く内容になっているので適当に探す
ビルドする できる
おわりに
これを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
で動いています
多分もっときちんとググればこんなことプヨが既にやってあるコードを見付けられそう