メインコンテンツまでスキップ

「ubuntu」タグの記事が3件件あります

全てのタグを見る

· 約7分
ogumaru

概要

また beta がついているが、Ubuntu Pro が個人でも 5 台まで無償利用できるようになったため、早速利用してみる。

全体の流れとしては以下のようになる。

  1. Ubuntu Oneのアカウントの作成
  2. Ubuntu Proへログイン
  3. トークンの取得
  4. proコマンドを利用できるようにする
  5. 端末をアタッチ

Ubuntu Pro beta tutorialを参考に進めれば特に詰まるところもない。

環境

項目内容
OSUbuntu 22.04.1 LTS

利用手順

Ubuntu One アカウントの作成 / Ubuntu Pro へログイン

Ubuntu One のアカウントを作成したあと、Ubuntu Pro のページから再度ログインを行うと下図の画面になる。

Personal Data Request

なお、「Service authorization for Ubuntu.com」はチェックを入れないと進めなかった。

トークンの取得

Ubuntu Pro にログイン後、下記の画面から「UA subscriptions」を押下するとトークンが確認できる。

UA Subscriptions

Tokenとある箇所にトークン、その下にはアタッチの際のコマンドが書いてある。

Your subscriptions

proコマンドを利用できるようにする

詳細は後述するが、proコマンドのために追加でインストールが必要にはならなかった。

sudo apt update && sudo apt upgrade

端末のアタッチ

sudo pro attach "${表示されているTOKEN}"
# > Enabling default service esm-infra
# > Updating package lists
# > Ubuntu Pro: ESM Infra enabled
# > Enabling default service livepatch
# > Installing canonical-livepatch snap
# > Canonical livepatch enabled.
# > Unable to determine current instance-id
# > This machine is now attached to 'Ubuntu Pro - free personal subscription'
# >
# > SERVICE ENTITLED STATUS DESCRIPTION
# > esm-infra yes enabled Expanded Security # > Maintenance for Infrastructure
# > livepatch yes enabled Canonical Livepatch service
# >
# > NOTICES
# > Operation in progress: pro attach
# >
# > Enable services with: pro enable <service>
# >
# > Account: ogumaru@example.com
# > Subscription: Ubuntu Pro - free personal subscription

実行もほとんど時間はかからず、特に再起動を求められることはなかった。

上記コマンドでアタッチ後にはトップバーに下図の常駐アイコンが表示されるようになる。

Livepatchのアイコン

「Livepatch Settings」を押下するとライブパッチの設定のほか、トップバーの常駐アイコン表示切り替えや端末のデタッチもできる。

Detach this machine

トークンについて

Tokenは端末認証後も変わらず(=5 台とも同じトークンを利用するはず)、またトークンの更新画面も見つからなかった。

トークンが漏れてしまった場合の対策は気になる。

proコマンドの実体について

結論

ubuntu-advantageが実体となっている。

proコマンドの有無

これまでの環境ではproコマンドは利用できなかった。

# pro コマンドは利用できない
command -v pro

# 実行してもパッケージの候補にはでてこない
pro
# > Command 'pro' not found, did you mean:
# > command 'gpro' from snap gpro (1.0.24)
# > command 'ro' from deb golang-redoctober (0.0~git20161017.0.78e9720-5)
# > command 'proj' from deb proj-bin (8.2.1-1)
# > command 'prt' from deb prt (0.22-1)
# > command 'pio' from deb platformio (4.3.4-2)
# > command 'pr' from deb coreutils (8.32-4.1ubuntu1)
# > command 'pry' from deb pry (0.13.1-2)
# > See 'snap info <snapname>' for additional versions.

apt upgradeでパッケージ更新をしたあと利用できるようになる。

パッケージとしてはubuntu-advantage-toolsの一部なようで、これがアップデートされることでproが利用できるようになるようだ。

sudo apt update && sudo apt upgrade
# > ...
# > The following packages will be upgraded:
# > ubuntu-advantage-tools
# > 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
# > Need to get 163 kB of archives.
# > After this operation, 113 kB of additional disk space will be # used.
# > Do you want to continue? [Y/n] y
# > Get:1 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main # amd64 ubuntu-advantage-tools amd64 27.11.2~22.04.1 [163 kB]
# > Fetched 163 kB in 0s (723 kB/s)
# > Preconfiguring packages ...
# > (Reading database ... 183922 files and directories currently installed.)
# > Preparing to unpack .../ubuntu-advantage-tools_27.11.2~22.04.1_amd64.deb ...
# > Unpacking ubuntu-advantage-tools (27.11.2~22.04.1) over (27.10.1~22.04.1) ...
# > Setting up ubuntu-advantage-tools (27.11.2~22.04.1) ...
# > Installing new version of config file /etc/ubuntu-advantage/help_data.yaml ...
# > Installing new version of config file /etc/ubuntu-advantage/uaclient.conf ...
# > Processing triggers for man-db (2.10.2-1) ...

実体の確認と関連コマンド

proコマンドの実体を確認するとubuntu-advantageへのシンボリックリンクになっていた。

command -v pro
# > /usr/bin/pro

file "$(command -v pro)"
# > /usr/bin/pro: symbolic link to ubuntu-advantage

また、ここに記載されているようなuaコマンドも、同様にubuntu-advantageへのシンボリックリンクとなっていた。

file "$(command -v ua )"
/usr/bin/ua: symbolic link to ubuntu-advantage

Ubuntu Pro Clientにも下記の記載がある。

Note: The Ubuntu Advantage client or UA client has been renamed to the Ubuntu Pro client in line with the rebranding of Ubuntu Advantage to Ubuntu Pro 4. Specific commands have also been updated to refer to Ubuntu Pro rather than Ubuntu Advantage.

ubuntu-advantage自体を呼び出しても、ヘルプ内はproとなっていた。

ubuntu-advantage --help
# > usage: pro <command> [flags]
# > ...

ドキュメントの修正コミット(docs: ua -> pro)でも見られるように、ドキュメントもproへ更新されている。

· 約6分
ogumaru

概要

これまで Wi-Fi 接続用の USB ドングルを利用する際にドライバのビルドが必要になることがあったため、作業の記録も兼ねてまとめておく。

依存パッケージが多いため、Docker を利用してビルドを行うこととする。

環境・利用機器

環境バージョン
OSUbuntu 22.04.1 LTS
Docker20.10.14, build a224086
製品コントローラ
アイ・オー・データ社 WNPU583Brtl8821ce
アイ・オー・データ社 WN-AC867Urtl8812au

WNPU583B は Wi-Fi/Bluetooth 両方使用できることを確認する。

ドライバのビルド・インストール

Docker コンテナの起動 (ホスト側)

rtl8812au のドライバが多く迷うが、GitHub での「rtl8812au」の検索結果の上位のものを利用した。

git clone https://github.com/gnab/rtl8812au.git driver
docker run --rm -it -v "$(pwd)/driver:/data" -w "/data" ubuntu:jammy /bin/bash

後述するカーネルヘッダのパッケージをインストールするためには、ホストとコンテナの OS(ディストリビューション)を合わせる必要がある。

最初gccのコンテナでビルドしようとしたが、ベースとなる OS が異なるためこのパッケージがなかった。

依存パッケージのインストール (コンテナ側)

apt update
apt install build-essential "linux-headers-$(uname -r)"

なお、linux-headers-*のパッケージをインストールしないと下記のエラーが出る。

make[1]: *** /lib/modules/5.15.0-47-generic/build: No such file or directory.

ドライバのビルド (コンテナ側)

make

ドライバのテスト (ホスト側)

sudo insmod driver/8812au.ko

この状態では再起動の際にモジュールへの参照が解除されてしまう。

インストール (ホスト側)

sudo cp 8812au.ko "/lib/modules/$(uname -r)/kernel/drivers/net/wireless"
sudo depmod

上記のほか、カーネルアップデートをした際に自動でビルドするには DKMS を利用する必要がある。

詳細はリポジトリの READMEに書いてある。

build-essentialdkmsなどのパッケージを入れる必要があるため、今回は対応しないこととする。

(別の機会に Docker を利用した方法を試したい。)

ソースコードの確認

ここまででドングルは動作する状態にはなったが、製品への対応状況を確認するため、今回利用したリポジトリと APT リポジトリのソースコードを比較しつつ確認してみる。

ベンダー ID・プロダクト ID の確認

ソースコードを探るにあたり、製品の ID を確認する。

lsusb | grep -i wn
# > Bus 001 Device 013: ID 0bda:0823 Realtek Semiconductor Corp. WNPU583B
# > Bus 001 Device 012: ID 04bb:0952 I-O Data Device, Inc. WN-AC867U

0bda:082304bb:0952がベンダー ID(idVendor)とプロダクト ID(idProduct)の値のため、これを利用してソースコードを検索する。 ベンダー ID を含めるとヒット件数が多いため、プロダクト ID を利用して検索を行う。

今回利用したリポジトリのソースコード

https://github.com/gnab/rtl8812au.gitのソースコード内から関連する記述を確認する。

git grep -iP '0x(0823|0952)'
# > os_dep/linux/usb_intf.c: {USB_DEVICE(0x04BB, 0x0952),.driver_info = RTL8812}, /* I-O DATA - Edimax */
# > os_dep/linux/usb_intf.c: {USB_DEVICE(0x0bda, 0x0823),.driver_info = RTL8821}, /* I-O DATA - WNPU583B */

APT リポジトリのソースコード

ホスト環境の設定を変えたくなかったのでコンテナ環境でソースコードを取得する

# 何かしらエディタをインストール
apt install busybox

# deb-src のコメントアウトを解除する
busybox vi /etc/apt/sources.list
apt update

# 関連するパッケージを検索
apt search --names-only 'rtl88[21]{2}'
# > Sorting... Done
# > Full Text Search... Done
# > rtl8812au-dkms/jammy,jammy 4.3.8.12175.20140902+dfsg-0ubuntu15 all
# > dkms source for the r8812au network driver
# >
# > rtl8821ce-dkms/jammy,jammy 5.5.2.1-0ubuntu10 all
# > DKMS source for the Realtek 8821C PCIe Wi-Fi driver

上記のパッケージ検索結果からrtl8812au-dkmsrtl8821ce-dkmsを確認することにする。

# ソースコードのダウンロード
apt source rtl8812au-dkms

下記のメッセージが出てきたが、今回はapt sourceでダウンロードしたものを確認する。

Picking 'rtl8812au' as source package instead of 'rtl8812au-dkms'
NOTICE: 'rtl8812au' packaging is maintained in the 'Git' version control system at:
https://github.com/rsalveti/rtl8812au.git
Please use:
git clone https://github.com/rsalveti/rtl8812au.git
to retrieve the latest (possibly unreleased) updates to the package.

apt source rtl8821ce-dkms

下記のメッセージが出てきたが、こちらもapt sourceでダウンロードしたものを確認する。

Picking 'rtl8821ce' as source package instead of 'rtl8821ce-dkms'
NOTICE: 'rtl8821ce' packaging is maintained in the 'Git' version control system at:
https://git.launchpad.net/~canonical-hwe-team/ubuntu/+source/rtl8821ce-dkms/+git/rtl8821ce-dkms
Please use:
git clone https://git.launchpad.net/~canonical-hwe-team/ubuntu/+source/rtl8821ce-dkms/+git/rtl8821ce-dkms
to retrieve the latest (possibly unreleased) updates to the package.

ダウンロードしたソースコードから関連する記述を検索する。

# ダウンロードされたファイルの確認
ls -1
# > rtl8812au-4.3.8.12175.20140902+dfsg
# > rtl8812au_4.3.8.12175.20140902+dfsg-0ubuntu15.debian.tar.xz
# > rtl8812au_4.3.8.12175.20140902+dfsg-0ubuntu15.dsc
# > rtl8812au_4.3.8.12175.20140902+dfsg.orig.tar.gz
# > rtl8821ce-5.5.2.1
# > rtl8821ce_5.5.2.1-0ubuntu10.debian.tar.xz
# > rtl8821ce_5.5.2.1-0ubuntu10.dsc
# > rtl8821ce_5.5.2.1.orig.tar.gz

# 関連する記述を確認
find -name "*.c" -print0 | xargs -0 grep -iP '0x(0823|0952)'
# > ./rtl8812au-4.3.8.12175.20140902+dfsg/.pc/0009-usb_intf-extending-compatible-vendor-list.patch/os_dep/linux/usb_intf.c: {USB_DEVICE(0x04BB, 0x0952),.driver_info = RTL8812}, /* I-O DATA - Edimax */
# > ./rtl8812au-4.3.8.12175.20140902+dfsg/.pc/0004-Adding-additional-compatible-devices.patch/os_dep/linux/usb_intf.c: {USB_DEVICE(0x04BB, 0x0952),.driver_info = RTL8812}, /* I-O DATA - Edimax */
# > ./rtl8812au-4.3.8.12175.20140902+dfsg/os_dep/linux/usb_intf.c: {USB_DEVICE(0x04BB, 0x0952),.driver_info = RTL8812}, /* I-O DATA - Edimax *

依存パッケージが多く入れたくないため確認していないが、上記からの予想として、WN-AC867U であればrtl8812auのパッケージをインストールすれば利用できる可能性がある。

WNPU583B に関連する部分はヒットしないため動作するか不明。

(過去の経験では Kubuntu 20.04 において rtl8821ce-dkmsをインストールすることで Bluetooth だけは利用できた。)

· 約5分
ogumaru

概要

Raspberry Pi 4 を利用して LAN 内に Samba サーバを構築し、iPhone に標準でインストールされている「ファイル」アプリからの接続を行う

環境

項目内容
クライアント機種iPhone 8 Plus
クライアント OSiOS 15.6.1
サーバ機種Raspberry Pi 4 Model B

Raspberry Pi OS はバージョンがないらしいため下記で確認

(ベータ版で出た 64-bit の OS を入れた記憶がある)

uname -a
# > Linux raspberrypi 5.10.103-v8+ #1529 SMP PREEMPT Tue Mar 8 12:26:46 GMT 2022 aarch64 GNU/Linux
lsb_release -a
# > No LSB modules are available.
# > Distributor ID: Debian
# > Description: Debian GNU/Linux 10 (buster)
# > Release: 10
# > Codename: buster
samba --version
# > Version 4.9.5-Debian

準備

Samba パッケージ

sudo apt update
sudo apt install samba
# iOS や macOSでも利用する場合
sudo apt install samba-vfs-modules

ユーザ

ここはSamba - ArchWiki (wiki.archlinux.jp)を参考に設定した

# Sambaユーザの追加
sudo pdbedit -a "$(whoami)"

# `usershare path` で指定する`/var/lib/samba/usershares` にアクセスするため
# (所有者:グループ が root:sambashare になっている)
sudo gpasswd sambashare -a "$(whoami)"

グループ設定を反映させるため再ログインする

ファイアウォール

Firewalling Samba (www.samba.org)によると、許可するのは下記

プロトコルポート
UDP137
UDP138
TCP139
TCP445

ufwを利用していれば下記

# Samba のルールがあれば利用
sudo ufw app list | grep -i samba
sudo ufw allow samba

Samba の設定

グローバル設定ファイル

# 設定ファイルのバックアップ
sudo cp -a /etc/samba/smb.conf{,.$(date '+%Y-%m-%d_%H%M%S').bak}

# 下記差分を追記
sudoedit /etc/samba/smb.conf
[global]
+ usershare path = /var/lib/samba/usershares
+ # For supporting iOS / macOS
+ vfs objects = fruit streams_xattr
+ fruit:metadata = stream
+ fruit:model = MacSamba
+ fruit:posix_rename = yes
+ fruit:veto_appledouble = no
+ fruit:nfs_aces = no
+ fruit:wipe_intentionally_left_blank_rfork = yes
+ fruit:delete_empty_adfiles = yes

上記のvfsfruitの設定がないと、保存の際に「操作を完了できませんでした」「属性が見つかりません」のようなエラーメッセージが表示される

VFS 関連の設定内容については下記ページのものを利用した

Configure Samba to Work Better with Mac OS X - SambaWiki (wiki.samba.org)

共有設定ファイル

# 共有するディレクトリの作成
mkdir -p ~/share

# 共有設定ファイルの作成
net usershare add "share" ~/share/ "samba share" "$(whoami):f"

権限の設定については net (www.samba.org)などを参考に指定する

The definition of a user defined share acl is: "user:permission", where user is a valid username on the system and permission can be "F", "R", or "D". "F" stands for "full permissions", ie. read and write permissions. "D" stands for "deny" for a user, ie. prevent this user from accessing this share. "R" stands for "read only", ie. only allow read access to this share (no creation of new files or directories or writing to files).

設定の反映

sudo systemctl reload smbd.service

接続

mDNS で名前解決ができれば、同じネットワークにつないだ上で iOS の「ファイル」から

  1. [ブラウズ]
  2. 右上の丸で囲まれた三点(…)
  3. [サーバへ接続]
  4. raspberrypi.localなど
  5. [登録ユーザ] を選択
  6. Raspberry Pi のユーザ情報を入力

で接続できる

例えば写真は共有から「"ファイル"に保存」から上記フォルダを選択することで保存できる

当初 VFS 関連(vfsfruit)を設定しておらず、ここで保存ができずに困ってかなり時間を使った

パフォーマンスについて

1MB の画像をコピーするのに 体感で 1 秒程度

10MB の動画をコピーするのに 体感で 2 〜 3 秒程度

SSD を接続した USB ブートで利用しているため、Raspberry Pi 環境の中では比較的 I/O は早いはず

microSD 環境ではもう少し遅いかもしれない