Edited at

Bash on Ubuntu on Windows トラブル集

More than 3 years have passed since last update.


Bash on Ubuntu on Windows トラブル集

cygwin から Bash on Ubuntu on Windows への移行作業を行うにあたり、起きたトラブルとその解決策を記載していきます。

まだまだ移行中なので随時追記します。


sudo を実行すると警告が出る

色々なところですでに言及されています1が、 sudo を実行すると以下のような警告が表示されました。

sudo: unable to resolve host MSEDGEWIN10

hosts に hostname を追記することで解決しました。


解決策

/etc/hosts127.0.0.1hostname を追記します。


apt update / install でリポジトリにつながらない (ただし、 curl だとつながる)

インストールが完了して早速、 apt update をしようとしたら以下のようなエラーが出てリポジトリにつながりませんでした。

sudo apt update

[sudo] password for kobanyan:
Err http://archive.ubuntu.com trusty InRelease
Err http://archive.ubuntu.com trusty-updates InRelease
Err http://security.ubuntu.com trusty-security InRelease
Err http://archive.ubuntu.com trusty Release.gpg
Could not resolve 'archive.ubuntu.com'
Err http://security.ubuntu.com trusty-security Release.gpg
Could not resolve 'security.ubuntu.com'
Err http://archive.ubuntu.com trusty-updates Release.gpg
Could not resolve 'archive.ubuntu.com'
Reading package lists... Done
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/InRelease
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/trusty-security/InRelease
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty/Release.gpg Could not resolve 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/trusty-updates/Release.gpg Could not resolve 'archive.ubuntu.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/trusty-security/Release.gpg Could not resolve 'security.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.

ただし、

curl http://archive.ubuntu.com

を実行するとつながります。

apt install はというと、一見インストールできそうですが同様のエラーが出ました。

Issues を検索したところ同様の現象が 報告 されており、

私の環境でも報告者と同様に Symantec Endpoint Protection のファイアウォールで遮断されていました。

ファイアウォールを無効にすることでつながるようになりました。


解決策

セキュリティソフトのファイアウォールで遮断されていないか確認し、遮断されているようならば無効化する。


chsh でログインシェルを変更しても起動時に bash で起動する

chsh で zsh に変更しましたが、起動時に相も変わらず bash が起動します。

こちらも Issues に 報告 があり、自前で zsh を呼び出してやる方法が紹介されています。

また、 Qiita では /bin/bash 自体を置き換えるという 記事 もありました。


解決策



  1. .bashrc 内で zsh を呼び出す。

  2. bash.exe 起動時のコマンドとして引き渡す。

    bash.exe ~ -c /bin/zsh


  3. /bin/bash を置き換えてその中で zsh を呼び出す

2,3の方法では bash が実行されずに zsh が呼び出されるので、これらの方が挙動が近そうです。

ただし、いずれの方法でも $SHELL/bin/bash のままなので、一長一短なようです。


zsh 起動時に警告が出る (umask のデフォルトが 0000)

設定を進めていくと zsh 起動時に以下のような警告が表示されました。

zsh compinit: insecure directories, run compaudit for list.

Ignore insecure directories and continue [y] or abort compinit [n]?

指示に従い compaudit を実行すると、 git リポジトリからクローンしてきた zsh プラグインのディレクトリが表示されました。

該当のディレクトリのパーミッションを確認すると 777 です。

どうやらディレクトリ作成時のパーミッションのデフォルトがそうなって (umask 0000) しまっているようです。

こちらも Issues に 報告 がありました。

umask の値を変更することで警告が表示されないようになりました。


解決策

umask 0002

.bashrc 内で呼び出す。


Windows から編集したファイルが Ubuntu で開けなくなる

Ubuntu on Windows の各種ファイルは %LOCALAPPDATA%\lxss に存在しているため、ここ以下にあるファイルを直接 Windows から編集することができます。

しかし、編集・保存した直後から Ubuntu では操作不可になってしまいました。

$ ls -l

ls: cannot access sample.txt: Input/output error
total 188
drwxr-xr-x 2 kobanyan kobanyan 0 Oct 1 23:04 .
drwxr-xr-x 2 root root 0 Dec 31 1969 ..
-????????? ? ? ? ? ? sample.txt

Issues に 報告 があるように、 Windows と Ubuntu でのファイルシステムの差異により、この問題が発生しているようです。

Ubuntu から Windows のファイルを操作するための経路として /mnt が用意されているので、 Windows から Ubuntu のファイルを操作するのではなく、 Ubuntu から Windows のファイルを操作するようにしなくてはならないようです。


解決策

Windows から Ubuntu のファイルを直接操作してはならず、 /mnt 経由でファイルの共有を行う。