#
たった一つのスクリプトファイルだけで…魔法のように…Linuxライク環境が構築できる!#
知り合いのPCにスクリプトを持ち込んで「おすすめ環境をささっと構築してあげる」なんてこともできます!#
国内外の多くの企業において何千台ものPCにCygwin環境をセットアップするために実際に用いられています。
Cygwinのインストールは手間がかかるものだと思われてます(実際にそうです)が、この手法を使えば「サクラエディタのインストールよりも簡単」ということにもなります。
Cygwinを使えばWindows上にPOSIX/LINUXに近い環境を構築できます。(bash,fortran,gcc,g++,git,emacs,perl,python2,python3,ruby,vi等も使えます(脚注1))
通常のCygwinのインストール方法ではPCの管理者ユーザーでないとインストールできませんが、このスクリプトでは標準ユーザーでもインストールができます。
この記事への短縮URLを登録しました。http://bit.ly/cyginstでアクセスできます。このアドレスにアクセスすると自動的に http://qiita.com/javacommons/items/1a182f187fd2a8df29c2 (この記事のURL)にリダイレクトされます。
下の画面は「emacs-w32」パッケージ(脚注2)をインストールして利用しているところ。
#
2017/03/30追記: 管理者ユーザーでなくてもインストールできるようにスクリプト(バッチファイル)を修正しました。Cygwinの通常のインストール方法では、標準ユーザーでログインしている時には、管理者のパスワードを入力する必要がありましたが、このスクリプトでは標準ユーザーでもインストールが可能になりました。他人のPCにインストールさせてもらうとか、お父さんが管理者のPCにこっそりインストールするとか…できますね!
#
2017/04/01追記: 特にパッケージを指定しなくても、bashとviはデフォルトでインストールされます。(viは「VIM - Vi IMproved」ですが、コマンドは「vi」または「view」です) パッケージ名に「git」を指定することでgitも容易に導入できます。また、「set CYG_PKGS=」というふうにパッケージを全く指定しなくてもインストールできるようにスクリプトを修正しました。
#
2017/04/01追記: この記事への短縮URLを登録しました。http://bit.ly/cyginstでアクセスできます。このアドレスにアクセスすると自動的に http://qiita.com/javacommons/items/1a182f187fd2a8df29c2 (この記事のURL)にリダイレクトされます。
はじめに
1台のPC上に、インストールするパッケージの違うCygwinの環境を複数作ったり、32bit版と64bit版の環境を混在させたり、複数のマシンで同じパッケージのCygwin環境をセットアップしたり・・・という時に役立つテクニックを(再度)ご紹介します。
Cygwinのセットアッププログラム(「setup-x86.exe」または「setup-x86_64.exe」)のコマンドライン引数を使うやり方で、あまり知られていないテクニックですが、(初期)パッケージ管理のためのベストプラクティスとも言えるでしょう。
今回の改訂(バージョンアップ)では、複数インストールした環境のそれぞれの名前をウィンドウのタイトルやコマンドプロンプトに表示させるようにしたことで、複数のシェルウィンドウを立ち上げた時でもどの環境なのかが一目でわかるようになりました。また、環境名とともに「Cygwin32」または「Cygwin64」という表示もされるので、32bit Cygwinなのか64bit Cygwinなのかも即座に判別できます。
まるで、あなたのPCの中で複数のLinux VM(Linux仮想マシン)を飼うようなものです。Python開発、Ruby開発…諸々の用途毎に開発環境が要るわけですから、複数の開発プロジェクトに携わる場合にも重宝するでしょう。お気に入りのviやEmacsを利用できるので作業効率も大幅アップ間違いなし!
また、一度環境が完成してしまえば、スクリプトファイル(単なるテキストファイル)を持っていくことで、どのPCにも同じ環境を再現(再構築)できるのです。
- すでにCygwinを通常の方法でインストールしている場合に、この記事で紹介する方法でCygwinをインストールしても既存のCygwin環境に影響を与えません。また、この記事で紹介する方法でインストールした環境が要らなくなったらフォルダ(下の例での「project1」とか「project2」)を個別に消す(削除する)だけでOKです。気軽にお試しください!
- 以前に投稿した記事で同様の内容を紹介しました。非常に単純なスクリプト(バッチファイル)で分かりやすいので、その記事は修正せずに置いておきますが、今回の記事で紹介するスクリプトには以下のような「改善」が盛り込まれています。
前回の投稿(スクリプト)からの改善点:
- 事前に(手作業で)、Cygwinのセットアッププログラム(setup-x86.exe や setup-x86_64.exe)をダウンロードする必要がなくなりました。カレントディレクトリにセットアッププログラムが存在しない場合には、スクリプトが自動的に判断してダウンロードしてくれます。ということで、(今回は)インストールスクリプト単体で持ち歩けば良くなったので管理と運用が一段と楽になりました。
- 複数のCygwin環境をインストールした場合でも環境名(以下のスクリプト内の「CYG_NAME」で指定した文字列)が、起動用バッチファイルの名前に含まれているので、デスクトップ等にショートカットを作成する際にいちいち環境ごとにリネームする必要がなくなりました。(前回の記事で紹介したスクリプトでは、どの環境も全て「Cygwin.bat」という名前でしたが、改訂版では「Cygwin32 @project1.bat」のように起動用のファイルの名前がユニークになりました。ファイル名で環境名と32bit環境なのか64bit環境なのかが確認できます)
- Cygwinシェル(bash)のプロンプトやタイトルバーに環境名(以下のスクリプト内の「CYG_NAME」で指定した文字列)が表示されます。ウィンドウを一目みるだけで、どの環境なのかがわかります。タスクバーのサムネイルにも環境名が表示されるので、異なる環境のCygwinシェルウィンドウを立ち上げている場合でも、タスクバーから復元(表示)させたいウィンドウを容易に選択できます。
- Windowsの標準ユーザーでも(管理者ユーザーでなくても) Cygwinのインストールが行えるようになりました。(2017/03/30に可能になりました)
スクリプト(インストールスクリプト)は「バッチファイル」として書かれています。
bashスクリプトの方がかっこいいと思われている方も多いでしょうが…Windows上で作業するのなら「バッチ」も使い処があります。(Cygwinをインストールしたら、存分にbashスクリプトを使いまくりましょう!)
このインストールスクリプトではバッチファイル(バッチ処理)の中級以上のテクニックがふんだんに使われていますから解析してみてください。
利用方法
1. インストールスクリプトの準備
インストールするフォルダを準備します。
- Cドライブの直下は問題があるので避けてください(Dドライブ、Eドライブ…の直下はOK。Cドライブ配下でも「C:\cyginst」とかはOKです。)。
- インストールするフォルダのパスに空白や日本語を含めないでください。
- また、インストールするフォルダのパスに「#」等の特殊記号も含めない方が良いみたいです。
- この記事のサンプルでは「Z:\dev\cygwin」というフォルダを作成して用いました。
よく分からない場合は、デスクトップにスクリプトを置いても良いです。また、管理者ユーザーでなくても「C:\Users\Public」フォルダの下には自由にフォルダが作れます。
そのフォルダの中に以下のテキストを保存します。名前は「project1.bat」としてください(バッチファイルの名前は何でも良いのですが、テキスト内で「set CYG_NAME=project1」としているので「project1」というファイル名にします。拡張子は必ず「.bat」にします)。
- 尚、エクスプローラで「拡張子が表示される」設定にして作業をしないと「project1.bat.txt」というファイル名になっていまうことがあります。エクスプローラの拡張子表示設定については、こちら※等をご覧ください。
REM URL: http://bit.ly/cyginst
REM Last Update: 2017/04/01 07:11
setlocal
set SCRIPT=%~0
for /f "delims=\ tokens=*" %%z in ("%SCRIPT%") do (
set SCRIPT_CURRENT_DIR=%%~dpz
)
REM --- 編集するところ(ここから↓) ---
set CYG_NAME=project1
set CYG_BITS=32
set CYG_PKGS=emacs-w32,git,python2
REM --- 編集するところ(ここまで↑) ---
if "%CYG_PKGS%"=="" (
set CYG_PKGS=bash
)
set CYG_SETUP=
if "%CYG_BITS%"=="32" (
set CYG_SETUP=setup-x86.exe
) else if "%CYG_BITS%"=="64" (
set CYG_SETUP=setup-x86_64.exe
) else (
echo CYG_BITS must be 32 or 64. [Current CYG_BITS: %CYG_BITS%] Aborting!
pause
exit
)
if not exist "%SCRIPT_CURRENT_DIR%%CYG_SETUP%" bitsadmin /TRANSFER "%CYG_SETUP%" "http://www.cygwin.com/%CYG_SETUP%" "%SCRIPT_CURRENT_DIR%%CYG_SETUP%"
set CYG_ROOT=%SCRIPT_CURRENT_DIR%%CYG_NAME%
set CYG_SITE=http://mirrors.kernel.org/sourceware/cygwin/
if not exist "%CYG_ROOT%\pkg" mkdir "%CYG_ROOT%\pkg"
%CYG_SETUP% -q -W --packages="%CYG_PKGS%" ^
--root="%CYG_ROOT%" ^
--local-package-dir="%CYG_ROOT%\pkg" ^
--site=%CYG_SITE% ^
--no-admin ^
--no-shortcuts
if exist "%CYG_ROOT%\Cygwin.bat" move "%CYG_ROOT%\Cygwin.bat" "%CYG_ROOT%\Cygwin%CYG_BITS% @%CYG_NAME%.bat"
"%CYG_ROOT%\bin\bash.exe" -c "/usr/bin/sed -i -e 's/0;[\]w[\]a/0;Cygwin%CYG_BITS% @%CYG_NAME% \\\\w\\\\a/g' -e 's/[\]u@[\]h/\\\\u@%CYG_NAME%\\(Cygwin%CYG_BITS%\\)/g' /etc/bash.bashrc"
endlocal
pause
2. インストールスクリプトの起動
project1.bat をダブルクリックして実行します。「Cygwin Setup」ウィンドウが開きプログレスバーが表示されます。「Cygwin Setup」ウィンドウとは別にコマンドプロンプトも開きます。コマンドプロンプトにはインストール時に実行されるコマンドの詳細が表示されていきます。
インストールが完了すると、「Cygwin Setup」ウィンドウが閉じます。以下のようにコマンドプロンプト内で「続行するには何かキーを押してください...」と表示されたら、このコマンドプロンプトウィンドウを閉じて構いません。
インストールスクリプト(project1.bat)のあるフォルダの中に(project1.bat の隣に)project1という(スクリプト内のCYG_NAMEと同じ)名前のフォルダができています。ここにCygwinがインストールされています。
「project1」フォルダを開いて中身を確認してみます。
「Cygwin32 @project1.bat」をダブルクリックして、Cygwinシェル(bash)を起動します。
起動したCygwinシェル(bash)ウィンドウを最小化して、タスクバーのアイコンにマウスカーソルを重ねてみてください。
3. インストールスクリプトの再実行
「project1.bat」をテキストエディタで再度開いて「set CYG_PKGS=emacs-w32,git,python2」という風になっている部分を修正しましょう。
例えば、「set CYG_PKGS=emacs-w32,git,python2,ruby」のように変更して保存します。「project1.bat」を再実行するとRubyが追加でインストールされます。
パッケージを増やして「project1.bat」を再実行する場合には「project1」フォルダーを残したまま(上書きで)実行してください。既にインストール済みのパッケージについてはダウンロードもインストール処理もされず、追加で指定したパッケージのみがダウンロードおよびインストールされます。再インストール後、「Cygwin32 @project1.bat」を起動して追加されたパッケージの確認をしてください。
CYG_PKGSにパッケージを追加する一方の場合は全く問題がないのですが、逆に、CYG_PKGSからパッケージ指定を削除した場合はインストールスクリプトを再実行しても、環境から当該パッケージは削除されません。(パッケージが余分に入っていても問題ないケースが多いと思いますが)他のマシンにインストールスクリプトを転送(コピー)して実行した場合にはパッケージ指定を解除した分がインストールされないわけですから、同一の環境を構築してテストすることを保証するために、(上記の例では)「project1」フォルダを完全削除した上でインストールスクリプトを再実行して指定解除したパッケージを一掃しておくのも良いかもしれません。
「project1」環境を使って有意な作業を行った場合には、「project1」フォルダを削除する前に、フォルダ内の「etc」「home」「usr\local」等のディレクトリをバックアップしておくこともお忘れなく。
4. 自分でインストールスクリプトを作成する際の変更点
project1.bat をコピーして project2.bat を作成します。
スクリプト内で変更するのは以下の部分だけです。他の部分は変更しないでください。
REM --- 編集するところ(ここから↓) ---
set CYG_NAME=project1
set CYG_BITS=32
set CYG_PKGS=emacs-w32,git,python2,ruby
REM --- 編集するところ(ここまで↑) ---
- 「set CYG_NAME=project1」という行の「project1」を任意の名前に変更します。この名前でフォルダーができるので半角の英数字およびハイフン、アンダースコア、ピリオド等の文字で名前を構成しましょう。ここでは「project2.bat」というファイル名にしましたので、「set CYG_NAME=project2」という風にファイル名と合わせておくと良いと思います。
- 32bit版のCygwinをインストールするか、64bit版のCygwinをインストールするかは「set CYG_BITS=32」の部分を修正することで切り替わります。64bit版をインストールする場合は「set CYG_BITS=64」とします。(※ 一度インストールスクリプトを実行したら決してこの値を変更してはなりません。インストール後に変更したい場合には、project2フォルダ(CYG_NAMEで指定した名前のフォルダ)を完全に削除してから、インストールスクリプトを再実行してください)
- 「set CYG_PKGS=emacs-w32,git,python2,ruby」となっている個所の「emacs-w32,git,python2,ruby」の部分を変更します。カンマ区切りでCygwinのパッケージの名前を列挙します。(パッケージ名は、「setup-x86.exe」または「setup-x86_64.exe」を手動で起動するなどして調べてください。または、ここでもパッケージ名を調べられます⇒ https://cygwin.com/packages/package_list.html) ※
最後に
なんか、面倒くさい(回りくどい)ことをしているようですが、この手順でインストールしておくと:
- 自分で作ったインストールスクリプト(上記の project1.bat や project2.bat)を持ち歩く(またはGoogleドライブやDropboxに入れておく)だけで、同じ環境がどこでも作れます。(スクリプトをダブルクリックして待つだけ。パッケージの入れ忘れとかもなし!)
- 複数の、そして32bit版と64bit版の混在した開発環境を容易に構築できます。
- 再現性。インストールスクリプトを保持しておけば何時でも何処でも同じパッケージの環境を構築(再現)できます。通常の方法でセットアップすると、パッケージを手作業でポチポチ選択するので、そこが面倒だったり…しかも選択もれがあったり…。
- インストールスクリプト(バッチファイル)のCYG_PKGS変数の設定を見るだけで、どのパッケージがインストールされているかすぐに分かります。また、CYG_BITS変数の設定を見れば、32bit環境をインストールしたのか64bit環境をインストールしたのかも確認できます。
Cygwinシェルのウィンドウタイトルや、コマンドプロンプトの従来ホスト名が表示されていた部分に「環境名(CYG_NAME)」を表示するようにしたことで、あたかも「複数のLinux(UNIX)マシンを使い分けている」ような感覚になると思います。
開発プロジェクト毎に、Cygwinにインストールしなければならないパッケージが異なったり、32bit版と64bit版を使い分けないといけないこともあるので(国内外のお客さんや現場の要望もあり)…このスクリプト(および環境構築手順)を編み出しました。
ついでに読んでほしい記事!
この記事内で「CYG_PKGS」に「emacs-w32」というパッケージを指定していました。単なる「emacs」パッケージではなく「emacs-w32」を入れているのには理由があるんです。よろしければ以下の記事も併せてお読みください。
参考(スクリーンショットについて)
- この記事のスクリーンショットは「Screenpresso」というソフトを使って撮りました。(参考記事 ⇒ 機能はSkitch超え!画像に美しい注釈を加えられる「Screenpresso」がスゴい) ※
- また、この記事を書く際には、スクリーンショットを画像ファイルに保存することなくクリップボードからQiitaに画像を直接(魔法で!)アップロードしました。(参考記事 ⇒ http://qiita.com/javacommons/items/344c752ccd46f485126c) ※
2017/04/01-07:26 938views
2017/03/29-20:24 825views
2017/03/27-07:28 731views
2017/03/25-11:45 638views
2017/03/24-16:56 548views
2017/03/24-11:15 383views
2017/03/24-04:17 142views
https://cygwin.com/packages/package_list.html『Cygwin Package List』 ↩
http://qiita.com/javacommons/items/f1d51413bf29d39dc060『Cygwin では emacs パッケージではなく emacs-w32 パッケージをインストールしましょう!』 ↩