sshで多段接続

仮想環境も1つならポートを転送して直接sshでも良いが、調子に乗ってたくさん作ってるとワケが分からなくなる。たくさんポートを開けるのもセキュリティ上良くないので、ホストを踏み台にしてホスト経由でsshすることにする。

公開鍵暗号の設定については詳しいサイトを参照すること。

最初に公開鍵暗号でログインする設定にする。ssh-keygenで鍵ペアを作成し、秘密鍵をローカルの~/.ssh/に保存。公開鍵をホストおよびコンテナ内の~/.ssh/authorized_keysに追記。公開鍵認証でホストにログインできることを確認(公開鍵認証が成功するとパスワードなしでログインできる)した後にホストの/etc/ssh/sshd_configを編集してパスワード認証を禁止する。

次にローカルの~/.ssh/configを作る。

$ vi ~/.ssh/config

ホストがlxchost.example.comでsshのポートは10000番、コンテナは仮想ブリッジ10.0.3.0/24に接続しsshのポートはデフォルトのままとする。

Host lxchost
        HostName lxchost.example.com
        User lxcadmin
        Port 10000
Host wordpress
        User wordpressadmin
        ProxyCommand ssh lxchost nc 10.0.3.2 22
Host owncloud
        User ubuntu
        ProxyCommand ssh lxchost nc 10.0.3.3 22
Host rails
        User ubuntu
        ProxyCommand ssh lxchost nc 10.0.3.4 22

こうすれHostで設定した名前で接続できる。Userでデフォルトのユーザーを指定しておけばユーザー名を省略できる。

$ ssh lxchost

ユーザーlxadmin、ポート10000でlxchost.example.comに接続

$ ssh wordpress

ユーザーlxadminポート10000でlxchostに接続し、そこから10.0.3.2のポート22にユーザーwordpressadinで接続
同様にowncloudやrailsにも一発で接続できる。

scpも同じように使える。
2012年8月29日

lxcの仮想環境を別サーバーに移動

lxcで作った仮想環境を別のサーバーに引っ越して動くか確認。
lxc環境の複製とバックアップ
参照。

32bitのコンテナは32bitのホスト、64bitのコンテナは64bitホストへしか移動できないので注意。64bitのホストで32bitのコンテナが動きます。ちゃんと調べないで適当なことを書いちゃいけません。反省。

WordPressをインストールした仮想環境をドメインは同じまま別サーバーへ移動してみる。

まずコンテナをまるごとtarで固める。

$ sudo tar cpzf ubuntu02.tar.gz /var/lib/lxc/ubuntu02

ubuntu02.tar.gzをscpなどで別のlxcがインストール済みの別サーバーへ移動する。

$ cd /var/lib/lxc
$ sudo tar --numeric-owner -xpzf ubuntu02.tar.gz

必要ならコンテナのネットワーク設定を変更
ホストマシンでポート転送を設定し80番をubuntu02の80番に転送する。
lxcで作ったWordPressサーバーを外部に公開(レンタルサーバー編)参照。
コンテナを起動して動作を確認。
DNSの設定を新しいサーバーのアドレスに変更。
あっという間に引越し完了。

2012年8月23日

LXCにownCloudをインストールする

VPSも個人で100Gとか200Gの容量が借りられるようになったので自分用のクラウドストレージを作ってみる。日本語ファイル名でトラブルがあるようだが情報の多いownCloudを使うことにする。

Ubuntu12.04のlxcで作った仮想環境にインストールする。仮想環境にインストールすると設定変更やサーバーの移動が気軽にできる。

lxc-cloneで日本語ロケールとタイムゾーンの設定だけした素のlxc環境を作る。

その環境にowncloudをインストール。普通にapt-getするとowncloud3が入るのでwgetをインストールした後にUbuntu Weekly Recipeの記事にしたがってownCloud4.0をインストールする。
第231回 ownCloudで自分専用クラウドストレージ

家庭内からならこのままで良いが、せっかくなので外部から接続出来るようにする。外部からの接続には安全のためにSSLを使いたい。

Appache2でsslの設定をする。
セキュリティに詳しい他のサイトを参照すること。ここでは既に証明書が作られ、default-sslが有効になっているとする。

個人用なのでなるべくアクセスされないようにポートを443番から適当な番号へ変更しておく(ここでは例として10000番とする)。さらに特定のサブドメインでアクセスしたときだけownCloudに接続するようApache2を設定する。
まずホスト環境を設定してポート10000をownCloudを動かす仮想環境に転送するように設定する。lxcで作ったWordPressサーバーを外部に公開(レンタルサーバー編)参照。

ports.confを修正

$ sudo vi /etc/apache2/ports.conf

IfModule mod_ssl.cの項へNameVirtualHostを追加
Listen 433をListen 10000に変更

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    NameVirtualHost *:10000
    Listen 10000
</IfModule>

<IfModule mod_gnutls.c>
    Listen 10000
</IfModule>

次にdefault-sslを編集

$ sudo vi /etc/apache2/sites-available/default-ssl

VirtualHostをコピーして2つにして以下のように修正

<IfModule mod_ssl.c>
<VirtualHost *:10000>
        ServerAdmin webmaster@localhost
        ServerName example.com
        DocumentRoot /var/www2

略

</VirtualHost>

<VirtualHost *:10000>
        ServerAdmin webmaster@localhost
        ServerName naisyo.example.com
        DocumentRoot /var/www

略

</VirtualHost>
</IfModule>

/var/www2/index.htmlを作ってapache2を再起動すればOK。
https://naisyo.example.com:10000/owncloud だけがownCloudにアクセスできる。
https://naisyo.example.com:10000 は/etc/www/index.htmlを表示。
https://www.example.com:10000 などは/etc/www2/index.htmlを表示。
https://www.example.com:10000/owncloud などはNot Found。

あとは普通にユーザ、パスワードを設定する。使い方やアップロード上限の変更法は第231回 ownCloudで自分専用クラウドストレージを参照。

2012年8月20日

VPSにインストールするOSは64bit版?

VPSをレンタルすると好きなOSがインストールできる。Linuxの場合には特別な理由がない限り64bit版をインストールすべきだ。ユーザーが多く情報も豊富だ。

しかし実際siro-toは32bit版をインストールしている。「特別な理由」というやつがあるのだ。手元にあるパソコンでサーバー用途に使っているのは一番消費電力が少ない古いネットブックで、CPUは64bitに対応してない古いATOMだ。ここでLXCを動かしてテストしてる。こいつとコンテナを移動させようとすると32bit版にするしかない。

32bit版でも不都合はいまのところ無い。siro-toレベルで借りられるVPSのメモリは現状では1Gかせいぜい2Gであり、64bitOSの威力は発揮されない。メモリの使用効率は32bit版のほうが良いのでメモリが不足した状態でのパフォーマンスは32bit版の方が上回る可能性もある。

そんなわけで32bit版を使っているが、いずれは64bitに切り替えたいものだ。

2012年8月20日

shotwellをネットワーク越しに複数マシンで使用する

ヘルプ>FAQ>Featuresのところに書いてある(shotwellのバージョン0.12.3)

shotwellをネットワーク越しに複数マシンで使用することは出来ますか?

This is not recommended.推奨しない。Shotwellはこのような使用法に対応した設計になってないのでデータベースが不整合をおこす可能性がある。

そうはいってもnetwork越しに使用できれば便利なので試してみた。
結論から言うと一応可能。ただし予想通り複数マシンから同時にタグなどを編集すると起動・終了のタイミングによってデータベースの内容が変わるので、同時使用は避けたほうが賢明だ。

方法:画像が各マシンで同じ絶対パスになるように、ネットワークドライブをマウントする。シンボリックリンクでも可。shotwellのデータベースにアクセス出来るようにディレクトリを作り、データベースを作成。そのデータベースを誰からでも読み書き出来るようにパーミションを変更。

画像をインポートするときに同じフォルダを複数ユーザーで指定していると作られるフォルダのパーミションの問題で画像をインポート出来なかったりする。バックアップをとった上で自己責任で。

2012年8月16日

shotwellで複数ライブラリを使う

ヘルプ>目次>Other Features-Multiple librariesに書いてある。コマンドラインから-dオプションで指定する。

shotwell -d [library-directory]

指定したディレクトリ内に~/.shotwellと同様にデータベースとサムネイルが作られる。

ただしshotwell自体の設定は切り替わらない。インポート先フォルダを変更するとどのライブラリを指定して実行しても同じフォルダになる。写真をコピーしてインポートするときにライブラリ毎に画像フォルダを変えたいならば、その都度指定しなければならなず注意が必要。

ユーザーが違えばshotwellの設定も別になる。

2012年8月15日

shotwellのライブラリを別のコンピュータに移動する

shotwellライブラリの移動方法

これが分からないと安心してライブラリを作れない。

ヘルプ>FAQの中(英文)に書いてある
~/.shotwell ディレクトリをコピーする。
フォトライブラリ(標準なら)ピクチャフォルダをコピーする
shotwellを起動し、編集>設定>ライブラリの場所を正しく設定

画像の絶対パスが同じなら問題無し。絶対パスが違ってもshotwellはインポート先のディレクトリ内を探してデータベースを修正してくれるみたい。

「みつからないファイル」になってしまったら

  1. その画像ファイル(もしくは画像ファイルのあるフォルダ)をインポート先のディレクトリにコピーする。
  2. またはライブラリのインポート先を変更しその画像のあるフォルダに変える。データベースが更新されたらまたライブラリの場所を元にもどす。(画像の場所はそのままでライブラリに復活する)

いったん「みつからないファイル」になっても、再び画像が見つかればタグなどもそのままでライブラリに復活する。

2012年8月15日

shotwellメモ

shotwellを使って見たのでメモ

shotwellはubuntu標準の画像管理ソフト(動画もOK)

Ubuntu12.04でのshotwellのバージョンは0.12.3

データベースにはsqlight3を使用

データベースの場所は~/.shotwell/data/photo.db

サムネイルは~/.shotwell/thumbs/の中で~/.thumbnails/下のサムネイルとは別

画像の場所はデータベースの中で「絶対パス」で記録されてる。

画像をインポート先にコピーすることも、元の場所のままインポートすることも可能

タグなどのデータは画像にうめこむことも可能だが標準では画像には手を加えず、データベースに記録する。

画像をコピーしてインポートするとインポート先フォルダ内に年/月/日/フォルダを作ってその中にコピーする。

ファイル名が同じでもちゃんと別画像として扱われる(画像ファイルの情報やmd5値などをみてるらしい)。

2012年8月15日

lxcで作ったWordPressサーバーを外部に公開(レンタルサーバー編)

VPSなどレンタルするとグローバルアドレスで直接インターネットにつながっている。標準では仮想環境はブリッジ(lxcbr0)を通して10.0.3.0/24のプライベートアドレスになる。このためホストマシンでポート転送をする必要がある。またファイアーウォールはホストマシンで設定する。

ファイアーウォール設定は詳しいサイトを参照すること。

ポート転送の設定

ホストマシンの80番を仮想環境(10.0.3.2と仮定)の80番に転送する。また10000番(実際には別のポートを指定すること)を仮想環境の22番に転送する。
とりあえずlxc-netの起動スクリプト内に設定してみる。

$ sudo vi /etc/init/lxc-net.conf 

iptables -A POSTROUTING -s ${LXC_NETWORK} -t nat -j MASQUERADEの後ろに設定を追加する。

        iptables -A PREROUTING -t nat -p tcp --dport 80 -i eth0 -j DNAT --to 10.0.3.2:80
        iptables -A PREROUTING -t nat -p tcp --dport 10000 -i eth0 -j DNAT --to 10.0.3.2:22

これでホストマシン80番へのアクセスはそのまま仮想環境の80番へ、ホストマシン10000番へのアクセスは仮想環境の22番へ転送される。

2012年8月13日

lxcで作ったWordPressサーバーを外部に公開(家庭内サーバー編)

家庭内LANからは仮想環境にフルアクセス可能にして、ファイアーウォールはルーターにお任せする。ルーターの設定で80番ポートとssh用のポートだけ転送するようにする。

もしホスト側がUbuntuのデスックトップ環境ならばnetwork-managerを停止しなければいけない。
自動起動の停止方法

ネットワークを設定する。

$ sudo vi /etc/network/interfaces

設定例 実際の環境に合わせて修正する

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
  address 192.168.0.10
  netmask 255.255.255.0
  gateway 192.168.0.1
  dns-nameservers 192.168.0.1
  bridge_ports eth0
  bridge_stp off

コンテナのconfigを編集

$sudo vi /var/lib/lxc/ubuntu02/config #コンテナ名ubuntu02
lxc.network.link=lxcbr0 #この行のlxcbr0をbr0に書き換える

必要ならコンテナ内の/etc/network/interfacesも編集する。DHCPでよければそのまま。

再起動すれば仮想環境がホストと同じネットワークに接続されているはず。

後はルーターでポート転送するよう設定する。80番はそのまま80番に転送する。
sshについては仮想環境のポートは22番のままで、ルーターからは適当なポートから仮想環境の22番に転送する。こうすればローカルからはポート指定なしでsshできるが、外部からは22番は閉じていることになる。

2012年8月13日