やっぱりWSLでCentOSが使いたい(挫折編)

Bash On Windows、WSL(Windows Subsystem for Linux)で提供されているディストリビューションは ubuntu ですが、ubuntuの環境が動くんなら、他のディストリビューションも動くでしょ? というのが普通の感情(^^

ちょちょっとググってみると、やっぱりあります。
WSL Distribution Switcher ( https://github.com/RoliSoft/WSL-Distribution-Switcher )

Python3で書かれている一連のスクリプトツールのようですが、これを使うといろんなディストリビューションをインストールして切り替えて使えるようです! やったー!
ってなわけで、単純なオイラはすぐに Python の Windowsバイナリをインストールして、早速試してみました。

要するにこのツールは、LinuxディストリビューションのDockerイメージを取得・展開・切り替えの一連の手順をスクリプト化したもののようです。間違ってたらすみません。

で、結果的には、CentOSで運用できるところまではいかなかった・・・。いえ、一応CentOSをインストールできてbashは起動できたんですが・・・このエントリは、その時の備忘録です。

※ Pythonで書かれているので、Windows版のPython3バイナリをインストールしておく必要があります。cygwin環境のpythonだと dockerイメージの解凍に失敗してしまいました。この辺よく分かりません(m´・ω・`)m ゴメン…

上記サイトに行き、git 使っている方は、clone、使ってない方はzip書庫をダウンロードして適当なフォルダに展開してください。私は デスクトップに展開して作業しました。
ちなみに、Windows10のバージョンは Anniversary Update ( Windows10 v1607/Build14393 ) です。

まずは、README.mdに書かれている手順を行う前に、hook_postinstall_all.sample.sh というファイルをリネームして、hook_postinstall_all.sh にしときます。単に sample を消すだけです。
普通にインストールすると root のパスワードが設定されないので、困ることになるので、hook_postinstall_all.shを編集します。具体的には 下記の行をスクリプト上部のコメントが終わった直後ぐらいに追記しときます。

#rootのパスワード設定
ROOTPASSWD="0000" 

前準備完了。

1、get-source.py で Docker Hub 内の オフィシャルイメージを取得します。

僕の目的は CentOSの最新版なので、単に centos と指定。 たぶん動かないと思うけど CentOS6系なら ‘centos:6’ というような感じで指定するみたいです。指定の仕方は docker のまんまですね・・・。詳しくは上記サイトのREADME.md 参照。

C:\Users\xxx\Desktop\WSL>> python get-source.py centos

これで tarボールがダウンロードできました。

2、install.py で tarボールの解凍および切り替え

ダウンロードしたtarボールを指定するか、イメージ名を引数にして install.py を実行。

C:\Users\xxx\Desktop\WSL>> python install.py centos

これで、%localappdata%\lxss ディレクトリにある既存のubuntuが入った rootfs がリネームされ、新しい rootfs に先ほどのイメージが格納されます。
その後、hook_postinstall_all.sh が実行されます。

これで一応インストール完了。試しに bash を立ち上げて、/etc/redhat-release を見ると

$ cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

3、switch.py で切り替える

元の ubuntu に戻すときは、

C:\Users\xxx\Desktop\WSL>> python install.py ubuntu:trusty

引数なしで実行すると、インストールされているディストリビューションの一覧が表示されます。

C:\Users\xxx\Desktop\WSL>> python install.py
usage: ./switch.py image[:tag]

The following distributions are currently installed:

  - centos:latest*
  - ubuntu:trusty

To switch back to the default distribution, specify ubuntu:trusty as the argument.

4、sudo とかその他諸々がエラーで使えない!!!

さて、実はこれからです(笑)
CentOSがインストールされてやったー!と思って、以下のコマンドを叩くと・・・

$ sudo vi /etc/hosts
sudo: unable to create sockets: Socket type not supported

どうやら sudo コマンドが使えないみたい・・・。
README.mdには、その対策として、 alias sudo=”sudo -S” で回避するように、とのことですが、僕の環境だと同じエラーが出ます・・・。
仕方ないので、su でrootになって作業するしかありません・・・めんどくさーーーーーー!
他にも、localectl とか timedatectl とか なんちゃらctl が動かない。どーなっとんじゃー!?

ってな感じです。CentOS7自体まだ触ったことないんで・・・。ちなみに CentOS6はbash自体起動できず。まぁ、カーネルバージョンが違うので当たり前? これもよくわかんないです。

ってなわけで? おとなしく ubuntu に戻しました・・・。今後のWSLのアップデートに期待です・・・。次のWindows10のバージョンアップ( Creators Update でしたっけ?)でネットワーク関係のシステムコールがまともに使えるようになるんでしょうか・・・・???? 現状ネットワークドライブにアクセスできないので、まともに使えない・・・Apacheとかsambaとかフツーに使えるようにしてyo!!!

(m´・ω・`)m オネガイシマス。

WSL 早く対応して欲しい点

Windows10 + ubuntu
最初は、こんなの使いずらい・・・と思ってましたが、先人達のブログ記事とかを漁ってうちに、「これ、いいかも・・・」と思うようになってきました(^_^;; やっぱりWindowsでLinuxネイティブバイナリが動くのは魅力。かなりずーと前にFreeBSD(98)とwineでWindowsバイナリを(かろうじて)動いていたのを思い出します。今となっては(僕にとって)実験的な興味以外意味なかったけど。

でも・・・まだまだ機能的にcygwinには追いついていないかも・・・。

早急に対応して欲しい点。

  • まともに日本語が使えるようにしてほしい。おいらの環境では日本語が入力できない・・・。表示はまぁ、なんとかなるんですが、半角・全角で崩れる・・・これって別のターミナルエミュレータとかだとちゃんと入力できるのかなー?
  • ネットワークドライブにアクセスできない・・・。samba-clientとか入れてマウントしようと試みたけど、インターフェイスがなんちゃら・・・とかいうエラーでダメ。見えない。というか、アクセスできない。なんか方法あるのかなー???
  • やっぱり使い慣れた centos とか・・・他のOSにも対応してほしい・・・

追記:

よくよく考えてみれば、CMD.EXEから起動するWSLのbashって、コンソールログインと同じ扱いなのかな・・・だとすれば、WSLのubuntu側で日本語入力できるターミナルを入れないとダメって事? Linux・・・というかCentOSですが、インストール時や緊急時以外、コンソールからログインなんかしないし・・・もししても日本語を入力するような作業することはまずないので気付かなかった。だけど・・・コンソールログインして日本語ってそもそもできるの???? っていうレベルの知識しかないです、ハイ(笑)

DOSでいうFEPみたいなもの入れるのかなー?分からん。分からん。

久しぶりに懐が痛む買い物

8年ぶりにフルサイズ素子のデジイチを買い替え。

つい一ヶ月前まで、SONY Aマウントのデジイチ、α99の後継機種を長年待ち続けていたのですが、9月に入っても発表にならず・・・つい先日、フォトキナで突然のα99 IIの発表・・・。\(^O^)/! と逝きたいところですが・・・ソニーさん、発表遅すぎるんだよ。
もうしびれ切らして、キヤノンのEOS 5D MarkIV買ってもーたやん!!!(^_^;;;

cseaq0bumaaqwyl

最近SONYはFEマウントに注力してるし・・・この先Aマウントに以前のような展開を期待するのは無理かな・・・とか、ミラーをやめてトランスルーセントミラーとかいうイマイチなものに変わって・・・とか・・・ボディ内5軸手ぶれ補正とか捨てがたい機能もあるんですが・・・他諸々の理由であまり好きになれず・・・、結局 キヤノンのEOS 5D MarkIVを買ってしまいました。

やっぱり欲しいのは 正統派のデジタル一眼レフカメラであって、デジタル家電が欲しいわけじゃないんです・・・。ソニーは α900 を最後に一眼レフカメラの新規開発自体止めちゃったんだと思います。その後の製品を見る限り僕はそう思います。

10年くらい前にコニミノのαマウントに移行した時EFレンズは全部売ってしまったので、2年前にAPS-CサイズのEOS 70Dと同時に買った EF24-70mmf2.8LII 一本しか持っていない。
今回 5D MarkIV買った時のポイントで 単50mm/f1.4もゲット。新しいデジイチ購入のため2~3年前からちょっとずつ貯金はしてたんですが・・・今回でぶっ飛びました・・・。今度はレンズ沼にはまらないぞ!と心に誓う(^^;;

そして、もう一つ、買い物。

2年縛りが9月末で終わるので、この際だから大手キャリアやめてSIMロックフリーのiPhoneSE買って、IIJとかDTIとかの格安SIMにMNPしようかな・・・と思ってたんですが、なんと、iPhone7は日本だけ特別にFeliCa搭載の特別バージョンになるFeliCa搭載って話じゃないですか!(チップは載ってて、海外版はソフトウェア的に無効にしているだけだそうです)
これで、スマホケースにiDカードを入れて「なんちゃっておサイフケータイ」する必要もなくなる! しかも防水! トイレの中に落としても大丈夫!ってなわけで、32GBのマットブラックを購入。

img_0727

背面の「総務省指定」が眩しい。老眼で見えないけど(^_^;) たぶんスティーブジョブズが生きてたら絶対許さなかったはず(笑)
叩かれまくってたのホームボタンですが・・・全然違和感ないです。僕的にはこっちの方がいいかも。日付とか時間を変更するときにクルクルと回すとき、音だけじゃなく手にもフィードバックを感じるのもマルです。

さすがに「耳からうどん」は恥ずかしいですが・・・イヤホンジャックが無くなったはホントに痛い・・・けど、そのうちデフォルトがライトニングケーブルで、ミニプラグへの変換端子を付属、なんていう逆のイヤホンの商品も出てくるはず。

大きい買い物が2つ重なってしまい・・・懐が非常にお寒い状態です。
以上グチ終わり。

WiFiが使えない!?そうだ!ルーター化しよう。

と、いつもの素人発想の(今更CentOS6?)思いつき「やってみた」私的備忘録です(m_m)

関係ないですが・・・Windows10のAnniversary Updateして、WSL(BASH)入れたらいつのまにか、サービスにSSHサーバーが・・・。netstat -a | findstr LISTEN したら、22番ポートが立ち上がってるやんけ!しかも全解放状態で(笑) ググったらWindows10を開発者モードにするとSSHdがインストール?されるみたい・・・とほほ。とりあえずサービス無効にした。でも、こういうのちゃんと通知してくれないと・・・ある意味公式のバックドアやん・・・。まぁ、開発者モードだから文句は言えないか・・・。

本題です。

社内で割り当てられたIPアドレスは3つで、

  • 社内業務用PC(グループウェアとかメールとか専用・ガチガチにセキュリティ高め&監視対象)のWindows7
  • 開発用のメインPC(Windows10) Windows Defenderのみ
  • 検証用のサーバー(CentOS6.7)

Surface3でOneNoteをメモ帳代わりに常時使っているので、ちょっと前までは、メインPCのWindowsに、APモードで利用できるUSBドングルタイプの無線LAN子機をつけて通信させていました。内緒だけど(^^;

で、8/3のAnniversary Updateで、このUSBドングルの無線LAN子機のドライバがサポート外になったのか、APモードにすると設定画面が消えてしまい正常に繋げなくなりました。ドライバのバージョンアップを待っているのですが、どうも対応しなそうな感じ・・・。環境依存で何かエラーになってるのかなー?と思いつつ原因が分からず。とりあえず、ドライバのバージョンアップを気長に待ってみたい。

で、やっぱり社内LANに接続できないと、不便・・・ってことで、検証用のサーバーにクロスケーブルで接続させてCentOSをルーター代わりにしてNATすりゃいいや、と思い、以下の構成でとりあえずやってみる。

network

検証用サーバーにもSurface3にも余っているLAN口がないので・・・バッファローのUSB-NICを二つ買ってきてクロスケーブルで繋ぐ。思ったんだけど、わざわざクロスケーブル買う必要なかったかもしれない・・・最近のNICってケーブルの種類を自動認識するし。

Surface3に接続させたUSB3-NICは自動認識ですぐにリンクアップ完了。IPアドレスを10.0.0.2と指定。準備完了。
CentOS側は・・・USB2-NICは自動認識するも、やっぱり手動設定させなければ・・・めんどっちーな・・・。

まずはMACアドレス確認。(下記MACアドレスは実際の値ではありません。ご了承のほど)

# dmesg | tail
Slow work thread pool: Ready
usb 2-2: new high speed USB device number 2 using ehci_hcd
usb 2-2: New USB device found, idVendor=0b95, idProduct=7720
usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 2-2: Product: AX88772 
usb 2-2: Manufacturer: ASIX Elec. Corp.
usb 2-2: SerialNumber: 228729
usb 2-2: configuration #1 chosen from 1 choice
asix 2-2:1.0: eth1: register 'asix' at usb-0000:00:1d.7-2, ASIX AX88772 USB 2.0 Ethernet, aa:bb:cc:dd:ee:ff
usbcore: registered new interface driver asix

フムフム、ちゃんとeth1として認識してますな。ドライバは既に入ってんすね。ラクショー・ラクショー。MACアドレス(aa:bb:cc:dd:ee:ff)をコピーして、
設定ファイルをコピーして適当に修正後、リンクアップして確認・・・。

# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
(ここでMACとかGATEWAYとかIPとかUUIDとか修正)
(UUIDは /usr/bin/uuidgen で。)

(リンクアップして確認する)
# ifup eth1
Determining if ip address 10.0.0.1 is already in use for device eth1...

# ifconfig
eth0      Link encap:Ethernet  HWaddr 11:22:33:44:55:66  
          inet addr:192.168.1.101  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:178189 errors:0 dropped:0 overruns:0 frame:0
          TX packets:144306 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:128726184 (122.7 MiB)  TX bytes:49793405 (47.4 MiB)
          Interrupt:16 

eth1      Link encap:Ethernet  HWaddr aa:bb:cc:dd:ee:ff
          inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:76 errors:0 dropped:0 overruns:0 frame:0
          TX packets:76 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:8996 (8.7 KiB)  TX bytes:8996 (8.7 KiB)

ここで一旦クロスケーブルで接続して、Surface3側からpingしてみると、ちゃんと開通。
とりあえず、CentOS(eth1:10.0.0.1)とSurface3(10.0.0.2)の接続完了。

このままだと、社内LAN(192.168.1.0/24)にはパケットが飛ばないので、ここからNATの設定を試みる。
とりあえず、教科書どおりにやってみる。

# vi /etc/sysctl.conf
(net.ipv4.ip_forward = 1 に修正:異なるNIC間の転送を許可する。)

(設定を有効化)
# sysctl -p

(10.0.0.0/24のパケットを社内LANに繋がっているNICにNATして流す.用語の使い方間違ってます(m_m)
# iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE

(surface3からのパケットを社内LANへそのまま転送許可する。
# iptables -I FORWARD 1 -i eth1 -o eth0 -s 10.0.0.0/24 -j ACCEPT
# iptables -I FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT

ここでsurface3側から開発者用PC(192.168.1.102)にpingを打ってみると、ちゃんとパケットが到達。
この状態で、surface3の通知エリアにあるネットワークアイコンを見ると、ビックリマークが消え、インターネットアクセスに変わってます。一応surface3のEdgeで会社のホームページを見てみる。\(^O^)/

オールOK。設定を保存。

# service iptables save
iptables: ファイアウォールのルールを /etc/sysconfig/iptables に保存中: [  OK  ]

(ここでiptablesを再起動)
# service iptables restart
iptables: チェインをポリシー ACCEPT へ設定中nat filter [  OK  ]
iptables: ファイアウォールルールを消去中: [  OK  ]
iptables: モジュールを取り外し中:[  OK  ]
iptables: ファイアウォールルールを適用中: [  OK  ]
iptables: 追加のモジュールを読み込み中:nf_conntrack_ftp nf_conntrack_netbios_ns [  OK  ]

ってなわけで、CentOSの簡易ルーター化完了。

本当は、このUSB2-NICがCentOSマシンに接続された時だけ、上記手順をスクリプト化したファイルを実行させたり、USB2-NICが取り外された時に元の状態に戻すスクリプトを実行させたりしたいのですが、USB2-NICの接続状態を監視したりする方法とか、そういうのはどうやるんだろう・・・?

また暇になったら調べてみようっと。

WSL/Bash + CMD.EXE = やめてくれ!

Windows10 Anniversary Update、スタートメニューやその他いろいろ更新されましたが、開発者としての関心事はやっぱり “Windows Subsystem for Linux”(以下WSL)じゃないでしょうか。。。さっそく開発者モードにしてこの機能を有効にしてみました(^^)

僕はてっきりBash用のターミナルで動かすんでしょう??(これでコマンドプロンプトからおさらばさ!) と思ってましたが・・・まさかのコマンドプロンプト(CMD.EXE)立ち上げ、からの “bash”タイプ・・・。ここでかなりのガッカリ感が・・・。

Linuxは Redhat系のCentOSしか知らないので、apt-get とかよくわかんねーよ。とりあえず、sudo apt-get yumとかでパッケージ管理してしまおうかな(笑)
WSL自体よく仕組みが分かんないけど、ubuntuの他にも選択肢があればいいのになー、と素人考えはダメですか(^^;;;

当面 Cygwin で問題無い。っていうか、ホンモノが欲しかったらVMで用意すれば・・・同じことができるんじゃ・・・。そういえば、DockerのWindows版が出たってニュース記事があったし・・・。

なんにせよ、選択肢が多いとどれ使えば正解なのかよくわかりません・・・。使いやすい環境を自分で構築していく労力が無駄だなぁーと思うときはあります・・・。本来の仕事が効率的に前に進まない・・・。