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…

続きを読む

Ubuntu18.04上のFSL6.0.4でeddy_cudaを使う方法

FSLにはeddyという拡散MRI画像の渦電流を補正するプログラムが搭載されています。
かつてはeddy_correctというシンプルなプログラムでしたが、
今のeddyは、計算量がとてつもなく大きな(=処理時間がかかる)プログラムとなっています。

Liux版のFSLには、eddy_openmp というCPU版と、eddy_cuda{8.0,9.1}というGPU版があります。

Ubuntu 18.04 が搭載されているLinuxで NVIDIA製のグラフィックボードが搭載されている場合、eddy_cudaを比較的簡単にセットアップできるので紹介します。

注意:NVIDIAのドライバを入れる時点で、ディスプレイの解像度が変になることがあります。現在の実働マシンに使う場合は相当注意しながら行ってください。個々人の環境があまりにも違うのでこの方法で不具合が起こっても責任は負いかねます。(すでに3台のマシンでセットアップを行い問題ないことを確認していますが…)

続きを読む

Ubuntu で Rの「署名が無効です」への対処法

UbuntuでRを使っていらっしゃる方は多いと思います。
R3.5以上を使う場合、https://cran.rstudio.com/bin/linux/ubuntu bionic-cran35 を使っている場合が多いです。
このリポジトリの署名が2020年10月16日に失効しました。

このため、apt update で以下のエラーが出ます。

署名照合中にエラーが発生しました。リポジトリは更新されず、過去のインデックスファイルが使われます。GPG
エラー: https://cran.rstudio.com/bin/linux/ubuntu bionic-cran35/ InRelease:
以下の署名が無効です: EXPKEYSIG 51716619E084DAB9 Michael Rutter
<marutter@gmail.com>
W: https://cran.rstudio.com/bin/linux/ubuntu/bionic-cran35/InRelease
の取得に失敗しました  以下の署名が無効です: EXPKEYSIG 51716619E084DAB9
Michael Rutter <marutter@gmail.com>
W:
いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視されるか、古いものが代わりに使われます。

この対処法としては、署名の有効期限をアップデートする必要があります。

まず、apt-key listで公開鍵の一覧を取得します。

apt-key list

そうすると、結果の中で以下が見つかるかと思います。

pub   rsa2048 2010-10-19 [SCA] [期限切れ: 2020-10-16]
       E298 A3A8 25C0 D65D FD57  CBB6 5171 6619 E084 DAB9
uid           [期限切れ] Michael Rutter <marutter@gmail.com>

公開鍵は E298 A3A8 25C0 D65D FD57 CBB6 5171 6619 E084 DAB9 となります。

視認性のために4文字ごとに半角スペースが入っていますが、それを取り除くと以下になります。

E298A3A825C0D65DFD57CBB651716619E084DAB9

この鍵を用いて、以下のコマンドで新しい署名を入手します。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

そうすると、以下のような表示になるかと思います。

gpg: 鍵51716619E084DAB9: "Michael Rutter <marutter@gmail.com>" 新しい署名を2個
gpg: 処理数の合計: 1
gpg:         新しい署名: 2

apt-key list を再度行うと、以下のようになり、有効期限が2027年9月30日になったことが確認できるかと思います。

pub   rsa2048 2010-10-19 [SCA] [有効期限: 2027-09-30]
      E298 A3A8 25C0 D65D FD57  CBB6 5171 6619 E084 DAB9
uid           [  不明  ] Michael Rutter <marutter@gmail.com>
sub   rsa2048 2010-10-19 [E] [有効期限: 2027-09-30]

Workaround for FSL 6.0.4 python dependencies

imglob or imcp provided with FSL requires numpy.testing.decorators. However, numpy.testing.decorators has been deprecated from numpy 1.18. So, if you use numpy >=1.18, you see the following error:

ModuleNotFoundError: No module named 'numpy.testing.decorators'

Paul Mccarthy kindly suggested a workaround for this problem.

The below is his original message.
https://www.jiscmail.ac.uk/cgi-bin/wa-jisc.exe?A2=FSL;a26a0779.2010

1. Move $FSLDIR/fslpython/envs/fslpython/bin/python3.7 to $FSLDIR/fslpython/envs/fslpython/bin/python3.7_bin
2. Replace $FSLDIR/fslpython/envs/fslpython/bin/python3.7 with a script containing this:

#!/usr/bin/env bash
thisdir=$(cd $(dirname $0) && pwd)
$thisdir/python3.7_bin -I "$@"

3. Change the permissions of the new $FSLDIR/fslpython/envs/fslpython/bin/python3.7 to make it executable

With this suggestion, I wrote a tiny script.

#!/bin/bash

cd $FSLDIR/fslpython/envs/fslpython/bin/
sudo mv python3.7 python3.7_bin

cat << 'EOF' | sudo tee python3.7 > /dev/null
#!/usr/bin/env bash
thisdir=$(cd $(dirname $0) && pwd)
$thisdir/python3.7_bin -I "$@"
EOF

sudo chmod 755 python3.7

This script will make FSL use internal python within FSL.

Ubuntu 18.04 に HCP Pipeline の環境を設定する方法

HCP Pipelineを準備するのは簡単ではありませんが、東京大学小池研の植松明子さんとディスカッションしている中で、Ubuntu 18.04にHCP Pipelineを設定する方法を確立できたのでご紹介します。植松さんのinputに感謝申し上げます。

続きを読む

UbuntuでGnumericを用いてCSVをXLSXに変換する方法

あるプロジェクトで、csvファイルをxlsxに変換する必要がありました。
いろいろな方法がありますが、比較的やりやすかった方法がありましたので、備忘録として記載します。

方法は、gnumeric (とnkf)を使う方法です。インストールは簡単です。

sudo apt install gnumeric nkf

ここでは、例として、sample.csv を sample.xlsx に変換したいと考えます。

  1. 文字コードをUTF-8に変換
  2. 日本語が入っている場合、Shift-JISなどだとうまくいかない場合があるので、文字コードをUTF-8に変換します。

    nkf -wLu --overwrite sample.csv
    
  3. Gnumericで変換
  4. Gnumericについているssconvertというプログラムが簡単に変換してくれます。

    ssconvert sample.csv sample.xlsx
    
  5. XLSXシートのタブ名から.csvを取り除く
  6. 簡単なのですが、この場合、sample.xlsxのシート名が sample.csv となってしまいます。これは気持ち悪いなと思いました。

    なので、これを取り除く工夫が以下です。xlsxをxmlに変換し、xmlの中の.csvをsedで取り除き、そして、再度xmlをxlsxに変換します。

    ssconvert --export-type=Gnumeric_XmlIO:sax:0 $sample.xlsx sample.xml
    sed -i 's/.csv//' sample.xml
    ssconvert --export-type=Gnumeric_Excel:xlsx sample.xml sample.xlsx
    rm sample.xml
    

これで望みどおりの変換ができました。

以上、まとめると、以下のようなスクリプトになります。

#!/bin/bash
#prerequisites: nkf and gnumeric
for f in *.csv
do
  nkf -wLu --overwrite $f
  base=${f%.csv}
  ssconvert $f ${base}.xlsx
  ssconvert --export-type=Gnumeric_XmlIO:sax:0 ${base}.xlsx ${base}.xml
  sed -i 's/.csv//' ${base}.xml
  ssconvert --export-type=Gnumeric_Excel:xlsx ${base}.xml ${base}.xlsx
  rm ${base}.xml
  mv $f csv
done

UbuntuでDropboxの同期が進まない時は、ディレクトリ数を確認する

最近、あるワークステーションを新規にセットアップしました。
いつもファイルはDropbox経由で同期することによって楽しているので、今回も同じようにしたら、
1週間たっても同期がされません。

おかしいなと思っていろいろ調べてみたら、公式ドキュメントにヒントがありました。

同期できない場合 – 互換性のない特殊文字と不良なファイル名に関する問題の解決方法

Linux で 1 万件以上のフォルダを監視する

Linux 版の Dropbox デスクトップ アプリは、デフォルト設定により 1 万件以上のフォルダを監視することはできません。制限数を超えた場合は監視されないため、同期中に無視されます。簡単な回避策として、まずターミナルを開き、次を入力してください。

echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; sudo sysctl -p

このコマンドでシステムに 10 万件までのフォルダを監視するように指示することができます。コマンドを入力しパスワードを入力したら、すぐに Dropbox が同期を再開します。

私のDropbox内のフォルダ数はどのくらいだろう?と思って、以下のコマンドでディレクトリ数を数えてみました。

find Dropbox -type d | wc -l

その結果ですが、14454 と出てきました。1万件超えています。

そこで、アドバイス通り、以下のコマンドを入力しました。

echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; sudo sysctl -p

そうしたところ、同期がはじまりました!システムで何か変な設定をしてしまったのではないかと心配だったのでほっとしました。

普段使っているDropboxは、少しずつ増えていっているので、おそらく監視しているフォルダ数がそれほど多くないのかもしれませんね。

Ubuntu上のFSLやFreeSurferでsyntax errorが出る時の対処法

Ubuntu上でFSLやFreeSurferを走らせる時、

Syntax error: "(" unexpected.

といったエラーが出ることがあります。

この原因を探っていたらわかったことがありました。

FSLのプログラムは、基本、bashで動くことを前提にしていますが、ファイルの冒頭のShebang行は、#!/bin/shとなっています。

RedHatやCentOSは、/bin/sh は、bashにシンボリックリンクが張られていますが、
Ubuntuでは、dashにシンボリックリンクが張られています。
ls -l で確認するとすぐに確認できます。

$ ls -l /bin/sh
lrwxrwxrwx 1 root root /bin/sh -> dash

dashとbashは完全に互換性がないため、ときにbashの文法が通用しないことがあります。

解決策は以下の2つです。

  1. シェルスクリプトのShebang行を #!/bin/bash に変更する
  2. 自分でシェルスクリプトを書く場合などはこれがいいでしょう。
    しかし、FSLでは、300以上のスクリプトがありますので、これを全部変えるのはめんどくさいですね。

  3. dpkg-reconfigureで、dashをbashに変更する
  4. Ubuntuでは、 dpkg-reconfigure dash というコマンドで、dashを使わずにbashを使うようにすることができます。

    インタラクティブに行うには、以下のコマンドを叩きます。

    $ sudo dpkg-reconfigure dash
    

    すると、次の画面が出るので、「いいえ」を選びます。

    再度、/bin/shのシンボリックリンク先を確認してみます。

    $ ls -l /bin/sh
    lrwxrwxrwx 1 root root /bin/sh -> bash
    

    今度はbashに変更されていることがわかります。

    なお、インタラクティブでなく変更したい際は、以下で行います。
    いくつかのサイトで情報が提供されていましたが、正しくないものもありましたので、試行錯誤した結果、以下が最適な解決法とわかりました。

    echo "dash dash/sh boolean false" | sudo debconf-set-selections
    sudo dpkg-reconfigure --frontend=noninteractive dash
    

Ubuntuで有線LANで接続しようとしても、「デバイスは管理されていません」と出てしまう時の簡単な解決法

Ubuntu 18.04で経験した現象ですが、無線LANは接続できるのに、有線LANで接続しようとすると、
「デバイスは管理されていません」”device not managed” と出てしまって接続できないことがあります。

こんな感じです。

ネットを探してみるといろいろな情報が出てきますが、日本語の情報だと、「PCにあったドライバをインストールする」という情報が多いです。

しかし、これは汎用的ではありません。もっと根本的な解決法がほしいと思いました。

続きを読む

Ubuntu上でのVirtualBoxで仮想マシンを立ち上げようとしたときに Kernel driver not installed (rc=-1908) のエラーが出た場合の対処方法

自分が頻回に遭遇するエラーなので、備忘録として載せておきます。

Ubuntuでカーネルをアップデートすると、VirtualBoxを起動するときに、以下のエラーが出ます。

このエラーがでたときに、このまま

sudo /sbin/vboxconfig

としてもエラーが出て解決しません。(細かいエラーを保存し忘れました)

解決方法はシンプルで、新しいカーネルにあったカーネルヘッダーをインストールすることです。

以下に具体的な解決法を示します。

  1. カーネルのバージョンを確認
  2. $ uname -r
    4.15.0-22-generic
    

    今の場合、4.15.0-22-generic であることがわかります

  3. 該当するバージョンのカーネルヘッダーをインストール
  4. 上記を賢く使ってインストールします。

    $ sudo apt update
    $ sudo apt install linux-headers-$(uname -r)
    

    これでカーネルヘッダーがインストールされます

  5. /sbin/vboxconfig の実行
  6. $ sudo /sbin/vboxconfig 
    vboxdrv.sh: Stopping VirtualBox services.
    vboxdrv.sh: Building VirtualBox kernel modules.
    vboxdrv.sh: Starting VirtualBox services.
    

    これで無事にVirtualBoxの仮想マシンが起動するようになります。

Ubuntu 16.04への MRtrix3 インストールスクリプト

先日、ABiSチュートリアルで順天堂大学の鎌形先生から、FSL, FreeSurfer, MRtrix3を組み合わせたコネクトーム解析の素晴らしい講義を聞く機会がありました。

MRtrix3はインストールしなきゃと思いつつできていませんでしたが、せっかくですから、モチベーションが高いうちにインストールしようと思い、Ubuntu 16.04へのインストールを行いました。

http://mrtrix.readthedocs.io/en/latest/installation/linux_install.html

こちらに説明がありますが、これをまとめてみました。

関心のある方はこちらからダウンロードしてみてください。(右クリック→名前をつけて保存)

保存した後、

$ chmod 755 mrtrix3_installer_ubuntu1604.sh
$ ./mrtrix3_installer_ubuntu1604.sh

でインストールができます。

ちなみに、上記スクリプトは以下のようになっています。
GitHubからダウンロードし、コンパイルし、.bashrcにパスを通すというシンプルなことをやっています。

#!/bin/bash
#Script to setup mrtrix3 for Ubuntu 16.04

#Install prerequisite packages
sudo apt-get install git g++ python libgsl0-dev zlib1g-dev libqt4-opengl-dev libgl1-mesa-dev libqt5svg5* libeigen3-dev

#Download MRtrix3 source
if [ ! -e $HOME/git ]; then
 mkdir $HOME/git
fi

cd $HOME/git
git clone https://github.com/MRtrix3/mrtrix3.git

#Configuration and build
cd mrtrix3
./configure
./build

#.bashrc
echo >> $HOME/.bashrc
echo "#MRtrix3" >> $HOME/.bashrc
echo 'export PATH=$PATH:$HOME/git/mrtrix3/bin:$HOME/git/mrtrix3/scripts' >> $HOME/.bashrc

How to make a UEFI-based bootable USB stick with Ubuntu mini.iso

Ubuntu mini.iso is useful when we want to build a system with minimal packages.
It is useful to make a bootable USB stick.
Below is how to make UEFI-based bootable USB stick with Ubuntu mini.iso.

Required package: 7-zip

You can get 7-zip with the following command;

sudo apt install p7zip-full

Now we will use “7z” command.
Two options are needed. “x” for extract and “-o” to specify output directory. If the directory doesn’t exist, 7z creates automatically.

  1. Extract iso image into a directory
  2. Now I want to extract images into “usbdisk” directory.

    7z x -ousbdisk mini.iso
    

    This will make “usbdisk” directory and extract into the directory. Note that no space is allowed between “-o” and target directory. I tried space or quotation, without success.

  3. Extract efi.image under boot/grub
  4. One more thing. In order to make the USB stick bootable with UEFI, we need to extract efi.img under boot/grub. This can be easily done with the following command. (You don’t have to change directory.)

    7z x -ousbdisk usbdisk/boot/grub/efi.img
    

    This command will extract efi.img, which will be “efi” directory under which bootx64.efi and grubx64.efi exist into the usbdisk directory.

  5. Copy the contents under “usbdisk” to USB stick
  6. Finally we just copy the contents under usbdisk to a USB.

That’s it. Now try to boot from USB disk.

Install igraph in R-studio on Ubuntu 16.04

I tried to install igraph simply by running install.packages(‘igraph’), which resulted in compile error.
Gathering information scatterd on websites, I came to the conclusion.

My Circumstance is as follows;

Ubuntu
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial

$ uname -a
Linux vincent 4.10.0-42-generic #46~16.04.1-Ubuntu SMP Mon Dec 4 15:57:59 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

R-studio
Version 1.1.383

sudo apt update
sudo apt install libssl-dev libcurl4-openssl-dev libxml2-dev

Then running install.packages(‘igraph’) in R-studio succeeded without error.

Ubuntu 16.04+fcitx+mozcで、viでインサートモードになる時は、mozcは起動させず、作業後にESCを押した時には、自動でmozcをOFFにする設定

私は、Ubuntu 16.04 (をカスタマイズしたLin4Neuro 16.04)でfcitx+mozcで日本語入力を行っています。
エディタはvimを利用しています。

多くの方がネットに記載されていますので、詳細は書きませんが、私がvimで日本語文書を書くとき、

  • 日本語で入力している時、入力が終わった後、ESCキーを押しても日本語入力の状態のままなので、一度mozcを切ってからでないと、ノーマルモードになれない。

という問題がありました。

この点に関して、私がよく参考にさせていただいている「いくやの斬鉄日記」にまさにこれに関する記事があり、中国語ですが、この問題を解決する .vimrc に記載する設定のリンクが紹介されていました。

早速、以下を ~/.vimrc に記載しました。(中国語のコメントは、英語に変換してあります)

"##### auto fcitx  ###########
let g:input_toggle = 1
function! Fcitx2en()
   let s:input_status = system("fcitx-remote")
   if s:input_status == 2
      let g:input_toggle = 1
      let l:a = system("fcitx-remote -c")
   endif
endfunction

function! Fcitx2zh()
   let s:input_status = system("fcitx-remote")
   if s:input_status != 2 && g:input_toggle == 1
      let l:a = system("fcitx-remote -o")
      let g:input_toggle = 0
   endif
endfunction

set ttimeoutlen=150
"Leave Insert mode
autocmd InsertLeave * call Fcitx2en()
"Enter Insert mode
autocmd InsertEnter * call Fcitx2zh()
"##### auto fcitx end ######

これでvimを起動したところ、日本語でいろいろ書いた後に、ESCを押してノーマルモードに戻ると、自動でmozcがoffになりました。やった!という感じです。

しかし、もう少し使っていて、不便に感じることがありました。それは、vimを起動して最初の挿入モードになるときに必ず mozc が立ち上がってしまうことです。日本語の文章を書くときはいいのですが、スクリプトを書くときは邪魔になります。ここは自動じゃないほうがいいなと思いました。

で、上の記載をよくよく見ると

Fcitx2en() というファンクションと
Fcitx2zh() というファンクションがあり、

前者はESCが押された時に自動でinput method (IM)をoffにする機能であり
後者は挿入モードになった時に自動でIMをonにする機能のようです。

私は後者の機能がいらないんだと気づきました。

なので、以下のように、Fcitx2zh()のところを削除しました。

"##### auto fcitx  ###########
let g:input_toggle = 1
function! Fcitx2en()
   let s:input_status = system("fcitx-remote")
   if s:input_status == 2
      let g:input_toggle = 1
      let l:a = system("fcitx-remote -c")
   endif
endfunction

set ttimeoutlen=150
"Leave Insert mode
autocmd InsertLeave * call Fcitx2en()
"##### auto fcitx end ######

こうしたところ、私の期待していたように

  • vimでノーマルモード→挿入モードになった時にはIMは起動しない
  • 必要時に手動でIMを起動
  • ESCを押すと自動でIMをoff

となりました。

これでvimがさらに便利になりました。
自分の備忘録として記載しておきます。

Ubuntu14.04, 16.04へのFreeSurfer 6.0のインストール

2014年12月にFreeSurfer 5.3のインストールの方法を記載しましたが、しばらく時間が経ちました。最近、FreeSurfer 6.0がリリースされましたので、コピペでもいけるぐらいにまとめてみます。

英語でのFreesurferをLinuxにインストールするときの具体的な方法は、
こちらに書いてあります。以下は英語を読むのがつらい方のためです。

なお、楽をしたい人は、一番最後にある【楽をするためのスクリプト】をご覧ください。

続きを読む

Ubuntuのapt-get updateで「ハッシュサムが適合しません」と出た時の対処法

先日、Ubuntuでapt-get updateを行った所、以下のエラーに遭遇しました。

W: http://jp.archive.ubuntu.com/ubuntu/dists/trusty-updates/main/source/Sources 
の取得に失敗しました  
ハッシュサムが適合しません

このような場合の解決法がいくつか提示されています。よくみられているもののひとつに、Ubuntuフォーラム内の投稿があります。

これでいいのですが、本質は何か考えてみました。

本質は、

/var/lib/apt/lists

の中にあるファイルとの比較で失敗しているようです。

したがって、消せばいいのは、この中身で、apt-getはその下にあるpartialディレクトリがなかったら自動で作成してくれます。

なので、やればいいのは、たった一つです。

$ sudo rm -r /var/lib/apt/lists/*

これでapt-get updateを行えば問題は解決するはずです。

自分の備忘録として残しておきます。

Ubuntu 16.04 における plymouth

Ubuntu 16.04になってから、Plymouthの挙動が変なので、いろいろ調べたところ、以下のことがわかりました。

これまでは、テーマは、/lib/plymouth/themesの下に保存されていましたが、これからは、/usr/share/plymouth/themesの下に保存されるようになったようです。

したがって、自作のテーマを使いたい場合、以下を行う必要があります。今、テーマはmytheme/mytheme.plymouthと仮定します。

  • 自作の mytheme.plymouth の中のファイルのパスを “/lib/plymouth” -> “/usr/share/plymouth” に変更
  • update-alternativesで新たにdefault.plymouthを設定
  • $ sudo update-alternatives --install \
    /usr/share/plymouth/themes/default.plymouth 
    default.plymouth \
    /usr/share/plymouth/themes/mytheme/mytheme.plymouth 100
    
  • テーマの変更
  • $ sudo update-alternatives --config default.plymouth
    
  • システムに反映
  • $ sudo update-initramfs -u
    

場所が変更になったことだけ頭においておけば、そこまで悩む必要はなさそうです。

ANTsのUbuntu 14.04へのインストール方法(ソースからのコンパイル)

2018.09.09追記:この記事は古くなっています。最新版は、こちらに準備しましたので、こちらをご覧ください。

先日、ANTsをMacにインストールする方法を記載しましたが、Ubuntuでも同じことができるので、記載します。

開発者によるHow-toはこちらに記載されています。

続きを読む