rm -rf /*

rm -rf /*

忘れようとしても思い出せない

WaydroidをインストールしたときにModuleNotFoundErrorで困った話

Arch LinuxにAURからWaydroidをインストールしたときに「Index» AUR Issues, Discussion & PKGBUILD Requests» waydroid init does not start due to ModuleNotFoundError」と全く同じ問題に遭遇した。ネットを調べるとみんな無茶苦茶困っているようだ。

Waydroidのインストール自体は以下のコマンドで完了する。

$ yay -S waydroid

実行しようとすると、このエラーが発生した。

$ ModuleNotFoundError: No module named 'gbinder'

原因は私の環境がシステムのPythonを使用していないことによるものらしい。

私はminiforgeを利用しているので、システムのPythonではなくminiforgeのbaseのPythonが優先して使用されていた。ターミナルの起動時にcondaのbaseがactivateされないようにすることで問題を回避した。

$ which python # これでホームディレクトリ以下のpythonが出てくるはず
$ conda config --set auto_activate_base false

これで端末を再起動して、python-gbinder を再構築したらWaydroidが正常に起動した。

$ which python # これで/usr/bin/pythonが出てくればOK
$ yay -S --rebuild python-gbinder 

WaydroidはNVIDIAGPUでは動かないが回避策があるらしい。

あとはWaydroid Extras ScriptでARM互換にしたり、Google Play Storeを使えるようにすれば便利になる。以下の記事を参考にした。

【Waydroid】UbuntuでAndroidアプリを動かす話

また、ここの記事を参考にしてマルチウィンドウモードを有効にした。

$ waydroid prop set persist.waydroid.multi_windows true
$ sudo systemctl restart waydroid-container

Waydroidの起動よりも、Anacondaのbaseが勝手に起動しなくなる設定が有益だったので記録を残しておく。

UbuntuとDebianにPandocとTeX Liveを導入

最近はWordにいろいろ書くようにしていたが、数式を使うようになった途端にめんどくさくなったのでMarkdownに回帰した。昔と状況が違うので、VS codePandocで環境を構築。特にTeX Liveの導入に苦労したので覚え書きを残す。

Pandocの実行環境はWSL2(Windows 10)のUbuntuとCrostini(Chrome OS)のDebianに構築した。

Pandocのインストール

特にこだわりがなければ、以下のコマンドでディストリビューションの公式レポジトリからaptでインストールするだけで良い。

$ sudo apt-get install pandoc

TeX Liveのインストール

ディストリビューションの公式レポジトリからaptでインストールしたものの、なんだか挙動がいまいちなことがあったので調べたところ「TeX Liveはローリングリリースなので、各ディストリビューションの公式レポジトリのものは古い」という記述を見つけた。TeX Liveの公式サイトからインストールスクリプトをダウンロードしてインストールすることにした。

すでにインストールしたTeX Liveは以下のサイトの方法でアンインストールした。

How to remove everything related to TeX Live for fresh install on Ubuntu?

私の場合はaptでインストールしただけでなく、すでにいろんなことを試していたが以下のコマンドでだいたいきれいにアンインストールできた。

$ sudo apt-get purge texlive*
$ rm -rf ~/.texlive*

その後、以下のコマンドでTeX Liveを公式のスクリプトでインストールした。

$ wget http://ftp.jaist.ac.jp/pub/CTAN/systems/texlive/tlnet/install-tl-unx.tar.gz
$ tar xzf install-tl-unx.tar.gz
$ cd install-tl-20240808/
$ sudo ./install-tl

インストール後はスクリプトの指示通にしたがって以下の環境変数を.bashrcに書いてパスを通す。エディタを使わず書き込むのであれば以下のようにechoで書けば良い。

$ echo 'export MANPATH="$MANPATH:/usr/local/texlive/2024/texmf-dist/doc/man"' >> ~/.bashrc
$ echo 'export INFOPATH="$INFOPATH:/usr/local/texlive/2024/texmf-dist/doc/info"' >> ~/.bashrc
$ echo 'export PATH="$PATH:/usr/local/texlive/2024/bin/x86_64-linux"' >> ~/.bashrc

TeX Liveのパッケージマネージャーのtlmgrの実行にはスーパーユーザー権限が必要になるが、スーパーユーザーでは上記の環境変数が反映されていないので、ユーザーのホームディレクトリで以下のようにして対処する。

$ sudo su
# source .bashrc
# tlmgr

aptでインストールする場合は以下の記事で紹介されているエラーに注意すること。

Ubuntu22.04にtexliveをapt installする際にPregenerating ConTeXt MarkIV format. This may take some time...で停止する不具合を回避する方法

テンプレートのインストール

Pandoc LaTeX templateのEisvogelを使用したかったので、GitHubのリリースページからダウンロード。(このときはEisvogel-2.4.2.zip )

アーカイブを展開して、展開したディレクトリで以下のコマンドを実行してテンプレートをインストール。

$ cp eisvogel.latex ~/.pandoc/templates/

公式サイトのインストールガイドに書かれている以下のパッケージをtlmgrでインストール。

$ sudo su
# source .bashrc
# tlmgr install soul adjustbox babel-german background bidi collectbox csquotes everypage filehook footmisc footnotebackref framed fvextra letltxmacro ly1 mdframed mweights needspace pagecolor sourcecodepro sourcesanspro titling ucharcat ulem unicode-math upquote xecjk xurl zref

Pandocの実行

テンプレートにeisvogelを指定して実行。日本語フォントの表示で困ったが'-V CJKmainfont=IPAexGothic'とするだけで対処できた。Mathjaxの数式ブロック内の'//'で改行には対応できなかった。

pandoc sample.md -o sample.pdf -f markdown --pdf-engine=lualatex  --template eisvogel --listings -V CJKmainfont=IPAexGothic --mathjax

TermuxにUbuntuを入れてJupyterlabの環境を整備

Androidsshの他に色々と試したかったのでTermuxにprootのUbuntuを入れたときのメモ。

1. Termuxの入手とUbuntuのインストール

メインの流れはここ(【簡易版:Androidのブラウザで実現するpython環境】機械学習(pytorch, scikit-learn)や実用的なプログラミング(jupyterlab, pandas, matplotlib, strearmlit)の環境構築について)を参考にした。

1.1. F-DroidからTermuxを入手

F-Droid版のTermuxを入手。このときのTermuxはバージョン0.118.0(118)。

1.2. Ubuntuをインストール

Termuxをインストールしたら、以下のコマンドを実行。

$ pkg update -y
$ pkg upgrade -y
$ termux-setup-storage # Termux上では /data/data/com.termux/files/home/storage
$ pkg install proot -y
$ pkg install proot-distro -y
$ proot-distro install ubuntu

1.3. Ubuntu環境の設定

地域と言語の設定

# apt update
# apt upgrade -y
# apt install locales -y
# apt install vim -y
# vim /etc/locale.gen # ja_JP.UTF-8のコメントアウト(#)を外す
# locale-gen
# update-locale LANG=ja_JP.UTF-8
# apt install tzdata

一般ユーザーの追加(u305fはユーザー名)

# apt install adduser
# adduser u305f

sudo権限の付与

# apt install sudo -y
# gpasswd -a u305f sudo
# cat /etc/group | grep sudo
# visudo
u305f ALL=(ALL:ALL) ALL # この内容を追記(u305fはユーザー名)

xonshを入れておく(optional)

# apt install xonsh

Ubuntuを出て、Termuxの.bashrcに自動ログイン用のコマンドを書き込み

# exit
$ echo 'proot-distro login --user u305f ubuntu' >> ~/.bashrc
$ exit

1.4. 一般ユーザーの環境を設定

Termuxを再起動すると一般ユーザーでUbuntuにログインする。まずは言語環境の設定。

# bash用
$ echo 'export LANG=ja_JP.UTF-8' >> ~/.bashrc
$ echo 'export LANGUAGE=ja_JP:ja' >> ~/.bashrc
$ echo 'export SCREENDIR=$HOME/.screen' >> ~/.bashrc

# xonshは以下の内容を.xonshrcに書き込む(echoだと環境変数が代入されてしまう…)
$LANG = 'ja_JP.UTF-8'
$LANGUAGE = 'ja_JP:ja'
$SCREENDIR '=$HOME/.screen'
$PROMPT = '{WHITE}[{BLUE}{user}{WHITE}@{hostname}:{#E26B4F}{cwd}{WHITE}]{#E9A963}$ ' # 自分の好みで設定

xonshをログインシェルとして使う場合は一般ユーザーで以下を実行しておく。

$ chsh -s $(which xonsh)

Androidsshで接続できるようにするとコマンド入力など諸々が楽になる。「termuxでssh」や「TermuxでSSH Serverを起動する」を参考にして設定できるが、一度接続して満足して以降は使わなくなったので説明を省略する。

2. Pythonの自力ビルド

メインの流れはここ(TermuxにubuntuをインストールしてPythonを導入する)を参考にした。デフォルトで入るpython3とpipはエラーが発生して正しく動かないのと、miniforgeは全く使えないので自分でPythonをビルドする。今回はPython-3.12.2を使用。スマートフォンタブレットの性能が貧弱だとビルドに1日くらいかかる。

# ビルドに必要なパッケージをインストール
$ sudo apt install build-essential libbz2-dev libdb-dev libreadline-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libsqlite3-dev libssl-dev zlib1g-dev uuid-dev tk-dev

# https://www.python.org/ftp/python/3.12.2/からダウンロード
$ wget https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.xz
$ tar xJf Python-3.12.2.tar.xz
$ cd Python-3.12.2
$ ./configure
$ make
$ sudo make install

# インストールを確認
$ which python3
$ which pip

これでpython3とpipが使えるようになる。

3. Jupyterlabの導入

あとは普通にpipでJupyterlabをインストール。pip3を使用することに注意。

$ pip3 install jupyterlab jupyterlab-language-pack-ja-JP numpy scipy pandas matplotlib seaborn

Rの環境も整備する。

$ sudo apt install r-base -y

# JupyterlabでRを使えるようにする。
$ sudo apt install libzmq3-dev libcurl4-openssl-dev libssl-dev jupyter-core jupyter-client -y
$ R
> install.packages('IRkernel')
> IRkernel::installspec()

Jupyterの拡張機能を色々使うためにNode.jsをインストール

$ sudo apt install nodejs npm

4. Jupyterlabの実行

これで動く!(はず)

$ jupyter lab

5. ターミナルの見た目の変更など(optional)

bashやxonshの設定だとなかなかうまく見た目を(思ったように)調整できないので、Starshipを使ってプロンプトをカスタマイズする。

5.1. Nerd fontsの導入

Nerd fontsからプロンプトの表示のための好みのフォントをダウンロードする。

$ wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.1.1/UbuntuMono.zip
$ unzip UbuntuMono.zip
$ cp ~/UbuntuMono/UbuntuMonoNerdFontMono-Regular.ttf .termux/font.ttf

フォントのサイズは「Set Termux font size through command line」の以下のコメントにある通りにすれば変更できる。

Maybe not what you want, because not a scriptable command, but you can use keys: ctrl alt- and ctrl alt + (actually =; you needn't shift it).

5.2. Starshipの導入

【初心者向け】超簡単に黒い画面をカラフルにする方法〜Starship〜」の方法に従ってStarshipを導入する。

$ curl -sS https://starship.rs/install.sh | sh

bashの場合は以下を実行。

$ echo 'eval "$(starship init bash)"' >> ~/.bashrc

xonshの場合は以下を.xonshrcに追加する。

$ execx($(starship init xonsh))

シェルを起動し直すか、sourceで設定ファイルを読み込み直せばStarshipが起動する。

5.3. カスタマイズ

Starshipの設定ファイルを作成する。

$ mkdir ~/.config
$ touch ~/.config/starship.toml

プリセットを読み込んでも良い。

$ starship preset gruvbox-rainbow -o ~/.config/starship.toml

Termuxではcondaの仮想環境が使用できないので、そのままで良い。PCではconda環境を表示できるようにした以下のstarship.tomlを使用している。

"$schema" = 'https://starship.rs/config-schema.json'

format = """
[](color_orange)\
$os\
$username\
[](bg:color_yellow fg:color_orange)\
$conda\
$directory\
[](fg:color_yellow bg:color_aqua)\
$git_branch\
$git_status\
[](fg:color_aqua bg:color_blue)\
$c\
$rust\
$golang\
$nodejs\
$php\
$java\
$kotlin\
$haskell\
$python\
[](fg:color_blue bg:color_bg3)\
$docker_context\
[](fg:color_bg3 bg:color_bg1)\
$time\
[ ](fg:color_bg1)\
$line_break$character"""

palette = 'gruvbox_dark'

[palettes.gruvbox_dark]
color_fg0 = '#fbf1c7'
color_bg1 = '#3c3836'
color_bg3 = '#665c54'
color_blue = '#458588'
color_aqua = '#689d6a'
color_green = '#98971a'
color_orange = '#d65d0e'
color_purple = '#b16286'
color_red = '#cc241d'
color_yellow = '#d79921'

[os]
disabled = false
style = "bg:color_orange fg:color_fg0"

[os.symbols]
Windows = "󰍲"
Ubuntu = "󰕈"
SUSE = ""
Raspbian = "󰐿"
Mint = "󰣭"
Macos = "󰀵"
Manjaro = ""
Linux = "󰌽"
Gentoo = "󰣨"
Fedora = "󰣛"
Alpine = ""
Amazon = ""
Android = ""
Arch = "󰣇"
Artix = "󰣇"
CentOS = ""
Debian = "󰣚"
Redhat = "󱄛"
RedHatEnterprise = "󱄛"

[username]
show_always = true
style_user = "bg:color_orange fg:color_fg0"
style_root = "bg:color_orange fg:color_fg0"
format = '[ $user ]($style)'

[directory]
style = "fg:color_fg0 bg:color_yellow"
format = "[ $path ]($style)"
truncation_length = 3
truncation_symbol = "…/"

[conda]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $environment): ](fg:color_fg0 bg:color_yellow)]($style)'

[directory.substitutions]
"Documents" = "󰈙 "
"Downloads" = " "
"Music" = "󰝚 "
"Pictures" = " "
"Developer" = "󰲋 "

[git_branch]
symbol = ""
style = "bg:color_aqua"
format = '[[ $symbol $branch ](fg:color_fg0 bg:color_aqua)]($style)'

[git_status]
style = "bg:color_aqua"
format = '[[($all_status$ahead_behind )](fg:color_fg0 bg:color_aqua)]($style)'

[nodejs]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'

[c]
symbol = " "
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'

[rust]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'

[golang]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'

[php]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'

[java]
symbol = " "
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'

[kotlin]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'

[haskell]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'

[python]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)'

[docker_context]
symbol = ""
style = "bg:color_bg3"
format = '[[ $symbol( $context) ](fg:#83a598 bg:color_bg3)]($style)'

[time]
disabled = false
time_format = "%R"
style = "bg:color_bg1"
format = '[[  $time ](fg:color_fg0 bg:color_bg1)]($style)'

[line_break]
disabled = false

[character]
disabled = false
success_symbol = '[](bold fg:color_green)'
error_symbol = '[](bold fg:color_red)'
vimcmd_symbol = '[](bold fg:color_green)'
vimcmd_replace_one_symbol = '[](bold fg:color_purple)'
vimcmd_replace_symbol = '[](bold fg:color_purple)'
vimcmd_visual_symbol = '[](bold fg:color_yellow)'