【学習メモ】仮想ドライブにCygwinを入れてマウントして使う

More than 1 year has passed since last update.


はじめに

X Windowを利用するのに、CygwinをWindowsにインストールします。

Cygwinのインストールには時間がかかります。

Windows機が増えてインストールし直すのは面倒です。

というわけでCygwinを入れたマスタードライブをNASに保存し、使用するWindowsに複製することでどのWindowsでも使えるようにします。

Windowsにログオンしたときにマウントされるようにします。

マスター+差分ディスクの構成で利用します。


仮想VHD (VHDX)の準備

c:\tempディレクトリを使って作業します。


VHDの作成

いつのまにか、Windows 10でコンピューターの管理->ディスクの管理からVHDの作成が使えなくなっています。

コマンドプロンプトから作成します。


VHDの作成

C:\Users\(yourname)> mkdir c:\temp

C:\Users\(yourname)> diskpart
DISKPART> create vdisk file="c:\temp\cygwin-x11.vhdx" maximum=16384 type=expandable

100% 完了しました

DiskPart により、仮想ディスク ファイルが正常に作成されました。



アタッチと初期化とフォーマット

アタッチします。


アタッチ

DISKPART> select vdisk file="c:\temp\cygwin-x11.vhdx"

DiskPart により、仮想ディスク ファイルが選択されました。

DISKPART> attach vdisk

100% 完了しました

DiskPart により、仮想ディスク ファイルがアタッチされました。


初期化します。

ディスクを間違わないように二重三重にチェックします。

下記の場合、作成した仮想VHDはディスク3にあたります。


初期化

DISKPART> list disk

ディスク 状態 サイズ 空き ダイナ GPT
### ミック
----------- -------------- -------- --------- --- ---
ディスク 0 オンライン 500 GB 2048 KB *
ディスク 1 オンライン 500 GB 2048 KB *
ディスク 2 オンライン 500 GB 2048 KB *
* ディスク 3 オンライン 16 GB 16 GB *

DISKPART> clean

DiskPart はディスクを正常にクリーンな状態にしました。

DISKPART> convert gpt

DiskPart は選択されたディスクを GPT フォーマットに正常に変換しました。

DISKPART> create partition primary

DiskPart は指定したパーティションの作成に成功しました。

DISKPART> list partition

Partition ### Type Size Offset
------------- ---------------- -------- -------
Partition 1 予約 15 MB 17 KB
* Partition 2 プライマリ 15 GB 16 MB


フォーマットします。


フォーマット

DISKPART> format fs=ntfs label=cygwin64 quick

100% 完了しました。

DiskPart は、ボリュームのフォーマット を完了しました。


マウントします。


ドライブレターNでマウント

DISKPART> assign letter=n

DiskPart はドライブ文字またはマウント ポイントを正常に割り当てました。

DISKPART> exit


もしディスクが選択されていない場合、select disk *、パーティションが選択されていない場合はselect partition *で選択します。


参考資料

仮想ディスクをコマンドラインから作成・管理する(www.atmarkit.co.jp)

Q.【HDD】GPT形式でハードディスクをフォーマットしたい (コマンドプロンプト版)(qa.elecom.co.jp)

エレコムがコマンドプロンプトでFAQを作成していることに驚きです。


Cygwinのインストール

参考資料のURL先を見ながらインストールします。


インストール内容

インストーラー

https://cygwin.com/setup-x86_64.exe

Root Directory
-> N:\

Local Package Directory
-> C:\Users\(yourname)\Downloads

Category -> X11をインストール
Net -> OpenSSHをインストール
(openssh: The OpenSSH server and client programs)

30分くらい待つ



参考資料

3.3 CygwinによるX Window利用(itcweb.cc.affrc.go.jp)


起動のための準備


起動スクリプトの作成

N:\Cygwin.batを修正します。


Cygwin.batオリジナル

@echo off

N:
chdir N:\\bin

bash --login -i


バックアップをとって、以下の内容へ修正します。


Cygwin.bat入れ替え後

@echo off

%~d0
set PATH=%SystemRoot%\system32
set cygdrive=%~d0
set cygdir=%~dp0

cd %~dp0\bin

set MAKE_MODE=unix
set CYGWIN=noacl nontsec nosmbntsec
set SHELL=/bin/bash
sh.exe -c "/usr/bin/mintty - &"

exit


単にcygwinを起動するときはこのbatから起動します。

注意!!! ここでこのBAT起動すると、現在のWindowsのユーザーで、N:\homeにユーザーディレクトリが作成されてしまうので実行しません。


X Launchのショートカット作成

N:\にN:\bin\run.exeのショートカットを作成します。

ショートカットが作成できたら、リンク先を以下に変えます。


リンク先

%windir%\system32\cmd.exe /c start "%cd%" "bin\run.exe" /usr/bin/bash.exe -l -c /usr/bin/xlaunch.exe


作業フォルダは空白にします。

以上でCygwinの準備は終わりです。


デタッチする

DISKPART> select vdisk file=c:\temp\cygwin-x11.vhdx

DISKPART> detach vdisk

DiskPart によって、仮想ディスク ファイルがデタッチされました。

DISKPART> exit



NASの準備

共有フォルダに仮想VHDXをコピーします。

ここでは、\\NAS\cygwin\ディレクトリに、cygwin-x11.vhdxを保存したものとします。


コピーツールの作成

以下の2つのファイルを作成します。


\\nas\cygwin\cygwin-copy.bat

openfiles /local > NUL 2>&1 

if NOT %ERRORLEVEL% EQU 0 goto NotAdmin

REM cygwin-x11コピーツール

REM ディレクトリの作成
mkdir c:\cygwin

REM cygwin-x11.vhdxのダウンロード
REM IGP:200で40/100(MBps)程度の制限になります。15分程度かかります。
robocopy /IPG:200 "\\NAS\cygwin" "c:\cygwin" cygwin-x11.vhdx

REM 差分ディスク c:\cygwin\cygwin-diff.vhdxの作成
diskpart -s \\nas\cygwin\makediffdisk.txt

REM 自動マウント用スクリプトの作成
echo select vdisk file=c:\cygwin\cygwin-diff.vhdx > c:\cygwin\diskpart-cygwin-x11-diff-select-attach.txt
echo attach vdisk >> c:\cygwin\diskpart-cygwin-x11-diff-select-attach.txt
echo diskpart -s c:\cygwin\diskpart-cygwin-x11-diff-select-attach.txt > c:\cygwin\automount_cygwin.bat

REM 自動マウント用のスクリプトでマウントする
c:\cygwin\automount_cygwin.bat

REM タスクスケジューラの登録
schtasks /Create /RU SYSTEM /SC ONLOGON /TN automount_cygwin_x11 /TR "c:\cygwin\automount_cygwin.bat"

goto End

:NotAdmin
echo 管理者権限で実行してください。
pause
:End


管理者権限で実行するのはタスクスケジューラに登録するためです。

UTF-8で作成するときは先頭にchcp 65001を入れてください。ただしchcpをUTF-8に変えた状態でパスに2バイト文字が入った場合の動作確認はしていません。


\\nas\cygwin\makediffdisk.txt

create vdisk file="c:\cygwin\cygwin-diff.vhdx" parent="c:\cygwin\cygwin-x11.vhdx"



コピーの実行

\\nas\cygwinには、以下の3つのファイルがあると思います。


\\nas\cygwinに出来上がるファイル

cygwin-copy.bat

cygwin-x11.vhdx
makediffdisk.txt

NASのコピーBATを管理者権限で実行します。


コピーBATの実行

\\nas\cygwin\cygwin-copy.bat


完了すると、c:\cygwinには、以下の4つのファイルが出来上がり、cygwinがインストールされたNドライブがマウントされます。


c:\cygwinに出来上がるファイル

automount_cygwin.bat

cygwin-diff.vhdx
cygwin-x11.vhdx
diskpart-cygwin-x11-diff-select-attach.txt

以上で終了です。

1年くらい前にやった内容の焼き直しです。

Windowsで相対パスを書く上で、コマンドプロンプトで使える変数にたどり着くまですごい時間がかかった記憶があります。