nvidia関連のドライバーが依存の問題でアップデートできない時の解決法

2023年11月9日に普通にアップデートしたら以下の問題が発生しました。
環境はUbuntu 22.04です。

$ sudo apt update
---(中略)---
これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
 nvidia-dkms-535 : 依存: nvidia-kernel-common-535 (= 535.129.03-0ubuntu1) しかし、535.129.03-0ubuntu0.22.04.1 はインストールされています
 nvidia-driver-535 : 依存: nvidia-compute-utils-535 (= 535.129.03-0ubuntu1) しかし、535.129.03-0ubuntu0.22.04.1 はインストールされています
                     推奨: libnvidia-gl-535:i386 (= 535.129.03-0ubuntu1)
E: 未解決の依存関係です。'apt --fix-broken install' を実行してみてください (または解法を明示してください)。

nvidia-dkms-535 が nvidia-kernel-common-535 に依存しているとあります。
よくみると、
nvidia-kernel-common-535は
535.129.03-0ubuntu1 が必要なようですが、 535.129.03-0ubuntu0.22.04.1がインストールされていると言われています。

バージョンの小さな違いがエラーを引き起こしているようです。

まずは、メッセージに従ってsudo apt –fix-broken install を実行しました。

$ sudo apt --fix-broken install
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
依存関係を解決しています ... 完了
以下の追加パッケージがインストールされます:
  nvidia-compute-utils-535 nvidia-kernel-common-535
以下のパッケージはアップグレードされます:
  nvidia-compute-utils-535 nvidia-kernel-common-535
アップグレード: 2 個、新規インストール: 0 個、削除: 0 個、保留: 4 個。
3 個のパッケージが完全にインストールまたは削除されていません。
38.6 MB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 61.8 MB のディスク容量が消費されます。
続行しますか? [Y/n] 
(データベースを読み込んでいます ... 現在 382086 個のファイルとディレクトリがイン
ストールされています。)
.../nvidia-kernel-common-535_535.129.03-0ubuntu1_amd64.deb を展開する準備をして
います ...
nvidia-kernel-common-535 (535.129.03-0ubuntu1) で (535.129.03-0ubuntu0.22.04.1 
に) 上書き展開しています ...
dpkg: アーカイブ /var/cache/apt/archives/nvidia-kernel-common-535_535.129.03-0ub
untu1_amd64.deb の処理中にエラーが発生しました (--unpack):
 '/lib/firmware/nvidia/535.129.03/gsp_ga10x.bin' を上書きしようとしています。こ
れはパッケージ nvidia-firmware-535-535.129.03 535.129.03-0ubuntu0.22.04.1 にも存
在します
dpkg-deb: エラー: ペースト subprocess was killed by signal (Broken pipe)
.../nvidia-compute-utils-535_535.129.03-0ubuntu1_amd64.deb を展開する準備をして
います ...
nvidia-compute-utils-535 (535.129.03-0ubuntu1) で (535.129.03-0ubuntu0.22.04.1 
に) 上書き展開しています ...
dpkg: アーカイブ /var/cache/apt/archives/nvidia-compute-utils-535_535.129.03-0ub
untu1_amd64.deb の処理中にエラーが発生しました (--unpack):
 '/usr/bin/nvidia-powerd' を上書きしようとしています。これはパッケージ nvidia-ke
rnel-common-535 535.129.03-0ubuntu0.22.04.1 にも存在します
dpkg-deb: エラー: ペースト subprocess was killed by signal (Broken pipe)
処理中にエラーが発生しました:
 /var/cache/apt/archives/nvidia-kernel-common-535_535.129.03-0ubuntu1_amd64.deb
 /var/cache/apt/archives/nvidia-compute-utils-535_535.129.03-0ubuntu1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

となってうまくいきません。

どうしたらいいか調べていたら、この記事を見つけました。

sudo dpkg -i --force-overwrite /var/cache/apt/archives/nvidia-kernel-common-535_535.129.03-0ubuntu1_amd64.deb

をした後に sudo apt –fix-broken install をすればいいと書いてあります。

ただ、私の環境では、これを見つける前にsudo apt clean をしていたためか、該当するdebファイルがありませんでした。

このdebファイルは、nvidiaのウェブサイトから入手できます。
以下、特定のバージョンのファイルへのリンクは貼らないことにします。その時その時でバージョンが違う可能性があるからです。エラーメッセージからバージョンをよく確認したうえで、該当するものをダウンロードしてください。

問題を起こした私の環境はUbuntu 22.04だったので、

https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/

にいって、
nvidia-kernel-common-535_535.129.03-0ubuntu1_amd64.deb

をホームディレクトリの下のDownloadsにダウンロードしました。

Ubuntu 20.04 の方の場合は、nvidiaのリンクは以下になります。

https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/

ここから、
nvidia-kernel-common-535_535.129.03-0ubuntu1_amd64.deb もしくは、ご自身のエラーメッセージに該当するファイルをダウンロードしてください。

そのうえで以下を実行しました。

$ cd ~/Downloads
$ sudo dpkg -i --force-overwrite ./nvidia-kernel-common-535_535.129.03-0ubuntu1_amd64.deb
(データベースを読み込んでいます ... 現在 382086 個のファイルとディレクトリがインストールされています。)
.../nvidia-kernel-common-535_535.129.03-0ubuntu1_amd64.deb を展開する準備をしています ...
nvidia-kernel-common-535 (535.129.03-0ubuntu1) で (535.129.03-0ubuntu0.22.04.1 に) 上書き展開しています ...
dpkg: 警告: --force が有効なので、問題を無視します:
dpkg: 警告: '/lib/firmware/nvidia/535.129.03/gsp_ga10x.bin' を上書きしようとしています。これはパッケージ nvidia-firmware-535-535.129.03 535.129.03-0ubuntu0.22.04.1 にも存在します
dpkg: 警告: --force が有効なので、問題を無視します:
dpkg: 警告: '/lib/firmware/nvidia/535.129.03/gsp_tu10x.bin' を上書きしようとしています。これはパッケージ nvidia-firmware-535-535.129.03 535.129.03-0ubuntu0.22.04.1 にも存在します
nvidia-kernel-common-535 (535.129.03-0ubuntu1) を設定しています ...
update-initramfs: deferring update (trigger activated)
initramfs-tools (0.140ubuntu13.4) のトリガを処理しています ...
update-initramfs: Generating /boot/initrd.img-6.2.0-36-generic

お、上書きされたようです。

そのうえで、再度、sudo apt –fix-broken install を実行します。

$ sudo apt --fix-broken install
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
依存関係を解決しています ... 完了
以下の追加パッケージがインストールされます:
  nvidia-compute-utils-535
以下のパッケージはアップグレードされます:
  nvidia-compute-utils-535
アップグレード: 1 個、新規インストール: 0 個、削除: 0 個、保留: 4 個。
3 個のパッケージが完全にインストールまたは削除されていません。
286 kB のアーカイブを取得する必要があります。
この操作後に追加で 614 kB のディスク容量が消費されます。
続行しますか? [Y/n] 
(中略)
libnvidia-extra-535:amd64 (535.129.03-0ubuntu1) を設定しています ...
nvidia-driver-535 (535.129.03-0ubuntu1) を設定しています ...
man-db (2.10.2-1) のトリガを処理しています ...
dbus (1.12.20-2ubuntu4.1) のトリガを処理しています ...
libc-bin (2.35-0ubuntu3.4) のトリガを処理しています ...
initramfs-tools (0.140ubuntu13.4) のトリガを処理しています ...
update-initramfs: Generating /boot/initrd.img-6.2.0-36-generic

これで問題が解決しました。

nvidia-kernelのバージョン違いが問題を引き起こしていたようです。dpkg -i –force-overwrite を使うことで解決できました。

結構これで困っている方は多いと思うので、共有しておきます。

Windows 10/11 で、WSL2 を使って FSL をインストールする方法

Windows 10/11 では、Windows Subsystem for Linux (WSL) を使ってUbuntuなどのLinuxをインストールできます。WSL2 を使うと、GPUも使えるとのことです。

しかし、WSL2は基本、コマンドラインです。LinuxのGUIを起動するためには、工夫が必要です。現在、いくつかのアプリが公開されていますが、FSLの公式ページでは、VcXsrv を勧めていますのでそれを使うのが無難でしょう。

Ubuntu 22.04 も発表されて1年が過ぎて安定してきましたので、ここでは、

  • WSL2
  • Ubuntu 22.04
  • VcXsrv

をいれたうえで、FSL をインストールしてみます。

なお、このページは、FSLの公式サイトを参考に作成しました。

続きを読む

Ubuntu 20.04/22.04 上の FSL6.0.6 以降で CUDA 11以降のGPUを使う方法

FSL 6.0.6 以降で、CUDA 11以降も対応するようになりました。

いろいろ試行錯誤した結果、以下のようなシンプルな方法でFSLでCUDAを上手に使うことができるようになったので紹介します。

なお、Amulet社から販売している Powerstep Tower for Lin4Neuro は、既にこれらの設定が済んでいますので、電源入れたらすぐにEDDY, BEDPOSTX, XTRACTなどがGPUを使って解析できます。
なお、FSL 6.0.6 以降は既にインストールされているとします。

続きを読む

Ubuntu で 新しいハードディスクを追加する方法 step by step

これまで新しいハードディスクを追加する際の tips を書いてきましたが、最初から最後までまとめます。SATA接続のSSDも同様です。

  1. 新しいデバイスを確認する
  2. fdisk を使って確認できます。

    sudo fdisk -l
    

    詳細はこちらに説明があります。

    この後は、 /dev/sda が新たなデバイスであると仮定します。

  3. パーティションの作成
  4. gdisk を使います。

    sudo gdisk /dev/sda
    

    この後、タイプするコマンドは

    n #新しいパーティションを追加 設定はすべてデフォルトのままでも可
    p #パーティションテーブルを確認
    w #パーティションテーブルの書き込み
    

    の3つだけです。

    詳細は先ほどと同じく、こちらに説明があります。

  5. ext4 としてフォーマット
  6. mkfs.ext4 を使います。

    sudo mkfs.ext4 /dev/sda
    
  7. ハードディスクのUUIDを確認
  8. blkid で確認できます。

    sudo blkid | grep dev\/sda
    

    ここで表示されるUUIDを後ほど使います。

  9. マウントポイントの作成
  10. 今の場合は /mnt/data1 にマウントするとします。

    sudo mkdir /mnt/data1
    
  11. /etc/fstab への追加
  12. /etc/fstab に以下の内容を追加します。詳細はここでは説明しませんが、データ用ならば以下の設定でよいのではないかと思われます。

    # HDD 2023-04-15 (コメントを記載した方がどのハードディスクかわかります)
    UUID=上記で調べたUUID    /mnt/data1    ext4    defaults    0    0
    
  13. ハードディスクのマウント
  14. mount -a でマウントできます。

    sudo mount -a
    
  15. オーナーシップの変更
  16. 自分だけ使う場合、chown を使ってオーナーを自分にすると使い勝手がいいです。

    sudo chown -R $USER:$USER /mnt/data1
    

これでハードディスクを追加できました。

XFCEのウィンドウのサイズ変更は、Alt + 右クリック + 矢印が便利

Lin4NeuroはXFCEを採用しています。とても軽量なのでいいのですが、ウィンドウのサイズ変更でウィンドウの端を上手につかむことができず困ることがあります。
いいショートカットを教えていただきました。「Altキーを押しながら右クリックして、マウスを動かす」です。

私はマウスはできるだけ使わない方がうれしい人間なので、マウスを矢印キーで代用できないか試してみたらバッチリでした。

Alt + 右クリック + 矢印キーで、ウィンドウのサイズが比較的簡単に変更できます。

お試しあれ。

すぐに認識されないDVD/Blu-rayディスク(udf形式)のUbuntuへの読み込み

UDF形式はDVDやブルーレイの標準フォーマットですが、Ubuntuでは、デフォルトではディスクを挿入しただけでは認識されないことがあります。

以下のようにすることで対応できます。

  • 光学ドライブのデバイス名を確認する

Ubuntuの「ディスク」アプリ (gnome-disks) を起動します。

ここで、光学ドライブを選択し、「デバイス」にあるパスを確認します。

上図では、/dev/sr0 であることがわかります。

  • マウントポイントを作成する

Ubuntu 18.04以降では、/media/ユーザ名/ の下にリムーバブルディスクがマウントされますので、ここに udf というディレクトリを作成します。(udfでなくても自分の好きな名前で大丈夫です) 

sudo mkdir /media/ユーザ名/udf
  • マウントする

以下のコマンドでマウントします。

sudo mount -t udf /dev/sr0 /media/ユーザ名/udf

こうすると、デスクトップ上にディスクが表示されるようになります。

ディスクが表示されず困った時、試してみる価値があります。

  • アンマウントする

GUIでは、ディスクのアイコンで右クリックをして「取り出す」で大丈夫です。
コマンドラインでは、sudo umount /media/ユーザ名/udf でアンマウントできますのでその後はいつでも取り出せます。

bedpostx_gpu のエラー: –cnonlinear/bin/merge_parts_gpu: そのようなファイルやディレクトリはありません の対処法

bedpostx_gpu を走らせると、以下のエラーがでます。

/usr/local/fsl/bin/bedpostx_postproc_gpu.sh: 行 20: --cnonlinear/bin/merge_parts_gpu: そのようなファイルやディレクトリはありません

この解決法がFSLのMLで紹介されています。

https://www.jiscmail.ac.uk/cgi-bin/wa-jisc.exe?A2=FSL;ee0b1626.2112

具体的には、

${FSLDIR}/bin の中にある bedpostx_postproc_gpu.sh の

# last 2 parameters are subjdir and bindir
parameters=""
while [ ! -z "$2" ]
do

# last 2 parameters are subjdir and bindir
parameters=""
while [ ! -z "${2+x}" ]
do

に変更します。

while の後の test文 の中が、 $2 が ${2+x} になっています。

これで無事に動きます。

ご紹介まで。(金子貴久子先生、情報提供ありがとうございました)

NVIDIAのリポジトリのキーが更新されました。(2022年4月28日)

4月30日にUbuntuのアップデートをしたら、以下のようなメッセージが出ました。

W: GPG エラー: https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY A4B469963BF863CC
E: リポジトリ https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease はもう署名されていません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。

NVIDIAのリポジトリが変更があったのかなと思い、NVIDIAのサイトを見に行ったら、きちんと書いてありました。

Updating the CUDA Linux GPG Repository Key

このページに書いてありますが、Ubuntu 18.04の場合は行うべきことは以下になります。(Ubuntu 20.04は1804を2004に変えるだけです)

sudo apt-key del 7fa2af80
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb 
sudo apt update

これで公開鍵が更新されます。

ただ、人によっては以下のメッセージが出てくるかもしれません。

W: ターゲット Packages (Packages) は /etc/apt/sources.list:63 と /etc/apt/sources.list.d/cuda-ubuntu1804-x86_64.list:1 で複数回設定されています

これは、/etc/apt/sources.list と /etc/apt/sources.list.d/cuda-ubuntu1804-x86_64.list

に同じ内容が記載されていることによります。
この場合は、

/etc/apt/sources.list にある

deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /

を削除すればOKです。

ubuntu-drivers devices で “FileNotFoundError: [Errno 2] No such file or directory: ‘aplay'” が出たときの対処法

Ubuntuでグラフィックドライバを入れるときなど、ubuntu-driversが便利ですが、あるマシンでこんなエラーが出ました。

$ ubuntu-drivers devices
ERROR:root:could not open aplay -l
Traceback (most recent call last):
  File "/usr/share/ubuntu-drivers-common/detect/sl-modem.py", line 35, in detect
    aplay = subprocess.Popen(
  File "/usr/lib/python3.8/subprocess.py", line 858, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.8/subprocess.py", line 1704, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'aplay'

No such file or directory: ‘aplay’ と出ます。
これは何だろうなと思って調べたところ、Linuxのオーディオ入出力のALSAの音声再生コマンドであることがわかりました。

ALSAを入れれば問題ないだろうと思ったところ、解決しました。

sudo apt install alsa-base

これで ubuntu-drivers devices でエラーが出なくなりました。

Ubuntu への AnyDesk のインストール

AnyDeskはマルチプラットフォームで動作するリモートデスクトップアプリケーションです。動きがとても軽くて非常に使いやすいです。

本家サイトに ‘AnyDesk DEB repository how-to‘ が紹介されていますが、root で作業するように書かれています。

Ubuntuで普通のユーザーが使う時はちょっとだけ違う方がすんなりインストールできますので紹介します。

  • リポジトリキーを信頼するソフトウェア・プロバイダー・リストに登録する
wget -qO - https://keys.anydesk.com/repos/DEB-GPG-KEY | sudo apt-key add -
  • リポジトリを追加する
sudo sh -c 'echo "deb http://deb.anydesk.com/ all main" > /etc/apt/sources.list.d/anydesk-stable.list'
  • リポジトリを更新し、AnyDeskをインストールする
sudo apt update
sudo apt install anydesk

Ubuntu 20.04 の mini.iso

Ubuntu 20.04 の mini.iso はかなり隠れたところにあります。
こちらから入手できます。

http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/netboot/

日本のミラーサイトはこちら。
http://jp.archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/netboot/

いつも探すので備忘録として書いておきます。

シェルスクリプト(bash)の基本 ~チュートリアル~

目次


目的
シェルとは
シェルスクリプトとは
UNIX系OS(Linux, Mac)における基礎知識
パス(絶対パス・相対パス)
プログラミング言語は、英語の命令文に相当
ファイル名に日本語やスペースを用いない
bash基本
文字の表示(コマンド:echo)
Brace Expansionの使い方
変数(コマンド:変数=〇〇)
変数の定義
変数の利用
変数の配列処理
配列
配列の定義
配列の利用
現在いるディレクトリの確認(コマンド:pwd)
端末(ターミナル)の画面をクリア(コマンド:clear)
標準入力から変数を定義
条件分岐:If文(コマンド:if)
条件分岐:Case文(コマンド:case)
四則演算
リダイレクト(コマンド:> or >>)
ファイル内容出力(コマンド:cat)
ファイルのリスト一覧確認(コマンド:ls)
カウント(コマンド:wc -l)
パイプ [ | ](コマンド:|)と検索(コマンド:grep)
テキストファイルの作成(コマンド:touch)
フォルダの作成(コマンド:mkdir)
ファイル・フォルダのコピー(コマンド:cp)
ファイルをコピー
フォルダをコピー:オプション(-r)必須
ファイル・フォルダの移動(コマンド:mv)
ディレクトリ移動(コマンド:cd)
ファイル・フォルダの削除(コマンド:rm)
ファイルの削除
フォルダの削除:オプション(-r)必須
反復処理:For文(コマンド:for)
反復処理:While文(コマンド:while)
関数(コマンド:function)
先頭の表示(コマンド:head)
末尾の表示(コマンド:tail)
ソート処理(コマンド:sort)
重複削除(コマンド:uniq)
文字列の切り出し・抽出(コマンド:cut)
区切り文字を指定して抽出
-d: 区切り文字指定
-f: フィールドの指定
文字のインデックスを指定して抽出
-c: 先頭からの文字数
文字列の置換(コマンド:sed)
数字の連番(コマンド:seq)
コマンドのレファレンスマニュアルを表示(コマンド:man)
ワイルドカード [ * ] (コマンド:*)


続きを読む

Linuxで特定の時間より後に生成されたファイルを列挙する方法

画像解析などをしていると、しばしば、「今の作業で新しくできたファイルは何だろう?」と思うことがあります。

Linuxでは、find コマンドに、-newer というオプションがあります。findのmanページには以下の記載があります。

-newer file
ファイルが file よりも最近に内容を更新されていれば、真を返す。

であるならば、あるファイルを作成して、作業をして、その後に、findをかければ列挙できるはずです。

いろいろ調べた結果、touchコマンドで -t オプションを使うとタイムスタンプを決められるので、それをスクリプトに組み込めるなと思いました。

以下のスクリプトで、新たに生成されたファイルの一覧が generated_from_タイムスタンプ.txt に作成されます。

#!/bin/bash

#generate timestamp
ts=$(date +%Y%m%d%H%M.%S)

#generate a temporary file with current timestamp for find
touch -t $ts /tmp/_timestamp

# BEGIN commands to generate new files
#
# END

# list files which is generated after /tmp/_timestamp
find . -type f -newer /tmp/_timestamp | tee -a generated_from_${ts}.txt

Making use of eddy_cuda of FSL 6.0.4 on Ubuntu 18.04

eddy implemented in FSL is time-consuming program. FSL recommends using eddy_cuda, GPU version of eddy. They ship eddy_cuda8.0 and edddy_cuda9.1. If you use Ubuntu 18.04, you can make use of eddy_cuda9.1 with only 4 commands.

Disclaimer: Installing nvidia-driver could cause display problem. I am not responsible for the problem…

続きを読む