Category: Ubuntu

FirefoxのuserContent.cssでYouTubeを軽くする

FirefoxのuserContent.cssでYouTubeを軽くする

4GB RAM 級の古い PC や小型 tablet で YouTube を開くと、動画そのものより周辺 UI の重さが気になることがある。

広告、コメント、関連動画、Shorts、棚 UI、アニメーションなどを CSS で非表示にすると、JavaScript の実行自体は止められないが、描画負荷と見た目の密度は下げられる。

このメモでは、Stylus のような拡張機能ではなく Firefox 標準の userContent.css を使ってみた時のメモ。

方針

  • JavaScript は使わない
  • 外部 URL、@importurl(...) は使わない
  • CSS は YouTube domain に限定する
  • Firefox の policy で userContent.css を有効化する
  • profile が snap 版と deb 版で分かれることを前提にする

CSS の外形は次のようになる。

@-moz-document domain("youtube.com") {
  ytd-rich-section-renderer,
  ytd-reel-shelf-renderer,
  ytd-rich-shelf-renderer[is-shorts],
  ytd-comments,
  #comments {
    display: none !important;
  }
}

実際には YouTube の DOM 変更に備え、Shorts 系、棚 UI、コメント、関連 UI を複数 selector で押さえる。

userContent.cssを使う理由

Stylus のような extension を使うと管理は楽だが、低メモリ端末では extension 自体も増やしたくないことがある。

Read more...

UbuntuでAndroid + Rust/Slint開発環境をAnsible管理する

UbuntuでAndroid + Rust/Slint開発環境をAnsible管理する

Ubuntu workstation に Android Studio、Android SDK、Emulator、Rust Android build 環境を入れる場合、GUI installer 任せにすると再構築時の差分が見えにくい。

Ansible では、OS 側の依存、SDK directory、Rust toolchain、Emulator 用 group、確認用 AVD を分けて管理すると扱いやすい。

管理するもの

  • Android Studio
  • Android SDK command-line tools
  • platform-tools
  • emulator
  • Android platform / build-tools
  • NDK
  • x86_64 emulator image
  • Rust toolchain
  • x86_64-linux-android target
  • cargo-apk
  • KVM / libvirt / plugdev group

Android Studio 本体は公式 tarball を固定 path に展開し、SDK は /opt/android-sdk のような system-wide path に置くと、複数 shell や editor から参照しやすい。

directory方針

例:

Read more...

ubuntu studio 20.04の個人的な設定メモ

環境

Ubuntu Studio 22.04

UbuntuでUSBインストーラを作る

isoイメージをホームディレクトリ直下に移動しておくとイメージを自動的にリストアップしてくれる。

usb-creator-gtk, usb-creator-kde が存在するので未インストールであればインストールして起動。

Ubuntu Studio 22.04 インストーラ固有

  • Nvidia RTX3060だとインストーラがGPU経由で表示できない
  • M/BのUEFIの画面で[Initiate Graphic Adapter]の箇所でPEG(オンボードでないGPU)をIDG(内蔵のグラフィック機能)に変更
    • M/BのD-SubなりHDMIに接続しセットアップ
      • OSセットアップ後、NvidiaのドライバーをインストールしPEGに戻した。

レポジトリのキーファイル操作

apt-key は非推奨。新規にリポジトリ鍵を追加する場合は、/usr/share/keyrings/ に鍵を置き、リポジトリ設定の signed-by= で参照する。 既存環境の棚卸しや削除時だけ apt-key list / apt-key del を使う。

キー一覧

sudo apt-key list

キー削除

sudo apt-key del [キーID]

ファイルを直接削除

下記ディレクトリ配下のファイルを削除

  • /usr/share/keyrings/
  • /etc/apt/trusted.gpg.d/

ssh鍵の作成とgithubへの登録

右上の自分のアイコンをクリック -> Settings -> SSH and GPG keys -> New SSH Key

ssh-keygen cat ~/.ssh/id_rsa.pub

表示された公開鍵をGithubに貼り付けて設定

ghqをインストールしてgetする

apt install golang-go
go install github.com/x-motemen/ghq@latest

コマンドサーチパスに ~/go/bin を追加

Read more...

ctr cheatsheet

効果コマンド
ログctr logs <コンテナID>
コンテナの情報を取得ctr containers info <コンテナID>
名前空間の指定ctr -n <名前空間> containers info <コンテナID>
コンテナのリストctr containers list , sudo ctr c ls(短縮形)
イメージのpullctr -n mynamespace images pull docker.io/library/alpine:latest
イメージのrunctr -n mynamespace run docker.io/library/alpine:latest mycontainer
コンテナの停止ctr containers stop afa4952050fb2aba1b0f3e1526a231ae442bae0995fda0e95b341073fe79cc79
ソケットファイルを指定ctr –address $XDG_RUNTIME_DIR/containerd/containerd.sock containers list

os側でps -efなどで確認できるPIDからコンテナを探す ``

psコマンドの結果からコンテナを探す

psで見ると下記のようなプロセスがある

/usr/local/bin/containerd-shim-runc-v2 -namespace default -id afa4952050fb2aba1b0f3e1526a231ae442bae0995fda0e95b341073fe79cc79 -address /run/containerd/containerd.sock

この-id はコンテナID

-address /run/containerd/containerd.sock : このオプションは、containerd のデーモンと通信するためのUNIXソケットのパスを指定している。 containerd クライアントとデーモン間の通信に使用されます。

Read more...

Ubuntu22.04でNFS_Homeで rootless containerdを試す

背景

私はNFS homeを利用している。NFS上にコンテナを置けないトラブルへのTIPSについて残しておく。 またログが~/.local/share/nerdctl配下に書き出されるが、NFS上にログが書き出されると非常に重くなってしまうので別の場所をしていするようにした

chown ができない、というエラーが出る

error: failed to solve: failed to compute cache key: mount callback failed on /var/lib/containerd/tmpmounts/containerd-mount2455064670: failed to Lchown "/var/lib/containerd/tmpmounts/containerd-mount2455064670/etc/gshadow" for UID 0, GID 42: lchown /var/lib/containerd/tmpmounts/containerd-mount2455064670/etc/gshadow: operation not permitted: unknown

NFSの場合、rootlessが動作しない、ようだ

rootless containerdはデフォルトでホームディレクトリ配下を使用するが、私がNFS Homeだったので動作しなかった。

Redhatのエントリが参考になる。 Rootless Podman and NFS

Why doesn’t Podman support storage on NFS?
The use case that does not work well is having the container image store reside on an NFS mount point.
ンテナイメージをNFS上に置くのは良くないらしい。

The NFS protocol has no concept of user namespaces and has no way to know that the process running as UID 1000 is in one.
The NFS server also has no way of knowing that the client process has DAC_OVERRIDE for the user namespace and that UID 100059 is mapped into the same user namespace.
In other words, the chance of this information being known by NFS is slim at best.

NFSサーバ側はクライアント側で DAC_OVERRIDE しようとしているかなど分からない(NFSはサポートしていない機能なので仕方がない)

解決策としては2つのアプローチが紹介されている。

Read more...

UbuntuでのAppArmorのメモ

背景

containerdをrootlessで動かそうとしたところAppArmorに引っかかってしまった

(私の場合、/mnt配下の追加ディスク上にコンテナイメージを置きたい、という背景があったため引っかかったと思われる)

標準的なディレクトリ以外で動作させようとした場合に問題になりそう。

下記のエラーが出た

Mar  6 00:39:00 marie-ms7817 systemd[1055]: Started libcontainer container d1b514a134af96a15f5062afe042fd8654d91b2be4bef27f9af5865e29d2cad7.
Mar  6 00:40:30 marie-ms7817 kernel: [ 7375.140738] audit: type=1400 audit(1709653230.078:103): apparmor="DENIED" operation="change_onexec" class="file" info="label not found" error=-2 profile="unconfined" name="nerdctl-default" pid=54813 comm="aa-exec"

apparmor=“DENIED operation=“change_onexec” このメッセージは、AppArmor(Linuxのセキュリティモジュールの一つ)が、実行時の権限変更を拒否したことを示している。 特に、name=“nerdctl-default"に関連する操作が拒否されており、これはコンテナのセキュリティポリシーに関連する問題を示唆している。 label not foundという部分から、特定のセキュリティラベルが見つからない、または適切に設定されていない可能性がある。

既存の設定前の確認

nerdctl-defaultに関連する設定があるか確認。 下記コマンドで現在のAppArmorの設定のリストを出力し設定があるか確認(無かった)

sudo aa-status

ポリシーファイルの作成

/etc/apparmor.d ディレクトリに nerdctl-default という名前の新しい AppArmor ポリシーファイルを作成する。

/etc/apparmor.d/nerdctl-default とした。

#include <tunables/global>

profile nerdctl-default flags=(attach_disconnected,mediate_deleted) {
    / r,
    /dev/tty rw,
    /dev/pts/** w,
    /dev/null rw,
    /etc/.ro*/ld.so.cache r,
    /etc/ld.so.cache r,
    /etc/locale.alias r,
    /etc/nsswitch.conf r,
    /etc/passwd r,
    /mnt/append-disk/containerd/** rwk,
    /proc/ r,
    /proc/** r,
    /sys/devices/system/** r,
    /sys/kernel/mm/transparent_hugepage/hpage_pmd_size r,
    /usr/bin/** rix,
    /usr/lib/locale/locale-archive r,
    /usr/lib/x86_64-linux-gnu/** rm,
    /usr/lib/locale/** r,
    /usr/share/terminfo/** r,
    /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/** rwk,
    /var/lib/containerd/** rwk,
    owner /** rwix,
    network,
    ptrace (read, readby) peer=nerdctl-default,
    signal (receive) peer=nerdctl-default,
    signal (receive) peer=unconfined,
    signal (send) peer=nerdctl-default,
    signal (send) set=kill peer=unconfined,
}

それぞれの意味。

Read more...