Bash on Ubuntu on Windows トラブル集

  • 15
    Like
  • 2
    Comment
More than 1 year has 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 経由でファイルの共有を行う。