No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 19 | 20 | 21 || Next»

Ubuntu 22.04 のインストールに苦戦した

このまえの続きで,Ubuntu 22.04 のディスプレイドライバ周りをごにょごにょ.結論として,ubuntu-drivers devices で recommended が付いてた nvidia-driver-530-open を入れたのが間違いで,nvidia-driver-530 を入れておけば平和だったっぽい.色々ググってたら同じ状況(RTX 3080 Ti + Ubuntu 22.04)の書き込みがNVIDIA のフォーラムにあった

さて,とりあえずこれで画面が見えるようになったので他の作業を進めよう.

閑話休題.

firefox が snap になってるな.微妙にめんどい.

ネットワークの設定が NetworkManager になってるな.nmcli で設定するのか.

最近 Ubuntu の新規インストールしてなかったので知らんかったけど色々変わっとるな.

Ubuntu 22.04 のインストールに苦戦中

お仕事用のメインマシンをリプレースしようかなと Ubuntu 22.04 のインストールを試みたものの上手く動かんかった.

とりあえず,USB メモリでインストールしようとしてみたら,たぶん initramfs からインストールメディアのファイルシステムに切り替わる辺りで No medium found を食らってインストーラが起動せんかった.起動途中でデバイス名がズレてファイルシステムを見つけられなくなってたか何かかね.結局,USB メモリを挿す位置を物理的に変えてみたら問題なく起動した(という対処までに bootable な USB メモリを作り直してみたり DVD-R を焼いてみたり…… 時間食った).

そしてその後のインストールは素直に行ったけれど,インストールされた Ubuntu を起動してみたら画面が真っ赤だったり真っ黄色だったりで何がなんだかよく見えない.インストーラはちゃんとした画面だったのでインストールされた環境でのドライバ周りが悪さしとる.なお,ディスプレイ 3枚のうち 2枚が黄色で 1枚が赤だった.この色分けの理由は分からんかった(HDMI と display port という違いか,ディスプレイの種類か?).

ということで,ctrl-alt-F1 辺りも効かなかったのでセーフモードで起動して root shell に行って,ubuntu-drivers devices で nvidia のドライバを探して recommended って付いてた nvidia-driver-530-open を apt install していれてみた.そしたらまた起動しねぇ…… ログを見る限りではカーネルモジュールは読み込まれてるけど,なんか X サーバが GPU を初期化できないか何かみたいな感じ.

なかなかめんどいのでとりあえずここらで放置.

docker で GitLab CI 用の Runner を用意する

GitLab CI 用の Runner を用意するのに docker 使うのが楽そうなので docker engine のインストールからやってみた.

とりあえず,https://docs.docker.com/engine/install/ubuntu/ に沿ってリポジトリを追加してパッケージをインストール:

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
 echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

そしてテスト:

sudo docker run hello-world

それっぽい出力が見えれば docker engine の準備は OK.

んで.あとは docker コマンドで適当にやれば良いと.とりあえず https://docs.gitlab.com/runner/install/docker.html に沿ってコンテナを動かしてく.

まずは GitLab Runner の設定ファイルを保存するディレクトリをホストに用意.これをコンテナ側の /etc/gitlab-runnner にマウントすることになる.

sudo mkdir -p /srv/gitlab-runner/config

そして Runner のコンテナを起動(Runner のコンテナ内からホスト側の docker を叩けるように,ホストの /var/run/docker.sock を同じ位置にマウントする):

sudo docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock  gitlab/gitlab-runner:latest

んで,この状況だと設定ファイルがなくて動かない(エラーを吐きまくってる)ので,設定ファイルの作成をする:

sudo docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register

こっちは -d を付けてないのでターミナル上で色々と聞かれるので諸々打ち込む.coordinator URL とか token とかは GitLab の Admin Area の OVerview の Runners にある "Register an instance runner" の辺りで情報が取れる(そっちだとコマンドラインだけで済みそうな実行方法が書いてあるっぽい気もする).executer は docker にでもしとくのが楽な気がする(スケールさせず,.gitlab-ci.yml の image 設定で動かすコンテナを指定可能).

作成された設定ファイルを読み込むように,先に走らせてたコンテナ内の runner をリスタート(gitlab-runner という名前のコンテナで gitlab-runner というコマンドを実行というわかりにくさ):

sudo docker exec gitlab-runner gitlab-runner restart

さて,あとはデフォルトの設定ファイルの使いにくいところを修正.とりあえず job のたびにコンテナイメージを pull されるのもあれなので pull しないでローカルのを使えるように設定ファイル(/srv/gitlab-runner/config/config.toml)の [runners.docker] セクションにポリシーを追加:

  allowed_pull_policies = [ "always", "if-not-present", "never" ]

これで後は各プロジェクトの .gitlab-ci.yml のイメージ指定のとこで pull_policy に if-not-present とか書いとけばローカルにあるイメージを使ってもらえる.CI 用のカスタムのイメージを使いたいけど Docker Hub に登録するのもメンドイという場合にも,ホスト上で commit しといたカスタムイメージを指定して pull_policy を never にすりゃいける:

image:
  name: "ubuntu:22.04-custom"
  pull_policy: never

あとはついでに設定ファイルの並行実行数の指定も変更しとくとよい?:

concurrent = 4

さて,これで Runner の準備は OK かな.docker engine のインストールが微妙にメンドイ感じに見えてたけど特に引っかかるところもなかったので楽といえば楽.

閑話休題.

カスタムした docker イメージを作るのもメモっとく.Dockerfile をちゃんと用意するのが正しい気もするけれど,インタラクティブにやる方法のメモ.

とりあえず,ホストでベースのイメージを起動.--name で名前つけとくと楽?:

sudo docker run --name ubuntu_2204_modifying -it ubuntu:22.04 bash

そしてそのままコンテナ内で諸々の準備をする.apt でなにか突っ込むとか:

apt update
apt install -y g++ curl make
exit

コンテナのシェルを抜けたらコンテナが止まるので,その状態を commit してイメージにする:

sudo docker commit ubuntu_2204_modifying ubuntu:22.04-custom

これで準備完了.

閑話休題.

docker run と docker exec を間違えるのでメモ.run は新しいコンテナを作って(コマンドを)実行.そして exec は起動中の既存のコンテナ上でコマンドを実行.run = create + start + exec という感じ?

Ubuntu で Zoom に学会タイマーを流し込む

今まで学会タイマーを Zoom に流し込むのは Win + OBS でやってたのだけど,今日は Win マシンが足りなかったので Ubuntu で用意してみた.

とりま OBS Studio と仮想カメラ用のカーネルモジュールを入れる:

sudo apt-get install ffmpeg
sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt update && sudo apt install obs-studio
sudo apt install v4l2loopback-dkms

次に PulseAudio で仮想オーディオ配線.テキトウに virtmic という名前の null sink を作ってみて,あとで Zoom に入力デバイスとして使えるようにその null sink の monitor を source に remap しとく(Zoom が monitor を入力として拾ってくれないので):

pacmd load-module module-null-sink sink_name=virtmic sink_properties=device.description="virtmic"
pactl load-module module-remap-source master=virtmic.monitor source_name=virtmic_monitor source_properties=device.description="virtmic_monitor"

そしてブラウザの音出力をこの null sink に入れたいので,ブラウザで音出した状態で pavucontrol を起動して出力デバイスを virtmic にする:

sudo apt install pavucontrol
pavucontrol &

音量調整も pavucontrol でやってしまうので良いっぽい.

あとは OBS Studio でウインドウキャプチャ(xcomposite)して仮想カメラで流して Zoom で拾う.Chrome だと chrome://settings/appearance で "Use system title bar and borders" をやっとかないとキャプチャできない罠にハマった(画面全体のキャプチャだとこれなしでも拾えたけど).

なお,タイマーアプリの音を自分のスピーカーにも流したいとかなら,combined sink を作ってブラウザを出力をそこに入れて分岐させる(alsa_output.pci-0000_04_00.1.hdmi-stereo のところは pacmd list-sinks で出てくるスピーカーの sink の name で):

pacmd load-module module-combine-sink sink_name=virtmic_combined slaves=virtmic,alsa_output.pci-0000_04_00.1.hdmi-stereo

閑話休題.

これでタイムキーパーが用意できたぜと思って使ってたら,Zoom 自体が落ちやがるというオチが待っていた…… 残念.仕事にならん.

同じネットワークにつなげてたメイン PC(Win)の Zoom も同時に落ちたし,DNS の解決も出来なくなってたので,たぶんネットワークがちょっと死んでたっぽい.でもその程度で落ちないで欲しい気もする.ハートビートが途切れたからミーティングが終了したという判定だったりしたのだろうか? でも自分がホストだったんだよね…… 謎.

iftop

top コマンドのネットワークインターフェース版的なもので,ネットワークの通信量を見られるコマンド.今まで使ったことなかったけど,時々欲しいなと思う類の便利ツールだと思う.sudo apt install iftop で入るので導入も楽.

pdf のページ数を確認するワンライナー

ls *.pdf | python3 -c 'import PyPDF2;import sys;[print("{} {}".format(PyPDF2.PdfFileReader(open(file.strip(), mode="rb")).getNumPages(),file.strip())) for file in sys.stdin.readlines()]'

しばしばお世話になる pdftools の使ってる PyPDF2 ライブラリを呼ぶ感じでテキトウに.とりあえず動けばいい.

追記:PdfFileReader が Obsolete ということで,PdfReader を使って書き換え:

ls *.pdf | python3 -c 'import PyPDF2;import sys;[print("{} {}".format(len(PyPDF2.PdfReader(open(file.strip(), mode="rb")).pages),file.strip())) for file in sys.stdin.readlines()]'
«Prev || 1 | 2 | 3 |...| 19 | 20 | 21 || Next»
Search
Feeds

Page Top