Cygwinインストールメモ

# Cygwinのインストール

　Cygwinのインストーラは[Cygwin](https://www.cygwin.com/)からダウンロードできます。
　32ビット版と64ビット版があります。CPU／OSに合わせた方をダウンロードし、インストールします。


## 懸念事項


~~　cygwin1.dllがインストールされるフォルダにパスを通しておくと、コマンドプロンプトからCygwinのコマンドが実行できるようになります。~~
~~　ですが、cygwin1.dllのフォルダにパスを通しておくと、なぜか、Cygwinのパッケージ追加・削除時に5時間くらいかかる現象が、稀によく発生することがあります。Windows10再インストール時にCygwinを再インストールし、cygwin1.dll格納フォルダにパスを通さずに運用したところ、再インストール前に発生していた、謎の超長時間インストールの現象が発生しなくなりました。何かのバグが直っただけかもしれませんが．．．~~
2017年6月25日追記
　Cygwinのパッケージ追加・削除時に5時間くらいかかる現象ですが、上記のパスの設定ではなく、Visual Studio 20xxをインストールしたことの影響のようです。Visual Studio 2015 Communityをインストールしたところ100%の確立で再現するようになりました。
　Visual StudioをインストールするPCではCygwinではなくBash on Ubuntu on Windowsの方が安全かもです。


# apt-cyg
　apt-cygをインストールしておくと、Debian Linuxのapt-getの要領でパッケージ管理ができるようになります。
　apt-cygは[kou1okada/apt-cyg](https://github.com/kou1okada/apt-cyg)で開発されているbashスクリプトで、gnupg、gawk、wgetがインストールされている必要があります。


## apt-cygのインストール方法
 
a. cygwinインストーラでgnupg、gawk、wgetをインストールする。
b. [kou1okada/apt-cyg](https://github.com/kou1okada/apt-cyg)からapt-cygをダウンロードする。
c. apt-cygに実行権限を追加する。
 ```$ chmod +x apt-cyg```
d. 初期のリポジトリ設定を実行する。
 ```$ apt-cyg -m ftp://ftp.jaist.ac.jp/pub/cygwin/ update```
 
この後、
 ```$ apt-cyg install <package-name>```
で、指定したパッケージと依存関係にあるパッケージをインストールしてくれるようになります。
apt-cygのコマンドオプションは[apt-cyg/README.md](https://github.com/kou1okada/apt-cyg/blob/master/README.md)に書かれています。



## C言語開発に必要（そうな）パッケージのインストール

```
$ apt-cyg install autoconf automake binutils gettext gettext-devel \
    gcc gcc-core gcc-g++ gdb \
    gcc-mingw gcc-mingw-core gcc-mingw-g++ mingw-runtime \
    libgcrypt-devel libiconv libtool nasm patchutils pkg-config ncurses expat
```


## Apache2のインストール

```$ apt-cyg install apache2```

### httpdコマンドによる起動と停止

* Apacheの起動
```$ /usr/sbin/httpd.exe -k start```

* Apacheの停止
```$ /usr/sbin/httpd.exe -k stop```


### WindowsのサービスとしてApacheを登録する

* Windowsのサービスとして登録する
```$ cygrunsrv -I apache2 -d "Cygwin Apache2" -p /usr/sbin/httpd2 -a -DFOREGROUND -e "CYGWIN=server"```

* Apacheサービスの起動
```$ cygrunsrv -S apache2```

* Apacheサービスの終了：サービス終了
```$ cygrunsrv -E apache2```

* Apacheサービスの削除
```$ cygrunsrv -R apache2```


### httpd.conf

#### ユーザディレクトリの公開

```file:/etc/httpd/conf/httpd.confの変更
#LoadModule userdir_module modules/mod_userdir.so
↓ mod_userdir.soのLoad設定を有効にする
LoadModule userdir_module modules/mod_userdir.so

#User home directories
#Include conf/extra/httpd-userdir.conf
↓ userdir.confの読込みを有効にする
Include conf/extra/httpd-userdir.conf
```



### Cygwin Apache2でPHPを使う

#### apacheのphpモジュールのインストール
```$ apt-cyg install httpd-mod_php7```

#### 動作確認
/srv/www/test.phpを下記の内容で作成

```file:/srv/www/test.php
<? phpinfo(); ?>
```

ブラウザで http://localhost/test.php を参照し、PHPの設定情報が表示されれば、正しく設定されています。



### Cygwin Apache2でPythonを使う

#### apacheのphpモジュールのインストール
```$ apt-cyg install python-httplib2```

#### /etc/httpd/conf/httpd.confの設定変更

```file:/etc/httpd/conf/httpd.confの変更箇所
#LoadModule cgi_module modules/mod_cgi.so
↓ mod_cgi.soの有効か
LoadModule cgi_module modules/mod_cgi.so

#AddHandler cgi-script .cgi
↓ 拡張子.cgiの設定追加
AddHandler cgi-script .cgi
```

#### 動作確認

##### 下記の内容で/srv/www/cgi-bin/test.cgiを作成
```file:/srv/www/cgi-bin/test.cgi
#!/usr/bin/python
print 'Content-Type: text/html\n\n'
print "Hello Work ... orz"
```

##### パーミッション変更
```$ chmod 755 /srv/www/cgi-bin/test.cgi```

ブラウザで http://localhost/cgi-bin/test.cgi を参照し、「Hello Work ... orz」が表示されれば設定完了です。



## MySQLのインストール

```$ apt-cyg install mysql mysql-server```


### 初期設定

#### 管理者権限でCygwinを起動し、mysql_install_dbコマンドの実行
```
$ mysql_install_db

・・・結構時間かかる・・・

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:

'/usr/bin/mysqladmin' -u root password 'new-password'
'/usr/bin/mysqladmin' -u root -h hogehoge password 'new-password'

Alternatively you can run:
'/usr/bin/mysql_secure_installation'

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.

You can start the MariaDB daemon with:
cd '/usr' ; /usr/bin/mysqld_safe --datadir='/var/lib/mysql'

You can test the MariaDB daemon with mysql-test-run.pl
cd '/usr/mysql-test' ; perl mysql-test-run.pl

Please report any problems at http://mariadb.org/jira

The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Support MariaDB development by buying support/new features from MariaDB
Corporation Ab. You can contact us about this at sales@mariadb.com.
Alternatively consider joining our community based development effort:
http://mariadb.com/kb/en/contributing-to-the-mariadb-project/
```

#### 設定ファイルのコピー
```$ cp /usr/share/mysql/my-medium.cnf /etc/my.cnf```

#### MySQLサーバの起動
```$ /usr/bin/mysqld_safe --datadir='/var/lib/mysql' &```

#### root権限でMySQLサーバに接続
```$ mysql -u root```

##### MySQLのrootパスワードの設定
```mysql> SET PASSWORD FOR root@localhost=PASSWORD('ここにパスワードを指定');```

##### MySQL接続ユーザの確認
```mysql> SELECT user,host from mysql.user;```

#### MySQLサーバの停止
```$ kill `cat /usr/local/mysql/data/ホスト名.pid````

mysql_install_dbの実行ログを見た感じ、support-files/mysql.serverで起動制御できそうですが、件のファイルがどこにあるのかわかりませんでした。昔は、/usr/share/mysqlにインストールされたのですが．．．



## PostgreSQLのインストール

```$ apt-cyg install postgresql postgresql-client```


### 初期設定

　管理者権限でcygserver-configを実行し、cygserverの設定が必要です。
　一見、postgresqlとは関係なさそうに見えますが、Linuxカーネルが提供している共有メモリの仕組みをCygwin上で実行するためには必要なおまじないのようで、cygserverが起動していない状態でpg_ctl initを実行しても、途中でエラー終了します。

#### cygserver-configの実行

```
$ cygserver-config
Overwrite existing /etc/cygserver.conf file? (yes/no) yes
Generating /etc/cygserver.conf file


Warning: The following function requires administrator privileges!

Do you want to install cygserver as service?
(Say "no" if it's already installed as service) (yes/no) yes

The service has been installed under LocalSystem account.
To start it, call `net start cygserver' or `cygrunsrv -S cygserver'.

Further configuration options are available by editing the configuration
file /etc/cygserver.conf.  Please read the inline information in that
file carefully. The best option for the start is to just leave it alone.

Basic Cygserver configuration finished. Have fun!
```

#### cygserverの起動
```$ cygrunsrv -S cygserver```

cygserver起動後、pg_ctlコマンドを実行するとエラー終了しないはずです。



## SSH Server

### インストール

```$ atp-cyg install openssh```


### 設定

　管理者モードでCygwinを起動し、

```$ ssh-host-config```

を実行します。コンフィグ設定中に、いくつか質問されますが、ほとんどyesで問題ないはずです。
ssh-host-configでWindowsサービスとしてCygwin SSHを登録した場合、下記のコマンドでCygwin SSHの起動、停止を実行で決ます。

* Cygwin SSHサービスの起動
```$ cygrunsrv -S sshd```

* Cygwin SSHサービスの起動
```$ cygrunsrv -E sshd```

Cygwinをアンインストールする等の理由でCygwin SSHサービスを削除したい場合は、

```$ cygrunsrv -R sshd```

で削除します。


### SSHログインアカウント

　ssh-host-configコマンドを実行すると、Windowsの登録アカウントをもとにSSHログインアカウントが作成されます。が、Microsoftアカウントの場合、Windows上に保存されるアカウント名が若干短縮されることがあり、SSHログインするときに苦慮することがあります。
　C:\Users\の下の、たぶんこれだろうと思えるフォルダ名と、Windowsログインパスワードの組み合わせでSSHログインできるはずです。


## Windows機能の利用

### Windowsのファイルシステムを参照する

```$ cd cd /cygdrive/c/```

でCドライブが参照できます。Dドライブ以降は察してください。


### データCD／DVDのisoイメージ作成

　雑誌付録のデータCD／DVDを、バックアップがてらisoイメージで保存したい場合、下記のコマンドを管理者権限で実行するとisoイメージを作成できます。
 
 ```$ dd if=/dev/scd0 of=data.iso```
 
最近のノートPCはCD／DVDドライブ付いてないし、資格試験の問題集とかの付属DVDを入れ替える時とかに便利です。
ちなみに、音楽CDや映画／アニメ等の市販のDVDのisoイメージファイルは作れません。