2014/02/25

Raspberry Pi 次はどうする?

フラッシュメモリで構築したownCloudだが、
なぜかAndroidアプリからのアクセスだけが拒否られるという…

もうownCloudは飽きたから捨てるとして、他に何をインストールしようか?

Adblock串でも立ててスマホ向けAPにでもしてみるか。

2014/02/12

RaspberryPi をUSBフラッシュで構築するの巻 (3)

ownCloud インストール編

環境も整ったのでここからが本題。

パッケージインストール
apacheとかphpとか。
$ sudo apt-get install apache2 libapache2-mod-php5 php5-intl
$ sudo apt-get install php5-gd php-xml-parser php5-sqlite
$ sudo apt-get install php5-curl
$ sudo apt-get install sqlite3 php5 php-apc

Apacheの設定
設定変更
$ sudo vi /etc/apache2/sites-enabled/000-default
<Directory /var/www/>
セクションを修正

修正前
<Directory /var/www/>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride None
  Order allow,deny
  allow from all
<Directory /var/www/>

修正後
<Directory /var/www/>
  Options -Indexes ExecCGI FollowSymlinks
  AllowOverride All
  Order allow,deny
  allow from all
<Directory /var/www/>

ログレベル設定
$ sudo vi /etc/apache2/apache2.conf
[ LogLevel warn ] -> [ LogLevel emerg ] に変更

ログ設定
$ sudo vi /etc/init.d/make-logfile
Apacheに関する記述追加
mkdir -p /var/log/apache2

chown root.adm /var/log/apache2
chmod 750 /var/log/apache2

touch /var/log/apache2/access.log
touch /var/log/apache2/error.log
touch /var/log/apache2/other_vhosts_access.log

chown root.adm  /var/log/apache2
chown root.adm /var/log/apache2/access.log
chmod 640 /var/log/apache2/access.log
chown root.adm /var/log/apache2/error.log

chmod 640 /var/log/apache2/error.log

ownCloudインストール
ownCloud本体のダウンロード
http://owncloud.org/install/
"Tar or Zip File"をクリックしてダウンロードダイアログを表示させ、
"Unix"のリンクアドレスをホストマシンのクリップボードにコピーする。

$ su -
# cd /var/www
# wget http://download.owncloud.org/community/owncloud-x.x.x.tar.bz2

# tar -xjf owncloud-x.x.x.tar.bz2
# chown -R www-data:www-data owncloud

.htaccessの設定
owncloud の.htaccessをapacheの設定値として流用する
# cp /var/www/owncloud/.htaccess /etc/apache2/conf.d/owncloud.conf

# vi /etc/apache2/conf.d/owncloud.conf
(ファイル先頭に追加)
Alias /owncloud /var/www/owncloud
<Directory /var/www/owncloud>

(ファイル末尾に追加)
</Directory>

Apache2を再起動し、ブラウザでアクセスしてみる。
# service apache2 restart

http://192.168.xxx.yyy/owncloud
管理者アカウントを設定。
その他の詳細設定はお好みで設定(デフォルトのままでもOK)。

2014/02/11

RaspberryPi をUSBフラッシュで構築するの巻 (2)

Raspbian 初期設定編

まずはraspi-config
$ sudo raspi-config

とりあえずアップデート
8 Advanced Options ] - [ A7 Update ]

コンソールログインを選択
3 Enable Boot to Desktop/Scratch ] - [ Console Text console, requiring login (default) ]

言語設定でjaを追加
4 Internationalisation Options ] - [ I1 Change Locale ]
[*] en_US.UTF-8 UTF-8
[*] ja_JP.UTF-8 UTF-8

Default locale ⇛ [ ja_JP.EUC-JP ]

タイムゾーン(東京に設定)
4 Internationalisation Options ] - [ I2 Change Timezone ]
[ Asia ] - [ Tokyo ]

メモリ使用量(コンソールのみなので最小に)
[ 8 Advanced Options ] - [ A3 Memory Split ]
[ 16 ]

で終了。一旦リブート。

自分ユーザー作成&piユーザー削除
$ sudo adduser [hogehoge]
ユーザ `[hogehoge]' を追加しています...
新しいグループ `[hogehoge]' (nnnn) を追加しています...
新しいユーザ `[hogehoge]' (nnnn) をグループ `[hogehoge]' として追加しています...
ホームディレクトリ `/home/[hogehoge]' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しいUNIXパスワードを入力してください: [ パスワード ]
新しいUNIX パスワードを再入力してください: [ パスワード ]
passwd: パスワードは正しく更新されました
[hogehoge] のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
フルネーム []: [ ]
部屋番号 []: [ ]
職場電話番号 []: [ ]
自宅電話番号 []: [ ]
その他 []: [ ]
以上で正しいですか? [Y/n]

$ sudo visudo
[hogehoge] ALL=(ALL) ALL
を追加

リブート
$ sudo reboot

新しく作った自分アカウントでログイン
> ssh [hogehoge]@192.168.xxx.xxx

アカウントpiの削除
$ sudo userdel -r pi

$ sudo visudo
pi ALL=(ALL) NOPASSWD: ALL
を削除

ntpクライアントの入れ替え
ntpを消してntpdateをインストール
$ sudo apt-get remove ntp
$ sudo apt-get install ntpdate

ntpサーバを国内サーバに変更
$ sudo vi /etc/default/ntpdate
# NTPSERVERS="0.debian.pool.ntp.org 1.debian.pool.ntp.org ...
NTPSERVERS="0.ntp.nict.jp 1.ntp.jst.mfeed.ad.jp 2.ntp.ring.gr.jp"

時刻合わせを毎時に
$ sudo crontab -e
0 * * * * /etc/network/if-up.d/ntpdate > /dev/null 2>&1

USBフラッシュ延命対策
USBフラッシュ延命にswapの停止と、
logファイルをRAMディスクに最低限のみ出力するようにする。

swap停止
$ sudo dphys-swapfile swapoff
$ sudo dphys-swapfile uninstall
$ sudo apt-get remove dphys-swapfile

RAMディスクを使用するように
$ sudo vi /etc/fstab
次の3行を追加
tmpfs           /tmp            tmpfs   defaults,size=32m,noatime,mode=1777      0       0
tmpfs           /var/tmp        tmpfs   defaults,size=16m,noatime,mode=1777      0       0
tmpfs           /var/log        tmpfs   defaults,size=32m,noatime,mode=0755      0       0

ログファイル出力抑止
auth, syslog, messagesのみに
$ sudo vi /etc/rsyslog.conf

###############
#### RULES ####
###############

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
# cron.*                        /var/log/cron.log
# daemon.*                      -/var/log/daemon.log
# kern.*                        -/var/log/kern.log
# lpr.*                         -/var/log/lpr.log
# mail.*                        -/var/log/mail.log
# user.*                        -/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
# mail.info                     -/var/log/mail.info
# mail.warn                     -/var/log/mail.warn
# mail.err                      /var/log/mail.err

#
# Logging for INN news system.
#
# news.crit                     /var/log/news/news.crit
# news.err                      /var/log/news/news.err
# news.notice                   -/var/log/news/news.notice

#
# Some "catch-all" log files.
#
# *.=debug;\
#       auth,authpriv.none;\
#       news.none;mail.none     -/var/log/debug
*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none          -/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg                         :omusrmsg:*

#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
#       news.=crit;news.=err;news.=notice;\
#       *.=debug;*.=info;\
#       *.=notice;*.=warn       /dev/tty8

# The named pipe /dev/xconsole is for the `xconsole' utility.  To use it,
# you must invoke `xconsole' with the `-file' option:
#
#    $ xconsole -file /dev/xconsole [...]
#
# NOTE: adjust the list below, or you'll go crazy if you have a reasonably
#      busy site..
#
# daemon.*;mail.*;\
#         news.err;\
#         *.=debug;*.=info;\
#         *.=notice;*.=warn       |/dev/xconsole

出力時にディレクトリがないとエラーになるログがあるので
ログ初期設定用のスクリプトを作成する
$ sudo vi /etc/init.d/make-logfile
#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          make-varlog-files
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Required-Start:
# Required-Stop:
# Short-Description: Create /var/log/... files on tmpfs at startup
# Description:       Create /var/log/... files needed by system daemon
### END INIT INFO

#
# main()
#
case "${1:-''}" in
  'start')

    mkdir -p /var/log/ConsoleKit
    mkdir -p /var/log/apt
    mkdir -p /var/log/fsck
    mkdir -p /var/log/mrtg
    mkdir -p /var/log/ntpstats
    mkdir -p /var/log/samba
    mkdir -p /var/log/squid3

    chown root.adm /var/log/mrtg
    chown ntp.ntp /var/log/ntpstats
    chown root.adm /var/log/samba
    chown proxy.proxy /var/log/squid3

    touch /var/log/lastlog
    touch /var/log/wtmp
    touch /var/log/btmp

    chown root.utmp /var/log/lastlog
    chown root.utmp /var/log/wtmp
    chown root.utmp /var/log/btmp
   ;;
  'stop')
   ;;
  'restart')
   ;;
  'reload'|'force-reload')
   ;;
  'status')
   ;;
  *)
   echo "Usage: $SELF start"
   exit 1
   ;;
esac

デフォルトランレベルの起動リンクを作成
$ sudo chmod 755 /etc/init.d/make-logfile
$ sudo update-rc.d make-logfile defaults 01 10


不要デーモン停止
$ sudo update-rc.d -f triggerhappy remove
$ sudo update-rc.d -f alsa-utils remove
$ sudo update-rc.d -f lightdm remove
$ sudo update-rc.d -f motd remove
$ sudo update-rc.d -f plymouth remove

マルチキャストDNS
$ sudo apt-get install avahi-daemon
これで母艦から[ $ ssh raspi.local ]な感じでログインできる。

Raspbianアップデート
国内サーバーにリポジトリをミラーリングしてくれてる奇特な方がおられるので、
せっかくなので利用させていただく。
https://twitter.com/kfujieda/status/301119397064486912

$ sudo vi /etc/apt/sources.list
## deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi
deb http://ftp.jaist.ac.jp/raspbian/ wheezy main contrib non-free rpi

$ sudo apt-get update
$ sudo apt-get upgrade

$ sudo apt-get autoremove

suのパスワード設定と、普段アカウントにwww-dataグループを追加
$ sudo passwd
新しいUNIXパスワードを入力してください: [ パスワード ]
新しいUNIX パスワードを再入力してください: [ パスワード ]
passwd: パスワードは正しく更新されました

$ sudo usermod -G www-data hogehoge

2014/02/08

RaspberryPi をUSBフラッシュで構築するの巻 (1)

Raspbianインストール編

アクセスランプ点灯は謎のままだけど、気にしないことにする。
1年くらい保てばいいでしょ。

いつもどおりRaspbianイメージから、ブートSDとシステムUSBを構築する。
1.SDカード
2.システム用USBフラッシュ
3.データ用USBフラッシュ

手順
1.OSイメージのダウンロード
 「Raspbian "wheezy"」をダウンロードし、解凍。

2.イメーファイルのマウント
 $ su - (rootで作業)
 # kpartx -av wheezy-raspbian.img
 add map loop0p1 (252:0): 0 114688 linear /dev/loop0 8192
 add map loop0p2 (252:1): 0 5662720 linear /dev/loop0 122880

 # mkdir /mnt/sd1
 # mkdir /mnt/sd2
 # mount /dev/mapper/loop0p1 /mnt/sd1
 # mount /dev/mapper/loop0p2 /mnt/sd2

 これで /mnt/sd1 にブート領域、 /mnt/sd2 にシステム領域がマウント。

3.ブート領域のコピー
 SDカードを差し込み、dmesgなどでデバイス名を調べる。
 fdisk でパーティションを設定、mkfs.vfatでFat32フォーマットする。
 (自動マウントされた場合はアンマウントする)

 # umount /dev/mmcblk0p1
 # fdisk /dev/mmcblk0
 コマンド (m でヘルプ): [ p ] ← パーティションテーブル表示

 コマンド (m でヘルプ): [ d ] ← パーティション削除(パーティションが存在する場合)
 選択したパーティション 1

 コマンド (m でヘルプ): [ n ] ← パーティション作成
 Partition type: [ ] ← デフォルト値
    p   primary (0 primary, 0 extended, 4 free)
    e   extended
 Select (default p): [ ] ← デフォルト値
 Using default response p
 パーティション番号 (1-4, 初期値 1): [ ] ← デフォルト値
 初期値 1 を使います
 最初 セクタ (nnn-nnn, 初期値 nnn): [ ] ← デフォルト値
 初期値 nnn を使います
 Last セクタ, +セクタ数 or +size{K,M,G} (nnn-nnn, 初期値 nnn): [ ] ← デフォルト値
 初期値 nnn を使います

 コマンド (m でヘルプ): [ t ] ← パーティションID変更
 選択したパーティション 1
 16進数コード (L コマンドでコードリスト表示): [ c ] ← 「W95 FAT32 (LBA)」を選択
 パーティションのシステムタイプを 1 から c (W95 FAT32 (LBA)) に変更しました

 コマンド (m でヘルプ): [ w ] ← テーブル書き込み
 パーティションテーブルは変更されました!

 # mkfs.vfat -F 32 /dev/mmcblk0p1

 # mkdir /mnt/bootsd
 # mount -t vfat /dev/mmcblk0p1 /mnt/bootsd

 # cd /mnt/sd1
 # tar cfpv - . | tar xfpv - -C /mnt/bootsd/
 # sync

 ブート手順書き換え
 # vi /mnt/bootsd/cmdline.txt
  「root=/dev/mmcblk0p2」 ⇛ 「root=/dev/sda1」

 # umount /dev/mmcblk0p1
 # rmdir /mnt/bootsd

4.システム領域のコピー & 初期設定
 USBフラッシュを差し込み、dmesgなどでデバイス名を調べる。
 fdisk でパーティションを設定、mkfs.ext4でext4フォーマットする。
 (自動マウントされた場合はアンマウントする)

 # umount /dev/sdb1
 # fdisk /dev/sdb
 コマンド (m でヘルプ): [ p ] ← パーティションテーブル表示

 コマンド (m でヘルプ): [ d ] ← パーティション削除(パーティションが存在する場合)
 選択したパーティション 1

 コマンド (m でヘルプ): [ n ] ← パーティション作成
 Partition type: [ ] ← デフォルト値
    p   primary (0 primary, 0 extended, 4 free)
    e   extended
 Select (default p): [ ] ← デフォルト値
 Using default response p
 パーティション番号 (1-4, 初期値 1): [ ] ← デフォルト値
 初期値 1 を使います
 最初 セクタ (nnn-nnn, 初期値 nnn): [ ] ← デフォルト値
 初期値 nnn を使います
 Last セクタ, +セクタ数 or +size{K,M,G} (nnn-nnn, 初期値 nnn): [ ] ← デフォルト値
 初期値 nnn を使います

 コマンド (m でヘルプ): [ t ] ← パーティションID変更
 選択したパーティション 1
 16進数コード (L コマンドでコードリスト表示): [ 83 ] ← 「Linux」を選択

 コマンド (m でヘルプ): [ w ] ← テーブル書き込み
 パーティションテーブルは変更されました!

 # mkfs.ext4 /dev/sdb1

 # mkdir /mnt/sysusb
 # mount -t ext4 /dev/sdb1 /mnt/sysusb

 # cd /mnt/sd2
 # tar cfpv - --exclude=./lost+found --exclude=./sys --exclude=./proc . | tar xfpv - -C /mnt/sysusb/
 # sync
 # mkdir /mnt/sysusb/sys
 # mkdir /mnt/sysusb/proc
 # mkdir /mnt/sysusb/var/www

 マウント情報書き換え
 # vi /mnt/sysusb/etc/fstab
  [ /dev/mmcblk0p2 ] の定義行を以下2行に変更
  /dev/sda1    /               ext4    defaults,noatime  0       1
  /dev/sdb1    /var/www        ext4    defaults          0       0

 固定IPの設定
 # vi /mnt/sysusb/etc/network/interfaces
  [ iface eth0 inet dhcp ]の定義行を以下に変更(xxx,yyy,zzzは環境に合わせる)
  iface eth0 inet static
    address 192.168.xxx.yyy
    network 192.168.xxx.0
    netmask 255.255.255.0
    broadcast 192.168.xxx.255
    gateway 192.168.xxx.zzz
    dns-nameservers 192.168.xxx.zzz

 ttyの起動抑制
 # vi /mnt/sysusb/etc/inittab
  2〜6の定義をコメントアウト
  1:2345:respawn:/bin/login -f root tty1 ...
  # 2:23:respawn:/sbin/getty 38400 tty2
  # 3:23:respawn:/sbin/getty 38400 tty3
  # 4:23:respawn:/sbin/getty 38400 tty4
  # 5:23:respawn:/sbin/getty 38400 tty5
  # 6:23:respawn:/sbin/getty 38400 tty6

 アクセス制限の設定
 # vi /mnt/sysusb/etc/hosts.deny
  以下を追加
  ALL: ALL

 # vi /mnt/sysusb/etc/hosts.allow
  以下を追加(xxxは環境に合わせる)
  ALL: 127.0.0.1
  ALL: 192.168.xxx.0/255.255.255.0


 # umount /dev/sdb1
 # rmdir /mnt/sysusb

5.イメージファイルのアンマウント
 # umount /mnt/sd1
 # umount /mnt/sd2
 # kpartx -dv wheezy-raspbian.img
  del devmap : loop0p2
  del devmap : loop0p1
  loop deleted : /dev/loop0
 # rm -r /mnt/sd1
 # rm -r /mnt/sd2

SDとフラッシュメモリを差し込んでRaspberry Pi を起動してみよう!

母艦から
$ ssh pi@192.168.xxx.yyy
パスワードは「raspberry」

ただし、、、
フラッシュメモリの差し込むポートによってデバイス名が決まるので、
Raspbianが起動しない場合がある。
慌てず騒がず差し込むポートを入れ替えて試してみよう。

フォロワー