ubuntu 24.04.1 設定メモ
2年に一度のUbuntu LTSリリースがやってまいりました。
Ubnutu 24.04 LTSは4月にリリースされたのですが、JapanRemixは結局なし、CUDAがまだ対応していない、24.04の最初はどうもおかしいということで、24.04.1が出るまでちょっと保留しておりました
そしてこのほど 24.04.1がアップデートされたため、ようやく24.04.1を新規で入れることにしました。
ちなみに、自分が確認した環境は以下です。
$ screenfetch
./+o+- xxxxx@xxxxxxx
yyyyy- -yyyyyy+ OS: Ubuntu 24.04 noble
://+//////-yyyyyyo Kernel: x86_64 Linux 6.8.0-41-generic
.++ .:/++++++/-.+sss/` Uptime: 1h 26m
.:++o: /++++++++/:--:/- Packages: 2139
o:+o+:++.`..```.-/oo+++++/ Shell: bash
.:+o:+o/. `+sssoo+/ Resolution: 6800x1440
.++/+:+oo+o:` /sssooo. DE: GNOME 46.0.1
/+++//+:`oo+o /::--:. WM: Mutter
\+/+o+++`o++o ++////. WM Theme: Adwaita
.++.o+++oo+:` /dddhhh. GTK Theme: Yaru-magenta-dark [GTK2/3]
.+.o+oo:. `oddhhhh+ Icon Theme: Yaru-magenta
\+.++o+o``-````.:ohdhhhhh+ Font: Ubuntu Sans 11
`:o+++ `ohhhhhhhhyo++os: Disk: 3.0T / 14T (23%)
.o:`.syhhhhhhh/.oo++o` CPU: 13th Gen Intel Core i7-13700 @ 24x 5.1GHz [32.0°C]
/osyyyyyyo++ooo+++/ GPU: NVIDIA GeForce RTX 4080
````` +oo+++o\: RAM: 4660MiB / 64056MiB
`oo++.
USB版のインストールイメージを作る
既にUbuntu22.04の人はインストールイメージは「ユーティリティ」-「ディスク」から簡単に作れます。 Windowsな人はrufusを使うのが良いかなと思います。
小ネタ:FreeDOSをUSBから起動する方法
古いマシンを復活させようとしてBIOSをアップデートしないといけなかったりする場合があったりするとWindowsからかDOSから起動しないといけないことって多々ありますよね。
そういう場合はFreeDOSを使えばUbuntuでもDOSの起動USBメモリを生成できます。
FreeDOSはここ
http://freedos.org/download/
から[FreeDOS 1.3 LiteUSB]をダウンロードすればOK。
そしてそれを適切な書き込みツール(ディスクとかRufusなど)で書けば動きます。楽ですね。
WindowsとUbuntuのデュアルブートで気をつけること
Windowsの「高速スタートアップ」は無効化しておきます。
合わせてBIOS(UEFI)設定で「Fast Boot」も無効化しておきます。
「SecureBoot」は有効で問題ありません。(Ubuntu 24.04は流石に対応しています)
WindowsとUbuntuのデュアルブートをする場合は、できるだけ別の物理ディスク(ストレージ)に入れておいたほうが無難です
一枚のM.2 SSDにWindows、もう一枚のM.2 SSDにUbuntuという感じです。
こうしておく利点は色々あるのですがWindowsUpdateがあった場合や今回のように22.04から24.04.1への更新するときなどに誤って別のOSを消してしまうとかの不測の事態を防ぐことができます。バックアップをとるのも物理ディスクの交換ですむたねかんたんですしね
あと、デュアルブートをしたい場合はインストール中にどのディスクにインストールするかどうかを選ぶ画面が出ますが、必ず手動でパーティションを設定する(一番下の選択肢)を選んで自力でやる必要があります。
なお、インストール中にブートローダの選択がありますが、ブートローダだけはは必ずWindows側ディスクのほうへ入れます(windowsが入っているディスクが/dev/nvme0なら、/dev/nvme0n1p1です。ここはUbuntu側からは/boot/efiとしてマウントされます)
インストールするときはインターネットが繋がるところで行う
インターネットの接続がないところでもインストール作業はできるのですが、インターネット接続がない場合、インストール後は英語設定になってしまうため特別な理由がなければインストール時にインターネット接続ができておくに越したことはないです
英語設定になっていたとしても「言語サポート」で設定のし直しはできます(ただしそこでインターネット接続が必要になります)
インストールするPCに固定IPを設定する場合に気をつけること
ルータのDHCPを起動させて、出来る限り接続しているPCにIPを割り振るようにしてください。
IPアドレスをどうしても変更したくない場合は、PCのネットワークデバイスのMACアドレスを調べて、ルータのDHCPに固定IPを割り振るように設定すればOKです。
一応インストール時に固定IPを設定出来るのですが、24.04ではネットワーク関連の管理が変わったのかNetplanとNetworkManagerの連携がうまくできていないようで、インストール後の最初の再起動の段階でネットワーク設定にあるはずのデバイス設定が出てこない&ネットワーク不通となって詰みます。。。
詰んでしまった場合でも対策はあって、/etc/netplan
以下にある90-NM-なんとか.yaml
という90なんとかとついているyamlファイルを全部削除してから再起動すると、再びネットワーク設定にネットワークデバイスが復活してきます。
しかし、ここで固定IPを設定してしまうとそのときは通信できるわけですが、その状態で安心して再起動とかしてしまうとまたネットが不通となってしまうので、ルータから出来る限りDHCPで割り振ってもらったほうが無難ということです
(※:自分は未検証ですが、もうNetworkManagerは使わずにUbuntuSeverでよく使われているNetplanのみでなんとか設定する方法も一応あるらしいです。。
というより24.04で管理方法が変わったのは、UbuntuServerではNetplanを以前から使っているのにUbuntuDesktopではNetplanを使わずNetworkManagerだけなのはおかしいということでこのようになったそうです。。。が今回のようにNetworkManagerとNetplanの連携がうまく行かないパターンもあるということです)
Hyper-V環境にインストールする場合
起動時にgrubを常に表示
grubが表示されずにいきなりログイン画面に行ってほしくない場合は/etc/default/grub
を編集する必要があります
grubは出来る限り表示させておいたほうが良くて、突然OSが起動しなくなったなどの場合のトラブルシューティングに役立ちます
/etc/default/grub
を以下のようにすればOK
#GRUB_TIMEOUT_STYLE=hidden
#GRUB_TIMEOUT=0
GRUB_TIMEOUT=10
GRUB_TIMEOUT_STYLE=menu
GRUB_HIDDEN_TIMEOUT_QUIET=false
編集したら
$ sudo update-grub
でgrubの編集を反映させます
なお、Windowsとのデュアルブート環境のときはすでにGrubの設定が上記のように配慮されています
Ubuntu 24.04.1 Serverの場合の固定IP設定
GUIが必要ないUbuntu 24.04.1 Serverの場合は仮想マシンで動かしたいときにどうしても固定IPを設定したいことがあるかと思います。
Ubuntu 24.04.1 Serverの場合はNetplanのみ動作しているので以下のようにします。
/etc/netplan/50-cloud-init.yaml
を50-cloud-init.yaml.org
とリネームして50-cloud-init.yaml.org
をコピペ
$ cd /etc/netplan
$ sudo mv 50-cloud-init.yaml 50-cloud-init.yaml.org
$ sudo cp 50-cloud-init.yaml.org 01-netcfg.yaml
- コピペした
01-netcfg.yaml
を編集。例では192.168.1.5を固定IPとして割り振るとします
network:
ethernets:
eth0:
dhcp4: false
addresses: [192.168.1.5/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [192.168.1.1]
dhcp6: false
version: 2
IPアドレスは、address
ではなくaddresses
ですのでご注意…
- 再度有効化
$ sudo chmod 01-netcfg.yaml
$ sudo netplan apply
何か文法的間違いがあればapplyの段階でエラーが出るので直せばOK
インストール後の基本セット
自分はインストール後にまずこれをしてとりあえず必要なものをインストールしています
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install build-essential cmake git gitk ssh gufw samba vim filezilla minicom mcomix gtkterm shutter vlc ffmpeg geany flatpak flex bison screenfetch htop apt-transport-https gnupg2 gnome-shell-extension-manager
【注意】リポジトリ情報を設定するsources.listの変更について
Ubuntu 22.04はaptコマンドで使うリポジトリ情報の参照元が/etc/apt/sources.listだったのですが、24.04からは/etc/apt/sources.list.d/ubuntu.sourcesに変わっているのでその辺り気をつける必要があります。
とは言ってもたいていの場合はここを直接書き換えることは無くて、/etc/apt/sources.list.d以下にファイルを置くとかはしていると思います。
もしUbuntu 22.04ベースの解説で/etc/apt/sources.listを直接書き換えるとかになっている場合は、/etc/apt/sources.list.d/ubuntu.sourcesに書かないといけない、もしくは、/etc/apt/sources.list.d以下にファイルを作るなど変更するなど、気をつけましょう
IMEをfcitx-5に変更する
というわけで切り替え方は以下
$ sudo apt install fcitx5-mozc
$ sudo im-config -n fcitx5
これをしたあと、「言語サポート」でfcitxに切り替えて、再起動でOKです。デフォルトではIME切り替えはCtrl+Spaceにもマッピングされているので、ボクのキーボードのような全角半角キーがついていない環境にも優しいですね
あと、突然IMEが起動してこなくなった場合はfcitx5がおなくなりになっている場合があるので、「Fcitx5設定」を起動させると「Fcitxが起動していません」みたいなメッセージが出るので「起動」を押してあげると復活します
Codecをまとめてインストール
動画のコーデック関連の話。Ubuntu18でもありましたね。
Ubuntuのデフォルトでは権利関係が微妙な(微妙にライセンスがオープンじゃなかったり)怪しいものは除外される運命だけど、これをすることによってインストール出来るというアレ。
但し、libavcodecが消えてしまう(その代り権利怪しいアレなバージョンが入る)
$ sudo apt install ubuntu-restricted-extras
あれとか言ってるけど、動作的には問題ないので心配しないでほしい。どう違うか?は以下の通り。
libavcodec - 権利がしっかりしたもの
libavcodec-extra - ubuntu-restricted-extrasで勝手に入る。権利怪しいもの
あと、コーデックがAV1の動画ファイルなどをTotem(付属のビデオプレーヤー)で再生したい場合は更に以下が必要です
$ sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-plugins-bad-apps
リカバリーモード(Recovery mode)への入り方
Ubuntuはごくまれにですがグラフィックドライバの更新失敗などなどで、通常のGUIログイン画面が出てこなかったり、そうでなくてもディスクの故障などでこれもやはり通常のGUIで操作ができなくなり困る場面は出てくると思います。
あとは、Nvidia系のグラフィックボードを入れたのだけどnouvauドライバが対応しておらずGUIにすら入れない状態ですね…
そういう場合はリカバリーモードで入って、rootシェルでなんとかして復旧させるということをします。
とりあえずリカバリーモードへの入り方とネットワークの活かし方は以下です。
1.Grubの画面で「Advanced options for Ubuntu」を選択して、「起動するLinuxバージョン名の後ろに(recovery mode)」のものを選択
2.しばらくするとメニュー画面が出るので「root」を選択
3.Ctrl+Dを押すとなんとか…という画面が出るけど、ここでリターンを押してrootシェルに入る
4. そのままではネットワークが動いておらず何もできんので、とりあえずip linkコマンドでLANインターフェイスの名前を見る(例だとeth0がそれ)
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
ここで「DOWN」になっているはずなので以下で復帰させます。
これでとりあえずネットワークとインターネットが使えるようになって、apt updateなどが使用可能になります
(これはDHCPがルータにある場合。ない場合はipコマンドでIPAddressを割り振ればOK)
# ip link set eth0 up
# dhclient eth0
# systemctl start systemd-resolved
(余談:昔はrecovery modeでは読み取り専用マウントにされてしまうので、改めて読み書き可にするためのremountをしないといけなかったけど、いつの間にかそれをしなくても良くなったようです)
ディスク(HDDやSSD)のクローンやディスクイメージを取りたい、どうにかディスクを復旧させたい場合
Linuxでのディスククローンの定番はdd
コマンドですが、dd
の欠点を直したddrescue
を使うのが良いです
以下でインストールできます
$ sudo apt install gddrescue
・コピー元にエラーがない場合
単にコピー元にディスクエラーがなくクローンする場合はコピー元が/dev/sda
、コピー先が/dev/sdb
の場合は、次のようにします
下手したら取り返しがつかないため、「コピー元」、「コピー先」の指定順を実行前に必ず再確認しましょう
$ sudo ddrescue -f -v /dev/sda /dev/sdb
・コピー元にエラーがあってどうにか救出しつつクローンをしたい場合
コピー元の/dev/sda
になんらかのエラーが発生しており、どうにか/dev/sdb
に移したい場合は次のようにします
下手したら取り返しがつかないため、「コピー元」、「コピー先」の指定順を実行前に必ず再確認しましょう
$ sudo ddrescue -f -n -v /dev/sda /dev/sdb ddlog.log
これでエラーが報告されなければめでたしめでたしですが、エラーが報告されてしまったときは続けて以下のようにコマンドを入力してください
$ sudo ddrescue -f -d -r1 -v /dev/sda /dev/sdb ddlog.log
-r
オプションは続く回数分だけエラーが発生したら読み直しをしてくれます。が、それだけHDDやSSDに負担がかかってしまい「最後の一撃」になりかねないのでよく考えて実施しましょう。
(ddrescueのマニュアルにはI/Oエラーが発生しているディスクにはおすすめしませんと書かれています)
-d
はディスクの読み取り時にキャッシュを使わずに必ずディスクへダイレクトアクセスをします。ダイレクトアクセスということで遅くなりますがエラーが出ているようなディスクの場合、キャッシュ経由で読むのは信頼性が無いためわりと重要です
ddlog.log
はログファイルで、これを作っておくと二回目のddrescue
コマンドのときに考慮してくれて、エラーが出ている箇所だけコピーを実施しようとします。
Windowsとのデュアルブート時にUbuntuを起動して終わらせたあと、Windowsを起動すると時間がズレる
これはWindowsとのデュアルブートをするときに出てくるFAQみたいなものです
Ubuntu(Linux)とWindowsではRTC(ハードウェアが覚えている時刻)の解釈が異なるために発生します。
Windowsの場合はRTCにかかれている時刻はローカルタイムであると(日本の場合ははRTC+9)として解釈します。
なので、自動時間同期が発動した瞬間にネットワークから取ってきたRTCに+9した値をハードウェアに書き込みます
他方、LinuxはハードウェアのRTCが覚えている値をそのまま解釈するため、自動時刻同期が動いた瞬間にネットワークから取ってきた時刻をそのままRTCに書き込みます。
というわけで、RTCの解釈方法がOSによって違うためこの現象は発生する…ということになります
この現象の補正方法は二種類あって、Windows側の解釈を変えるか、Linux側の解釈を変えるかの2つです
Windows側を変えるのは結構面倒なので、Ubuntu側のRTCの解釈を以下コマンドで変えます
$ sudo timedatectl set-local-rtc 1
set-local-rtc 1
とすると、Linux側はRTCの解釈をローカルタイムと認識します(つまりこれはRTC+9の値なんだなと認識する)
これをset-local-rtc 0
とするとLinux側はRTCの解釈を補正なしの値と認識します(RTCそのまま)
これを実行したあと、Windows側を起動して手動で時刻の同期をさせれば治ります
Flatpakのインストール
ubuntuはリリースバージョンでアプリのバージョンが固定されてしまうので、新しいアプリを使いたい人はなるべくflatpakかsnapでリリースされているものを使うのが良いとのこと
$ sudo apt install flatpak
$ sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
$ sudo apt install gnome-software-plugin-flatpak
これをしたあとで、gimpのページの
https://www.gimp.org/downloads/
にある[install flatpak GIMP]をクリックしてflatpakrefを開くとflatpak版gimpがインストールできる
もしくは「ソフトウェア」から検索できるアプリでflathub版を入れてもOK
なお、flatpakのアップデートは
$ flatpak update
でOK
flatpak系アプリの権限設定を変えたい
flatpakは便利なのですが権限設定がやりにくいというのがあります
どうにも動作が怪しい場合は権限関連を見直してみると良いです
(権限関連でうまく動かなかったりするとかあります)
権限設定するにはflatsealをflatpakから入れますもしくはコマンドから以下
$ flatpak install flatseal
その後、flatsealを起動するとアプリごとの権限設定ができます
最新のNvdiaグラフィックドライバのインストール
ubuntu 24.04.1では気の利いている事に、nvidiaのグラフィックボードを載せている場合はインストール時にnvidiaなどのサードパーティドライバをインストールするかどうかの選択が出てくるので、最初からNvidiaのドライバが適用された状態で起動します(インストールイメージにパッケージが入っているようで、ネットワークに接続しない状態でもインストールができました)
24.04.1を入れた状態でのドライバのバージョンは535.183.01
で、Ubuntu公式には最新とのことなのですが、最新の安定版は550.107.02
です。
例えばこんな感じでubuntu-drivers devices
で現在Ubuntuが認識しているNvidiaドライバの最新を問い合わせると以下のようになります。
$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002704sv00001462sd00005111bc03sc00i00
vendor : NVIDIA Corporation
model : AD103 [GeForce RTX 4080]
driver : nvidia-driver-535 - distro non-free recommended
driver : nvidia-driver-535-open - distro non-free
driver : nvidia-driver-535-server - distro non-free
driver : nvidia-driver-535-server-open - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
いつものようにここからsudo apt install nvidia-driver-バージョン
とすれば入れられますし、デフォルトの535でも問題ないといえばないのですが、何かしらの問題が出てしまった場合や、CUDAの開発用として新しい目のドライバを入れないと行けない場合、nvidiaから提供されている550をを入れたい場合や、新機能ブランチ版(560)を入れたい場合はNvidia謹製のレポジトリ追加を追加する必要があります。
以下のようにするとNvidia謹製のレポジトリ追加ができます。
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
$ sudo dpkg -i cuda-keyring_1.1-1_all.deb
$ sudo apt update
$ sudo apt upgrade
なお、システムにCUDAドライバなどを入れたい場合はこの操作は必須になります。
これを一度行った後で、再びubuntu-drivers devices
を行って最新のドライバを問い合わせると以下のようになります
$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002704sv00001462sd00005111bc03sc00i00
vendor : NVIDIA Corporation
model : AD103 [GeForce RTX 4080]
driver : nvidia-driver-555 - third-party non-free
driver : nvidia-driver-560-open - third-party non-free
driver : nvidia-driver-535-server-open - distro non-free
driver : nvidia-driver-560 - third-party non-free recommended
driver : nvidia-driver-535-open - distro non-free
driver : nvidia-driver-555-open - third-party non-free
driver : nvidia-driver-535-server - distro non-free
driver : nvidia-driver-550-open - third-party non-free
driver : nvidia-driver-550 - third-party non-free
driver : nvidia-driver-535 - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
あとはいつものようにインストールするドライバを選んで入れます。
ここで、nvidia-driver-560
系にrecommend(おすすめ)とされていますが、nvidia-driver-560
系とnvidia-driver-555
は新機能ブランチ版となるので、いわゆる新機能実験版で安定版ではないです。
(そんなに致命的な問題がでることはあまりないのですが、新機能版で割と頻繁にVerupもあるためソフトによっては時々NVENCが使えなくなったりします)
というわけで無難に安定版がほしいのであればnvidia-driver-550
系となります。
-open
はオープンソース版です。なお、nvidiaはLinux版ドライバに関しては今後オープンソース版のみにするという話もあります。
パフォーマンス的なClose版との違いはないようで、違いとしてはサスペンドと休止状態が対応していない(正確にはVRAMのデータがサスペンドと休止状態で消えるらしい?)っぽいので、それが気になる人はOpenと書かれていないバージョンを入れると良いと思います。
Close版との比較など、ベンチマーク結果→NVIDIA R550 Linux Driver’s Open Kernel Modules Performing Well On GeForce GPUs https://www.phoronix.com/review/nvidia-r550-open
# apt update
# apt upgrade
# apt install nvidia-driver-550-open
セキュアブートが有効な場合はUbuntuが認証していないドライバが入るので、新しいMOK(Machine Owner KEY)を作ってUEFIに登録する必要があります。。。ということでこんな画面が出てきます
「了解」を押すと、パスワードを入力画面が出ます。8文字以上12文字以内のようなので適当に決めます。(なお、Ubuntuのログインパスワードではない)
このパスワードはシステムを再起動した後に再度聞いてくるのでとりあえず覚えておきます
無事インストールできたら再起動します。
以前は再起動の前にupdate-initramfs -u
をする必要があったのですが最近ではしなくてもドライバインストール中に勝手にやってくれます。
で、セキュアブートで新しいMOKを登録した場合は再起動するときに以下のような青い画面が出てきます
ここでEnroll MOK
を選びます。ここでContinue boot
を選んでしまうとドライバインストール前のUbunutが起動するか、そもそもUbuntu起動に失敗してしまうので注意
次にContinueを選択
Enrollするかを聞いてくるのでYesを選択
あとはパスワード入力画面となるので、ドライバインストール時に設定したパスワードを入れるとOKです。
なお、flatpakを入れている人は、Updateしたあとは
$ sudo flatpak update
も忘れずに行ってください。
handbrakeでNVENCが使えない
古いPCにUbuntuを入れる活用法はあるあるだけど、nvencを使ってhanbbrakeでH.264やH.265のエンコードしたい場合はドライバのバージョンが390系だったりするとだめ。
ドライバのバージョンが5xx系だと使用可能。
ここを見て自分が使っているビデオボードがエンコードをサポートしているGPUかまず確認しよう。
https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new
これはOBSでnvencを使ってハードウェアエンコードしながら配信したい場合も同じなので注意。
gnome-shell拡張の導入 (gnome-extension-manager)
Ubuntuのデフォルトではデスクトップの細かいカスタマイズができません
gnome-shell拡張はこれを拡張してくれるやつで、入れておくと使い勝手が格段に向上するので入れておいたほうが吉です。
$ sudo apt install gnome-shell-extension-manager
これをしてから、extension-manager
で探して起動するとGUIが出てくると思います。
この中からオススメは以下です
Allow Locked Remote Desktop
Ubunutの標準のデスクトップ共有を使うと、画面をロックしたりログアウトするとリモートデスクトップが完全停止してしまい
再び許可しないと受付してくれないのでそれをどうにかする拡張。
したがって、標準のまま共有を使うにはほぼ必須級だがセキュリティは弱くなるので考えてから導入
Apps Menu
アクティビティの横にアプリケーションメニューできて、そこからアプリを選べる
Vitals
通知バーにCPU温度とかシステムの状況を細かく表示できる
NVIDIA GPU State Toolについてはバージョンが古いので対応していないっぽい
しかし対応する用意はあるとのことなので待ってたらそのうち出てくる可能性はあります
参照:→
https://github.com/ethanwharris/gnome-nvidia-extension/issues/212
が、なんと今回はVitals
のバージョンが上がって実はVitals
からもGPUの各種データ(温度や使用率や使用VRAMやらGPUコアの動作周波数)も非常に事細かく取ることができます。もうVitals
だけでええかな。。。という勢いですね
google-chromeのインストール
以下のコマンドを打てばOK
$ sudo apt install apt-transport-https gnupg2
$ wget -O- https://dl.google.com/linux/linux_signing_key.pub | gpg --dearmor | sudo tee /usr/share/keyrings/google-chrome.gpg
$ echo deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main | sudo tee /etc/apt/sources.list.d/google-chrome.list
$ sudo apt update
$ sudo apt install google-chrome-stable
vscodeのインストール
以下のコマンドを打てばOK
$ sudo apt install apt-transport-https gnupg2
$ wget -O- https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor | sudo tee /usr/share/keyrings/vscode.gpg
$ echo deb [arch=amd64 signed-by=/usr/share/keyrings/vscode.gpg] https://packages.microsoft.com/repos/vscode stable main | sudo tee /etc/apt/sources.list.d/vscode.list
$ sudo apt update
$ sudo apt install code
sshとsshd
sshが無いと色々めんどくさいので早めにやっておく。
この辺はUbuntu22.04と同じ。
ub2404: $ sudo apt install ssh
まずはクライアント側(接続側)の/home/xxx/.ssh/config
は以下のようにしておく
Host *
PreferredAuthentications password
TCPKeepAlive yes
Match host * exec "gpg-connect-agent UPDATESTARTUPTTY /bye"
これはデフォルトのAnyなサーバでsshで入るときは「パスワード認証」を使いますよという意味です。
インストール直後は.sshが作られていない場合があるので、sshで入ったあとで自分で自分のサーバに入ります
client:$ ssh 192.168.x.xxx
(Pass聞いてくる)
ub2404:$ ssh localhost
(FingerPrint合ってるかどうか聞いてくるのでYと答える)
(Pass聞いてくる)
ub2404:$ exit
クライアント側(もしあれば)で、ed25519な鍵生成
client:$ ssh-keygen -t ed25519
何処に出力するか聞いてくるので、設定して鍵ファイルを作る
インストール先に公開鍵を転送
client:$ scp (作った秘密鍵).pub (転送先サーバIP):/home/xxx/.ssh/authorized_keys
転送先で鍵設定
ub2404:$ chmod 600 .ssh/authorized_keys
セキュリティを高めるために、転送先のsshd_configを触って鍵オンリーにしてパスワードログインは禁止。
/etc/ssh/sshd_config
を以下のように変更
PubkeyAuthentication yes
PasswordAuthentication no
ここがubuntu24.04 serverの沼ポイントですが、ubuntu24.04 serverの場合は/etc/ssh/sshd_config.d/50-cloud-init.conf
にもPasswordAuthentication
の設定があって、せっかく無効にしていたパスワード認証を有効にしてしまいます…
もしこれがある場合は忘れず以下のように頭に#をつけてコメントアウトします
#PasswordAuthentication yes
最後に、sshdリスタート
ub2404:$ systemctl restart ssh
最後にsshコマンドで毎回鍵やらを指定するのはめんどくさいので、/home/xxx/.ssh/config
を編集します。
Host ubuntuserver
User xxx
Hostname 192.168.x.xxx
Port 22
Identityfile ~/.ssh/作った秘密鍵を指定
IdentitiesOnly yes
PreferredAuthentications publickey
こうしておくと、次にsshで入りたいときに
client:$ ssh ubuntuserver
とだけで入れるので楽です
Samba設定
まず、Sambaをインストール
$ sudo apt install samba
次に/etc/samba/smb.conf
に追記
[ユーザ名]
path = /home/ユーザ名
writeable = yes
browseable = no
valid users = ユーザ名
browseableは必要に応じて変える
sambaのパスワードをセットする
$ sudo smbpasswd -a ユーザ名
(-a を入れないとエラーになる)
最後にsmbdリスタート
$ sudo systemctl restart smbd
メニューやランチャーに登録されていないアプリやコマンドを登録して使えるようにする
自作のGUIアプリとか、githubから持ってきて自分でビルドしたGUIアプリなんかはコンソールから実行しないといけないのですが、Ubuntuの標準ではそういったアプリをランチャーに登録していく機能がないので頻繁に実用していく場合はちょっと面倒な場合があります
一応対処法はあって、こういう場合は前まではdesktopエントリの設定ファイルを作ってエディタなどで編集する必要がありましたが、alacarte
を入れると簡単にGUIで編集できるようになりました
しかしまあ標準機能では入ってないのが謎ですね
$ sudo apt install alacarte
あとはランチャーに「メイン・メニュー」というアプリが登録されるのでそれを実行して追加していけば良いかと思います
これ何気に必須級かもしれませんねぇ。。。
なおシェルスクリプトだけのものも登録していけるのでその点でも便利です
minicomなどで使用するターミナルの権限変更等
/dev/ttyS
なんとかのグループがdialoutになっているのでそれを利用する
$ sudo gpasswd -a ユーザ名 dialout
$ sudo chown root:dialout /etc/minicom
$ sudo chmod 775 /etc/minicom
詳細
https://qiita.com/chromabox/items/306386a886bee4fb7810
なお、デフォルトではFT23X系のチップを使用したUSBシリアル変換を接続すると、しばらく間をおいて途中で勝手に切られてしまう….
このときのdmesgはこんな感じ
[ 6114.316364] usb 1-3.4: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 6.00
[ 6114.316374] usb 1-3.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 6114.316378] usb 1-3.4: Product: FT232R USB UART
[ 6114.316380] usb 1-3.4: Manufacturer: FTDI
[ 6114.316383] usb 1-3.4: SerialNumber: XXXXXXXX
[ 6114.319137] ftdi_sio 1-3.4:1.0: FTDI USB Serial Device converter detected
[ 6114.319181] usb 1-3.4: Detected FT232RL
[ 6114.320031] usb 1-3.4: FTDI USB Serial Device converter now attached to ttyUSB0
[ 6131.973998] usb 1-3.4: usbfs: interface 0 claimed by ftdi_sio while 'brltty' sets config #1
[ 6131.975270] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 6131.975311] ftdi_sio 1-3.4:1.0: device disconnected
[ 6572.726767] usb 1-3.4: USB disconnect, device number 9
調べるとどうやら「brltty」という点字関連のアクセシビリティのものが悪さをしているので、以下を実行してbrlttyをアンインストールするとよい
$ sudo apt remove brltty
gdm3でWaylandを無効にする
Ubuntu24.04もデフォルトではWaylandを使おうとする(が、Nvidiaのドライバが入っているとデフォルトでX.orgでした)。
しかし、barrierやteamviewer等色々とwaylandに対応していないアプリはまだあるので、これらを動かすときはOFFにしておいたほうが無難。
/etc/gdm3/custom.conf
を以下のように、WaylandEnable=falseにする。
[daemon]
# Uncoment the line below to force the login screen to use Xorg
WaylandEnable=false
RDPやリモートログインなどについて
Ubuntu24.04のリモートログイン設定は Desktop Shareing
と リモートログイン
の2種類あるのですが、触ってみたところ以下のような感じです
・Desktop Shareing
Ubuntu 22.04であったような現在のセッションの共有
画面をロックしたり接続を切断するとデスクトップ共有が切れてしまい、共有元から再度許可をしないと接続できない
これを防ぐにはextension-manager
を入れてからAllow Locked Remote Desktop
を入れるとOK
既にxorgで入っている場合はxorgになっているようです。
・リモートログイン
従来のxrdpのような使い方をする
但し、既に物理マシンでログインされている場合はリモートからのログインは不可で、一度ログアウトしてもらわないといけない(つまり画面共有は不可)
あと、この「リモートログイン」の場合はどうも強制的にwaylandになるようで、既に物理マシンにてXorgで入っている場合はうまく切れなかったりします。
Golangのインストール
以下でOK
$ sudo apt install golang-go
ubuntu 24.04のPython環境について
ubuntu 24.04はPython環境が3.12.3になってしまっていて、つまりこれはvenvも3.12.3環境ということです。
3.12.3環境だとStablediffusion系で色々と支障がでてしまい、A1111-webuiもまともに動きません…
(A1111-webuiは今もなお3.10.6推奨です。(3.11.xでも動くらしい)。理由はA1111が主に使用しているPyTorchのバージョンに関連しています)
ということでA1111-WebUIが動く3.10環境をインストールしないといけないのですが、Ubuntu24.04の通常では3.12環境しか入らないのでそう簡単にはいかないというのがあります。。。
このような場合はpyenvを入れてpythonのバージョン切り替えを行うとシステムで使用するpythonと他のpythonのバージョンを切り替えて使用できトラブルなく共存が可能です。
・pyenvのインストール方法
pyenvは各バージョンのPythonインストール時にPythonのビルドもするっぽいのでビルド用のライブラリなどなどが必要です
$ sudo apt install git build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
pyenvとその周辺をgithubから取って着ます
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
$ git clone https://github.com/pyenv/pyenv-update.git ~/.pyenv/plugins/pyenv-update
これで、ユーザのホームディレクトリの.pyenv
に必要なものが入ります
その後githubのpyenvの説明通りに.bashrc
に追記します
以下のコマンドでも追記できます
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
(環境によっては.profileにも書く必要はあるかもしれません。)
ちなみにこれを行った後の.bashrcは次のようになります(最終行の3行が↑のコマンドで追記した追加部分です)
...
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
これをした後で一旦ログアウトするかもしくは
$ source ~/.bashrc
として今行った環境変数設定をシェルに反映させまます
・pyenvに別のpythonバージョンをインストール
例題としてUbuntu 22.04は3.10.12なので、ubuntu 22.04のPython環境を再現したい場合は3.10.12を入れる手順は以下です
$ pyenv install 3.10.12
指定バージョンがビルドされて~/.pyenv
以下にインストールされます。
なお、この状態ではまだシステムは変わっていません。単にビルドしただけです。
$ python3 --version
Python 3.12.3
$ python --version
pyenv: python: command not found
The `python' command exists in these Python versions:
3.10.12
Note: See 'pyenv help global' for tips on allowing both
python2 and python3 to be found.
なお、特定バージョンのPythonをアンインストールする場合は以下でOKです。
$ pyenv uninstall 3.10.12
・使用するPythonのバージョンを切り替えする
現在開いているシェルセッションだけに適用する場合は次のようにします
$ pyenv shell 3.10.12
ユーザ全体設定として切り替える場合は以下
$ pyenv global 3.10.12
なお、システムのpythonに戻したい場合はバージョン番号の部分をsystem
にすればOKです。
例:
$ pyenv shell 3.10.12
$ python --version
Python 3.10.12
$ python3 --version
Python 3.10.12
$ pyenv version
3.10.12 (set by PYENV_VERSION environment variable)
$ pyenv shell system
$ python --version
pyenv: python: command not found
The `python' command exists in these Python versions:
3.10.12
Note: See 'pyenv help global' for tips on allowing both
python2 and python3 to be found.
$ python3 --version
Python 3.12.3
$ pyenv version
system (set by PYENV_VERSION environment variable)
UbuntuではPythonがシステムで以外なところで使用されていたりするので pyenv global
は出来るだけせずにpythonを使うときは逐一pyenv shell
をしたほうがいいかもしれません。
・venv環境を用意する場合
pyenvを使って特定のPythonバージョンのvenvを使う場合は次のようにします。
$ mkdir pytest
$ cd pytest
$ pyenv shell 3.10.12
$ python --version
Python 3.10.12
$ python -m venv venv
$ source venv/bin/activate
(venv) $
(venv) $ python --version
Python 3.10.12
なお、一度venv環境を建ててしまえば他のpyenv shell
を実行していないターミナル(またはシェル)でvenv/bin/activate
を実行してもpythonのバージョンはシステムのものとはならずvenvをactivateしたバージョン…つまりpyenvで切り替えたものとなります。
つまりこうなってシンボリックリンクが張られているから大丈夫というわけです。
~/ptest/venv/bin$ ll
合計 44
drwxrwxr-x 2 XXX XXX 4096 5月 17 15:21 ./
drwxrwxr-x 5 XXX XXX 4096 5月 17 15:21 ../
-rw-r--r-- 1 XXX XXX 9033 5月 17 15:21 Activate.ps1
-rw-r--r-- 1 XXX XXX 1987 5月 17 15:21 activate
-rw-r--r-- 1 XXX XXX 913 5月 17 15:21 activate.csh
-rw-r--r-- 1 XXX XXX 2193 5月 17 15:21 activate.fish
-rwxrwxr-x 1 XXX XXX 236 5月 17 15:21 pip*
-rwxrwxr-x 1 XXX XXX 236 5月 17 15:21 pip3*
-rwxrwxr-x 1 XXX XXX 236 5月 17 15:21 pip3.10*
lrwxrwxrwx 1 XXX XXX 44 5月 17 15:21 python -> /home/xxx/.pyenv/versions/3.10.12/bin/python*
lrwxrwxrwx 1 XXX XXX 6 5月 17 15:21 python3 -> python*
lrwxrwxrwx 1 XXX XXX 6 5月 17 15:21 python3.10 -> python*
ただまあ心配性なヒトは pyenv shell
を実行してからまたactivateしたほうがいいかもしれませんね。
あと、pyenv shell
コマンドはシェルスクリプト内部では使えないのでシェルスクリプト内で使う場合は次のようにします
#!/bin/bash
# PYENV_VERSIONを環境変数に設定することでpyenv shell 3.10.6を実行したのと同じことになる
export PYENV_VERSION=3.10.6
python --version
unset PYENV_VERSION
# PYENV_VERSIONを空にしたので、これはエラーになる
python --version
つまり、export PYENV_VERSION=バージョン
がpyenv shell
と同じ意味合いになるということです
参考:
Ubuntu 24.04 LTS なので Ubuntu Budgie を使う
https://qiita.com/tetutaro/items/594629004f73c182b6ff
Ubuntuにpyenvをインストールする
https://qiita.com/middle_aged_rookie_programmer/items/0eb574e92a52c923e7ec
scrcpyのインストール
Android端末の画面をそのままコピーしてUbuntu上で操作できるようにするツール。かなり便利。
snap版のほうが新しいので、例によってsnap版のをインストールすると良い(権限設定は忘れずに)
また、Android端末側はUSBデバッグを有効にするのと、初回接続時はこのPCからの接続を許可するか?の問答があるので設定をすること。
$ sudo snap install scrcpy
OBSのインストール
例によってflatpak版をインストール
1.公式からFlatpakをダウンロード
2.ファイルマネージャー等で開く
3.プラグインも全部入れる
4.普通に起動
Webカメラが動作できて録画できることまでは確認。ただし配信は未確認(TwichかTwitterでの配信で問題ある環境があるとか?)
v4l2関連でエラーが出るかもしれないらしい(自分の環境では出ず)
その時はこれをすると良いとのこと
$ apt install v4l-utils libv4l-dev
barrierについて
wayland環境は未対応なので注意すること。よって、gdm3のwaylandは外しておくこと。
xorg環境でないと動きません。
Ubuntuに入っている2.4系でいけました
$ sudo apt install barrier
barriercの自動実行について
電源投入時にBarriercも自動実行させたいときはgdm3の設定が必要になる。
lightdmのときと違い、gdm3の設定はなかなかに面倒
なお、各種設定をする前に一度普通にbarrierを起動して最初の環境設定はしておかないといけないようですさらに以下設定例は--disable-crypto
をつけて暗号化無効にしているので、暗号化有効の場合はコマンドが異なるので注意
参考:
http://masaoo.blogspot.com/2021/07/ubuntu-2004-gdm-synergyc.html
/usr/share/gdm/greeter/autostart/barrierc.desktop
を新規作成
[Desktop Entry]
Type=Application
Name=barrierc
Exec=/usr/bin/barrierc -f --no-tray --debug INFO --name サーバ名 --disable-crypto [サーバIP]:ポート番号
NoDisplay=true
X-GNOME-AutoRestart=true
$ cd /etc/gdm3/PostLogin
$ sudo cp Default.sample Default
/etc/gdm3/PostLogin/Default
を編集
#!/bin/sh
#
# Note: this is a sample and will not be run as is. Change the name of this
# file to <gdmconfdir>/PostLogin/Default for this script to be run. This
# script will be run before any setup is run on behalf of the user and is
# useful if you for example need to do some setup to create a home directory
# for the user or something like that. $HOME, $LOGIN and such will all be
# set appropriately and this script is run as root.
killall barrierc
/etc/gdm3/PostSession/Default
を編集
#!/bin/sh
/usr/bin/killall barrierc
while[ $(pgrep -x barrierc) ]; do sleep 0.1; done
xauthfile=$(ps aux |grep Xauth | grep '^root' | grep -oP '\-auth \K[\w/]+')
export DISPLAY=:0
export XAUTHORITY=${xauthfile}
/usr/bin/barrierc -f --no-tray --debug INFO --name サーバ名 --disable-crypto [サーバIP]:ポート番号
exit 0
ログイン後に自動起動させたいので以下のようにする
$ cd ~/
$ mkdir bin
$ cd bin
$ touch start-barrierc.sh
$ chmod 775 start-barrierc.sh
start-barrierc.sh
を編集
#!/bin/sh
/usr/bin/killall barrierc
while [ $(pgrep -x barrierc) ]; do sleep 0.1; done
/usr/bin/barrierc -f --no-tray --debug INFO --name サーバ名 --disable-crypto [サーバIP]:ポート番号
あとは、このstart-barrierc.sh
をUbuntuの「Startup Applications」(システムツールの自動起動するアプリケーション
、またはStartup Applications
)で指定してあげればOK
hugoのインストール
最新が0.133.1なので最新をインストールする。
※前提条件:Golangを入れておくこと
0.すでにHugoを入れてしまっている場合はアンインストール
$ sudo apt remove hugo
1.ここから最新のdebを落とす(extend付きが良い)
https://github.com/gohugoio/hugo/releases/
2.以下コマンドでインストール。/usr/localにインストールされる
$ sudo dpkg -i ./hugo_extended_0.133.1_linux-amd64.deb
3.確認
$ hugo version
hugo v0.133.1-47d00202e7e61769ce4d14691e43b27852c9cce4+extended linux/amd64 BuildDate=2024-08-26T13:58:46Z VendorInfo=gohugoio
$ which hugo
/usr/local/bin/hugo
ファイル単位での完全消去
消す前に3度ランダムデータを書いてから消すあれ
rmの変わりにshredを使うのもいいが事故ると困るので「File Shredder」を使うと良い。
Flatpakでのみ存在しているのでflatpakをセットアップの後、アプリセンターから「Shredder」を検索してインストール。
ディスクの完全消去
Ubuntuに限らずLinuxにはcoreutilsにshredというコマンドがある。
NSA方式(3度ランダムデータ書く)でディスクを完全消去ができる
$ sudo shred -uvz <ファイルシステム名>
全領域に対して3回ランダムデータを書くのでかなり時間がかかる。
実施の際は色々確認した上で、UbuntuのLiveUSBにも入っているのでLiveUSBからやったほうがいいかもしれない。
UEFIが有効になっているようなPCでBIOS画面に入りたい
UEFIなPCにUbuntuを入れて電源を入れるとUEFI BIOSの設定によっては間髪入れずOS起動の画面になり、grubを出さないように設定している場合はgrubからUEFI画面に入ることもできないため、一体どうやってBIOS設定画面に入るんだこれみたいな感じになり途方に暮れますがそんなときはこれをすると良いそうな
$ sudo systemctl reboot --firmware-setup
これを実行すると再起動して、すぐさまUEFIなBIOSに入れます。(最近のWindowsで言うところの[システム]→[回復]からの[トラブルシューティング]のあれみたいなもんですな)
めでたしめでたし。
(なお、poweroffコマンドもrebootコマンドも実体はsystemctlだったりします)
Stable Diffusion Web UI(AUTOMATIC1111,A1111)を動かす
画像生成AIのアレです。
最近何かと騒がしているStable Diffusionですが、素の実装ではコマンドラインだけだったり簡単には動かしにくいものになっています。
ということでフロントエンドをかぶせて、ブラウザ上から実行できあたかもGUIアプリとして利用できるようにしたのが、Stable Diffusion Web UI(AUTOMATIC1111)となります。
ubuntu 24.04ではA1111が使用しているPythonのバージョンが古いものが必要なため、ここが鬼門になります。
以下、順を追って説明します
GPU用にnvidiaのドライバをインストール(RTX30xxや40xxの場合)
Ubuntuのインストール時にNvidiaなどのサードパーティ用ドライバをインストールするを選択していれば、特に何もすることはなくNvidiaのドライバが当たるのでそのままで問題ないです。
もし入っていなければ「追加のドライバー」で出てくる最新のドライバーでOKです。
「nouveau」ドライバでは流石に動かないので気をつけましょう
必要なパッケージをインストール
以下コマンドで必要なものをインストールします。git
は言わずもがなですが、google-perftools
はメモリリーク避けです
$ sudo apt install git google-perftools
A1111-WebUIをGithubから取得
以下コマンドでCloneします
$ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
pyenv類のインストールをしてPython 3.10.6の環境を用意する
Ubuntu 22.04のときはvenvがあれば特に何もしなくても動かすことができたのですが、Ubuntu 24.04になってからUbuntuで使用しているPythonのバージョンが3.12系列になってしまいました。
A1111-WebUIのトラブルシューティングのページには、無慈悲にもこんなことが書かれています
The program is tested to work on Python 3.10.6. Don’t use other versions unless you are looking for trouble.
はい、太文字です。3.10.6以外はサポートしないぞという強い気持ちが感じ取られたかと思います
というわけで、何が何でも3.10.6で動かさないといけないようです。(ubuntu22.04は3.10.12でサブマイナーが違うけど一応動いていた)
すでに「ubuntu 24.04のPython環境について」にUbuntu 24.04にPython3.10.6をシステムに影響を与えることなく共存させる方法を書いていますが、検索でここだけを見ている人のために、改めて手順をイチから書きたいと思います。
あと無理やりPythonの3.10.6を入れるのは絶対にだめです。PythonはUbuntuのシステムでも大いに利用しており、勝手にシステムが使用しているPythonを消したり、バージョンを変えると色んな所に影響が出てしまい最悪Ubuntuの再インストール行きになります。。。
これには複数のPythonバージョンを共存出来るpyenv
というツールを入れます。
以下コマンドを入れてpyenvに必要なパッケージをインストールします
$ sudo apt install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
pyenvとその周辺をgithubから取って着ます
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
$ git clone https://github.com/pyenv/pyenv-update.git ~/.pyenv/plugins/pyenv-update
これで、ユーザのホームディレクトリの.pyenv
に必要なものが入ります
その後githubのpyenvの説明通りに.bashrc
に追記します
以下のコマンドをそのまま入力しても.bashrc
に追記できます
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
(環境によっては.profileにも書く必要はあるかもしれません。)
ちなみにこれを行った後の.bashrcは次のようになります(最終行の3行が↑のコマンドで追記した追加部分です)
...
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
これをした後で一旦ログアウトするか再起動してください。その後、以下コマンドでPythonの3.10.6
をインストール
$ pyenv install 3.10.6
指定バージョンがビルドされて~/.pyenv
以下にインストールされます。
なお、この状態ではまだ使えず単にビルドしただけなので次のように言われてしまいます
$ python --version
pyenv: python: command not found
The `python' command exists in these Python versions:
3.10.6
Note: See 'pyenv help global' for tips on allowing both
python2 and python3 to be found.
$
なので、次のpyenv shell
コマンドで使えるかどうか確認します
$ pyenv shell 3.10.6
$ python --version
Python 3.10.6
無事にPython 3.10.6が動くようになりました。なお、pyenv shell
はこのシェル(コマンドウィンドウ)だけで動作させることができるpythonを指定することができます。
(pyenv global
でそのユーザだけを変えることもできるのですが、UbuntuではPythonがシステムで以外なところで使用されていたりするのでpyenv global
は出来るだけせずに古いpythonを使うときは逐一pyenv shell
をしたほうが無難です)
ですが、今回はあくまで動作確認用です。
pyenv shell
は使わず、webui-user.shを編集する方法を使います。
A1111-webUIのwebui-user.shを編集
webui-user.sh
の頭に以下を追記します
# pyenv version (= pyenv shell 3.10.6)
export PYENV_VERSION=3.10.6
これは内容的にpyenv shell 3.10.6
とやってることは同じです。
つまり、毎回シェルを開いてA1111 webuiを起動するときにpyenv shell 3.10.6
と打たなくても済むようになります。
参考→Is there a preferred way to use pyenv in a shell script? #492
webuiを実行
ここまでできたら
$ cd stable-diffusion-webui
$ ./webui.sh --listen --port 7860 --allow-code --xformers --enable-insecure-extension-access --api
これでpytorchなど必要なものがインストールされ、 http://0.0.0.0:7860 に接続すればWebUIの画面が出ます。
ComfyUIを動かす
画像生成AIのアレその2です。
ローカル画像生成AI界隈(?)で定番のアプリはおおよそAutomatic 1111 WebUIとComfyUIで二分しており、片割れのほうになります
Automatic 1111(以後A1111とします)がダイアログのようなページのような普通に考えそうなGUIに対して、ComfyUIは機能ごとに箱があってそれらに線をつなげて(ノード)実現していくというような、よくあるノードベースのGUIになっています。
ノードベースということで、やや上級者向けになっています。
PythonでDiffuserを直接触って実行することを考えるとノードをGUIでつなげて色んな機能を実現できるわけで、生成が極まってくるとこちらのほうが良い…ということもあり、生成AIの仕組みの学習用途だとこちらのほうがいいのかもしれません。
ノードをプログラミングでいう「関数」と例えると、実質Stablediffusion用のノーコードツールとして捉えることができるかなと思います。
インストール手順は以下のとおりです(以下はGPUがnvidiaの場合)
ubuntu 24.04の標準であるPython 3.12の環境でも動いているので、A1111のようなPython 3.10環境を入れる複雑な手段を使わなくても良いです
ただ、venvの環境は最低でも作っておいたほうが無難です
-
GPU用にnvidiaのドライバを入れます。
この辺はA1111と同じなので略 -
Python類を入れる
最低でもvenvは必要なので入れておきます
$ sudo apt install python3-pip python3-venv
- ComfyUIのソースをgithubから取ってくる
$ git clone https://github.com/comfyanonymous/ComfyUI.git
ComfyUIはA1111とは違い常に最新版を使うことが推奨されています
なにか問題があれば自分でgitを使って手戻りしないと行けないかもしれませんが、そのあたりはきっちり管理されてるようで基本そんなことは無いかなといった感じです
- venv環境の設定と依存パッケージをvenv環境に入れる
A1111はこの辺を自動でやってくれますが、ComfyUIは自分でする必要があります。以下のようにするとOK
$ cd ComfyUI
$ python3 -m venv ./venv
$ source venv/bin/activate
$ pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu121
$ pip install -r requirements.txt
$ deactivate
まずvenvの環境をComfyUI/venvに作ってそこにComfyUIで使うためだけのPytorchなど色々入れています。
venvの環境で行うため、ホストUbuntuの環境を汚さなくてすみます。
UbuntuはPythonで他のアプリなんかにも使われていることが結構あるので、野良のものを入れる場合はできるだけvenv環境下でやったほうがいいでしょう。
venv環境から抜ける場合はdeactivate
で抜けます。
- 実行
venv環境に入ってから実行です。A1111だとあちらが用意してくれているシェルスクリプトで一発で動きますが、ComfyUIはひと手間かける必要があります
$ cd ComfyUI
$ source venv/bin/activate
$ python main.py --listen
これで http://0.0.0.0:8188 に接続すればComfyUIの画面が出ます。
入れている拡張機能によってはもしかしたらPython 3.12ではその拡張機能だけは動かないかもしれません。その場合はpyenv
を使う方法で3.10に落とす必要があるかもしれませんね
・拡張機能マネージャ(ComfyUI-Manager)の入れ方
ワークフロー(ノードのつなぎかたのレシピなど)は公開されているのですが、たいていの場合はなんらかの拡張機能が使われていてそのままでは使えないパターンが多いです。
人のワークフローから使用されている拡張機能を探してgit cloneで取ってきて…となるとかなり面倒な作業になるのでComfyUI用の拡張機能マネージャこと「ComfyUI-Manager」を入れることが推奨されています。
以下手順で入れます
$ cd ComfyUI/custom_nodes
$ git clone https://github.com/ltdrdata/ComfyUI-Manager.git
Cloneできたら、ComfyUIをCtrl+Cなんかで終了させて再起動します。
画面右端のバーに「Manager」の項目ができるのでそこから拡張機能をインストールしたり、足りない拡張機能をインストールすることができます。