Bash on Ubuntu on Windows トラブル集
cygwin から Bash on Ubuntu on Windows への移行作業を行うにあたり、起きたトラブルとその解決策を記載していきます。
まだまだ移行中なので随時追記します。
sudo を実行すると警告が出る
色々なところですでに言及されています1が、 sudo
を実行すると以下のような警告が表示されました。
sudo: unable to resolve host MSEDGEWIN10
hosts に hostname を追記することで解決しました。
解決策
/etc/hosts
の 127.0.0.1
に hostname
を追記します。
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
自体を置き換えるという 記事 もありました。
解決策
-
.bashrc
内で zsh を呼び出す。 - bash.exe 起動時のコマンドとして引き渡す。
bash.exe ~ -c /bin/zsh
-
/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
経由でファイルの共有を行う。