カテゴリー別アーカイブ: Linux

Linux

Raspberry Pi用にPhantomJS 2.1.1をビルドしてみました

Raspberry Pi用にPhantomJS 2.1.1をビルドしてみました。その他のarmhfアーキテクチャのマシンでも動くと思います。

https://www.scaleway.com/ のARM VPSにDebianをインストールしてビルドしました。ビルド方法は ここ に忠実に従いました。

https://github.com/mecrazy/phantomjs-binaries からダウンロードしてください。
( Pull requestが通れば”https://github.com/avaynshtok/phantomjs-binaries”に書き換える予定です )

個人的にはRaspberry Piを各種サーバアプリのテストに使っていてWEBスクレイピングもその一つです。でもPhantomJSのarmhf用のバイナリがWEB上になかったのでビルドしてみました。欲しい方は使ってください。ただし、くれぐれも自己責任でお願いします。

< "PhantomJS"とは? >
PhantomJSとはJavaScript APIによるWEBスクレイピングツールです。PDFやPNGやその他いくつかの形式でWEB画面のキャプチャーが可能です。PhantomJSについてもっと詳しく知りたいという方は http://phantomjs.org/ をチェックしてみてください。

DebianユーザへWebminのススメ

< “Webmin”とは? >
“Webmin”とはPerlで書かれたWEBベースの設定ツールです。Linux / UNIX / Windows / OSX などで動きます。私はDebianをインストールするときは”Webmin”もインストールするようにしています。設定ファイルの場所を覚える必要がなくなるため、主に設定ファイルの編集のために使用しています。サービスの停止や開始といったことも行えます。全てを説明するのは難しいですが、他にも”Webmin”には便利な機能がたくさんあります。”Webmin”についてもっと詳しく知りたい方は Webmin – Wikipediahttp://www.webmin.com/ を見てみると良いかもしれません。

< Debian上でのインストール >
最新版を http://www.webmin.com/ でチェックしてください。以下のコマンドのURLは最新バージョンのものに差し替えてください。コマンドはroot権限で実行します。

root@myhost:~# cd /tmp
root@myhost:/tmp# wget http://prdownloads.sourceforge.net/webadmin/webmin_1.690_all.deb
root@myhost:/tmp# dpkg -i webmin_1.690_all.deb
root@myhost:/tmp# apt-get -f install

dpkg -i webmin_1.690_all.deb” を実行した後にワーニングが表示されるかもしれません。その場合 “apt-get -f install” を実行してwebminに必要なその他のソフトウェアもあわせてインストールしてください。

< セキュリティについて >
インストールした状態では同じネットワークセグメントからしか接続できないようになっています。私の場合セキュリティを考慮し、この設定は変更しないようにしています。そのため常にSSHによるポート転送やなんらかのVPNなどを経由して接続するようにしています。外部(インターネット)から直接webminに接続できる必要はありません。

< SSHによるポート転送 >
ユーザ名が “abcd” でサーバのドメインが “example.com” だったとすると、SSHポート転送を使用するログインコマンドは以下のようになります。

$ ssh -L 10000:localhost:10000 abcd@example.com

これは Linux / UNIX / OSX の場合のコマンドです。ドメインのかわりにIPアドレスを使用することも可能です。

< Webminへのログイン >
お持ちのウェブブラウザを使用して “https://localhost:10000/” にアクセスしてください。以下のような「接続の安全性を確認できません」的なメッセージが表示されるかと思います。
untrusted_001_ja
Firefoxの場合は「例外を追加」を押して進んでください。
untrusted_002_ja
初回はrootユーザでのログインが必須となりますが、もしwebminへのログインにrootユーザを使いたくない場合は、webmin用のユーザを追加することが可能です。
webmin_login

< どの言語をお使いですか? >
webminをインストールしたままの状態では英語になっています。デフォルト ( 全ユーザ共通 ) の言語設定を変更したい場合は以下の項目を設定してください。
[ Webmin ] – [ Webmin Configuration ] – [ Language ] ( 英語 )
webmin_change_language_001
[ Webmin ] – [ Webmin 設定 ] – [ 言語 ] ( 日本語 )
webmin_change_language_001_ja
上記の設定でデフォルト ( 全ユーザ共通 ) の言語設定の変更が可能です。webminユーザ別の言語やテーマを変更したい場合は以下の項目を設定してください。
[ Webmin ] – [ Change Language and Theme ] ( 英語 )
webmin_change_language_002
[ Webmin ] – [ 言語とテーマの変更 ] ( 日本語 )
webmin_change_language_002_ja

< Webminテーマ >
webmin用ユーザの追加について説明したいのですが、その前にこの解説のキャプチャで使用しているテーマについて説明する必要があるかと思います。
[ Webmin ] – [ Webmin 設定 ] – [ Webmin テーマ ]
Webminのユーザインタフェースを選択可能です。自分はいつも “MSC.Linux Theme” を使用しています。お好きなテーマをお選びください。ただし、この記事の内容に従って作業する間だけは “MSC.Linux Theme” にしておくことをオススメします。
webmin_theme_ja

< システムユーザの追加 >
私の場合いつもwebminユーザを追加する前にシステムユーザを追加しています。UNIX認証を使用してログインするのが目的です。以下の画面でOSユーザを追加することができます。”adduser” コマンドと同等の機能です。
[ システム ] – [ ユーザおよびグループ ] – [ 新しいユーザを作成 ]
私の場合、パスワード以外の設定はそのままにしています。
webmin_users_ja

< Webminユーザの追加 >
以下の設定でWebminユーザの追加が可能です。Webminユーザには許可する操作を選択可能です。自分の場合、パスワードには「UNIX認証」を使用するようにしています。
[ Webmin ] – [ Webmin ユーザ ] – [ 新しいWebminユーザを作成 ]
Webminユーザ作成後は新しいWebminユーザで再ログインすると良いでしょう。
webmin_add_webminuser_ja
Webminユーザ画面下の方には以下のようなモジュール選択があるかと思います。
webmin_select_modules_ja
管理者のように全ての設定変更を許可したい場合は「全て選択」を押して全ての機能を選択すると良いです。

< システムとサービスの制御 >
[ システム ] – [ 起動およびシャットダウン ]
同ナビゲーション先のページ下部が以下のキャプチャです。
webmin_control_services_ja

< Webminモジュールについて >
Webminモジュールについての説明は時間のあるときにこの投稿の更新または別の投稿として書いていこうかと思います。

nginxのリバースプロキシをRaspberry Piで使用

< インストール準備 >
このページの手順を進めるにはDebian wheezyのマシンが必要です。Raspberry Piに特化した内容ではありません。

< なぜRaspberry Piか >
リバースプロキシは単純な機能です。基本的には一般的なバソコンやサーバマシンにとっては軽すぎるタスクと思います。Raspberry Piはパワフルなマシンではありませんが、省エネかつ非常に安く、世界中の誰もが購入可能で、リバースプロキシには十分なマシンです。こういった理由から自分はRaspberry Piをリバースプロキシに使用しています。

< nginxのインストール >
以下のコマンドを実行してください。

apt-get install nginx

以上です。

< 設定ファイルの編集 >
標準設定ファイルを編集します。

nano /etc/nginx/sites-available/default

私の “/etc/nginx/sites-available/default” はこんな感じです。

server {
listen 80;
server_name mydomain.net;

location / {
proxy_pass http://127.0.0.1:8080;
}
}

この設定では “mydomain.net” へのアクセスを同Raspberry Pi内の8080番ポートへ転送しています。

< プロキシ設定ファイルの追加 >
プロキシ設定ファイルを追加します。

nano /etc/nginx/conf.d/proxy.conf

私の “/etc/nginx/conf.d/proxy.conf” はこんな感じです。

# Header
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

# Timeout
proxy_connect_timeout 60;
proxy_read_timeout 90;
proxy_send_timeout 60;

# Buffer
proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 100 8k;

# Cache
proxy_cache_path /var/cache/nginx/mydomain.net levels=1:2 keys_zone=cache_$
proxy_temp_path /var/cache/nginx/temp;

proxy_cache_valid 200 2h;
proxy_cache_valid 302 2h;
proxy_cache_valid 301 4h;
proxy_cache_valid any 1m;

また、root権限でキャッシュディレクトリを作成します。

mkdir /var/cache/nginx

< nginxの開始 >

service nginx start

どうでしたでしょうか?簡単だったでしょうか?

Raspberry Piでbochsを動かしてみました

< x86 on ARM >
とりあえずDOSをRaspberry Pi上のDebian wheezyで動かしてみます。
( Windows95も動くとは思いますがかなり遅いと思うので )

< “bochs” のインストール >
チョー簡単です。
こんな感じです。

root@myhost:~# apt-get install bochs bochs-x bochs-sdl bochs-svga

< ハードディスクイメージの生成 >
Raspberry Pi上で “bximage” を実行します。
非rootユーザでの実行を推奨します。
bochsを使用する予定のユーザで実行することをお勧めします。
こちらが自分が2GBで作成したときのサンプルです。

$ bximage
========================================================================
                                bximage
                  Disk Image Creation Tool for Bochs
        $Id: bximage.c,v 1.34 2009/04/14 09:45:22 sshwarts Exp $
========================================================================
Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd]
What kind of image should I create?
Please type flat, sparse or growing. [flat]
Enter the hard disk size in megabytes, between 1 and 129023
[10] 
2048
I will create a ‘flat’ hard disk image with
  cyl=4161
  heads=16
  sectors per track=63
  total sectors=4194288
  total size=2047.99 megabytes
What should I name the image?
[c.img] 
msdoshdd.img
Writing: [] Done.
I wrote 2147475456 bytes to msdoshdd.img.
The following line should appear in your bochsrc:
  
ata0-master: type=disk, path=”msdoshdd.img”, mode=flat, cylinders=4161, heads=16, spt=63

“bximage” によると 「 “
ata0-master: type=disk, path=”msdoshdd.img”, mode=flat, cylinders=4161, heads=16, spt=63” を “.bochsrc” に追加してね 」 とのことです。

< MS-DOS用の”.bochsrc”を作成 >
ホームディレクトリへ移動します。
私の場合テキストエディタにはnanoを使用しています。

$ cd /home/username
$ nano .bochsrc

私の”.bochsrc”はこんな感じです。

megs: 64
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
display_library: sdl
ata0-master: type=disk, path=/home/username/msdoshdd.img, mode=flat, cylinders=4161, heads=16, spt=63
ata0-slave: type=cdrom, path=/home/username/MS-DOS-6.22.iso, status=inserted
boot: cdrom, disk
#keyboard_mapping: enabled=1, map=/usr/share/bochs/keymaps/x11-pc-us.map
log: bochsout.txt
clock: sync=realtime, time0=local

“MS-DOS-6.22.iso”は私が使用したMS-DOSの起動イメージファイルです。これをあなたが持っている他のブータブルISOファイルに書き換えてください。私の場合”.bochsrc”ではマウスは未設定です。 マウスを使用したい場合はググるなりして”.bochsrc”を編集してください。

< VNCのインストール >
HDMIディスプレイを使用する場合はこのステップは関係ありません。
ディスプレイを使用しない場合はRaspberry Pi上のXへリモートログインするためにVNC serverをインストールする必要があります。
以下のコマンドをrootで実行してください。

root@myhost:~# apt-get install tightvncserver

以下のコマンドをbochsを使用するユーザで実行してください。

$ vncserver :1 -geometry 1024×768 -depth 24
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? 
n
New ‘X’ desktop is myhost:1

“:1″ はポート “5901″ を意味し、
“-geometry 1024×768″ は解像度を意味し、
“-depth 24″ は色数のビット指定を意味します。

< bochsの実装 >
Raspberry Pi上のVNC serverに接続します。 ( ディスプレイを使用の場合は “startx” を実行してください )
ターミナルを起動します。 ( 例. LXTerminal )
ターミナルでbochsを実行します。

$ bochs

bochsがときどきこんな感じで確認してくるかもしれません。

A PANIC has occurred.  Do you want to:
  cont       – continue execution
  alwayscont – continue execution, and don’t ask again.
               This affects only PANIC events from device [MEM0 ]
  die        – stop execution now
  abort      – dump core
  debug      – hand control to gdb

私はいつも “alwayscont” と答えています。

< 正直なところ >
Windows95をインストールしようとしましたが、DOSの起動ディスクやWindows3.1のディスクが必要でした。( 自分のWindows95がアップグレードバージョンだったため ) さすがに面倒だったためDOSインストールまででやめてしまったというわけです。

LS-XHLのwheezy化

LS-XHLをwheezy化したので手順を載せておこうかと思います。基本的には
http://www.zorac.org/wp/?p=447
を参考にさせて頂きました。

実施の際はくれぐれも自己責任でお願いします。
ここに記載した内容を実行したことによるいかなるトラブル/故障/データ消失にも当方は責任はもてませんのであしからず。

英語がイケるかたはこちらも参考にして頂くといいかもしれません。
Buffalo NAS-Central Forums • View topic – LS-CHLv2 – LS-XHL – Debian Wheezy Rootfs – Update 2013.05.15

< 必要なものなど >
1. LS-XHL本体 ( LS-VLシリーズだとネットワーク周りの設定が違うだけとの話です )
2. Debian Wheezy Rootfs
3. ARMアーキテクチャのDebianまたはUbuntuマシン ( 非ARM向けの手順も記載していますが自分は試していません )
4. USB-HDDケース ( インストール時に 3 に接続できればいいので内部SATA接続などであれば不要 )

手順はなるべくARMと非ARMで共通になるように書いていますが、私自身はARMでしか試していませんのでご注意ください。

< ハマりどころ >
●パーティション作成をGpartedでやるとなぜかうまく起動しなくなる。
●chrootを使用した手順はARMマシン(同じアーキテクチャ)でしか動作しない。
こんなとこですね。

< ステップ 1 – LS-XHLの分解 >
本体の分解はYoutubeにわかりやすい動画があるので参考にして下さい。

< ステップ 2 – HDDのパーティショニング&初期化 >
Linuxマシンを起動します。( 私の環境ではRaspberry Pi上のDebian wheezyです )
rootでログインします。
partedがインストールされていない場合は

apt-get install parted

としてインストールします。
LS-XHL用Debianのインストール先HDDをLinuxマシンにUSBなどで接続し、パーティションを確認します。HDDが /dev/sda とすると

parted /dev/sda print

とするとHDD情報が表示されます。自分の場合、

Model: ATA Hitachi HDS72202 (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B

のような感じでした。
肝心なのは “Disk /dev/sda: 2000GB” です。
この “2000GB” がご自分の環境でどんな値になっているか覚えておいてください。
パーティションを切ります。

parted /dev/sda mklabel gpt
parted -a cylinder /dev/sda mkpart primary 0 511
parted -a cylinder /dev/sda mkpart primary 511 8191
parted -a cylinder /dev/sda mkpart primary 8191 9215
parted -a cylinder /dev/sda mkpart primary 9215 2000G
parted /dev/sda set 1 boot on

“/dev/sda1″ を “/boot” に
“/dev/sda2″ を “/” に
“/dev/sda3″ をスワップに
“/dev/sda4″ を “/home” に
設定するつもりの切り方です。

コマンド中の最後のパーティション設定の “parted -a cylinder /dev/sda mkpart primary 9215 2000G” のところの “2000G” は先ほど “parted /dev/sda print” で確認した値に置き換えてください。それぞれのパーティションのサイズもご自分の環境にあわせてお好みのサイズにしてください。ではパーティションをフォーマットします。

mke2fs -I 128 -j /dev/sda1
mke2fs -j -t ext4 /dev/sda2
mkswap /dev/sda3
mke2fs -j -t ext4 /dev/sda4

マウントします。

mount /dev/sda2 /mnt
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

< ステップ 3 – Rootfs展開 >
作業用フォルダに移動します。 /tmp などがいいかと思います。
でもってhttp://neboola.de/fjen/lschlv2/debian/wheezy/ から
debian_wheezy_rootfs_lschlv2-lsxhl_20130515.tar.xz
をダウンロードします。

cd /tmp
wget http://neboola.de/fjen/lschlv2/debian/wheezy/debian_wheezy_rootfs_lschlv2-lsxhl_20130515.tar.xz

これを展開します。

tar Jxvf debian_wheezy_rootfs_lschlv2-lsxhl_20130515.tar.xz -C /mnt

“/mnt/boot” に移動して “uImage.buffalo.3.9.2-fjen-1.lsxhl” をダウンロードします。

cd /mnt/boot
wget http://neboola.de/fjen/lschlv2/debian/wheezy/lsxhl-kernel-for-20130515/uImage.buffalo.3.9.2-fjen-1.lsxhl

< ステップ 4 – 設定変更 >
/mnt/etc/fstab
/mnt/etc/network/interfaces
/mnt/etc/resolv.conf
/mnt/etc/hostname
/mnt/etc/hosts
をそれぞれ自分の環境にあわせて修正します。

私の環境では “/mnt/etc/fstab” はこんな感じに修正しました。

/dev/sda1       /boot         ext3     noauto,noatime         1 2
/dev/sda2       /             ext4     noatime                0 1
/dev/sda3       none          swap     sw                     0 0
/dev/sda4       /home         ext4     noatime                0 0
proc            /proc         proc     defaults               0 0
shm             /dev/shm      tmpfs    nodev,nosuid,noexec    0 0
devpts          /dev/pts      devpts   gid=4,mode=620         0 0
#tmpfs           /tmp          tmpfs    defaults               0 0
sysfs           /sys          sysfs    defaults               0 0

でもって “/mnt/etc/network/interfaces” はこんな風にしました。

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet static
  address 192.168.1.101
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255
  gateway 192.168.1.1

これはLinkstationのIPを “192.168.1.101″ にして
ルータが “192.168.1.1″ の場合の設定です。
LS-VLは持っていませんが eth1 が無く eth0 を使用するとのことなので、

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
  address 192.168.1.101
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255
  gateway 192.168.1.1

的な感じになるのではないでしょうか。
“/mnt/etc/resolv.conf” は

domain linkstation
search linkstation
nameserver 8.8.8.8
nameserver 8.8.4.4

としましたが、まぁお好みで修正しちゃってください。
あとは
“/mnt/etc/hostname” は “linkstation” とし、
“/mnt/etc/hosts” は特に修正しませんでしたが、
このへんもお好みでどうぞ。

< ステップ 5 – chroot作業 >
chrootで作業しますが、これはARMマシンのLinuxで作業している場合のみ可能です。

chroot /mnt

ARMマシンが無い場合やchrootがうまくいかない場合は未検証ですが ステップ 6 に進んでください。chrootがうまくいった場合は以下のコマンドを実施します。

cd /boot
mv uImage.buffalo uImage.buffalo.bk
ln -s uImage.buffalo.3.9.2-fjen-1.lsxhl uImage.buffalo

< ステップ 6 – chrootできない場合 >
動作確認はしていませんが、

cd /mnt/boot
mv uImage.buffalo uImage.buffalo.bk
mv uImage.buffalo.3.9.2-fjen-1.lsxhl uImage.buffalo

としてしまえば問題ないでしょう。
くれぐれも自己責任でお願いします。

< ステップ 7 – 基本設定 >
設定したHDDをLS-XHLにセットし起動します。
この際、うまく起動せず再設定する可能性を考慮して、ネジやフタは閉めないで初期設定することをお勧めします。
マシンはなんでもいいのでSSHで “192.168.1.101″ に接続します。Windowsからの場合はTeraTermなどを使用するといいでしょう。自分の場合はLinuxから

ssh root@192.168.1.101

としました。rootの初期パスワードは “toor” です。
ログインしたら

passwd
dpkg-reconfigure locales
dpkg-reconfigure tzdata
rm /etc/ssh/ssh_host_* && dpkg-reconfigure openssh-server

として、
1. rootパスワードの変更
2. ロケール設定
3. タイムゾーン
4. SSH暗号化キーの更新
を実施します。
( 尚、この工程は手順を共通化するためにここに書いていますが、chroot可能であればそのときに 4 をやっておけばSSHの再ログインは不要になります )

クライアント側の暗号化キーを更新するため一旦SSHをログアウトします。
ログアウトしたら、LinuxやUNIXの場合

ssh-keygen -R 192.168.1.101

な感じで更新をかけます。
でもって再度SSHでrootログインして以下のコマンドを実行します。

apt-get update
apt-get upgrade

以上で完了です。
LS-XHLのネジをしめてフタをしてください。

< 感謝 >
Rootfs作者様および
http://forum.buffalo.nas-central.org/viewtopic.php?f=71&t=26291 の面々および
http://www.zorac.org/wp/?p=447 を書いて下さった方に感謝感謝です。