2014/05/18

Raspberry Pi で DLNA

DNLAサーバにするために、ownCloudを抹消してMediaTombとSambaをインストールする。

ownCloud抹消
# rm -rf /var/www/owncloud
# rm /etc/apache2/conf.d/owncloud.conf

データ用フラッシュメモリのマウントポイント変更( /var/www ⇛ /ext )
# mkdir /ext
# vi /etc/fstab

/dev/sdb1       /var/www        ext4    defaults          0       0
 ↓
/dev/sdb1       /ext            ext4    defaults          0       0

※一旦再起動
# reboot

●MediaTombインストール
# apt-get install mediatomb

設定ファイル修正
# vi /etc/mediatomb/config.xml

<protocolInfo extend="no"/>

<protocolInfo extend="yes"/>

↓間に2行追加
  <import hidden-files="no">
    <filesystem-charset>UTF-8</filesystem-charset>
    <metadata-charset>CP932</metadata-charset>
    <scripting script-charset="UTF-8">

↓非コメント化
        <map from="avi" to="video/divx"/>

↓セクションに追加
        <map from="jpg" to="image/jpeg"/>
        <map from="jpeg" to="image/jpeg"/>
        <map from="gif" to="image/gif"/>
        <map from="png" to="image/png"/>
        <map from="m4a" to="audio/mp4"/>
        <map from="m4v" to="video/mp4"/>
        <map from="mp4" to="video/mp4"/>
        <map from="mpg" to="video/mpeg"/>
        <map from="MPG" to="video/mpeg"/>
        <map from="mpeg" to="video/mpeg"/>
        <map from="m2p" to="video/mpeg"/>

# vi /etc/default/mediatomb
INTERFACE=""
INTERFACE="eth0"

サービスのリスタート
# service mediatomb restart

他PCから「http://192.168.xxx.yyy:49152/」にアクセス
MediaTombの設定画面が開けばOK


●Sambaインストール
# apt-get install samba
# apt-get install samba-common-bin

ログ出力先整備(Ramディスク)
# vi /etc/init.d/make-logfile
sambaに関する記述追加

mkdir -p /var/log/samba
chown root.adm /var/log/samba

設定ファイル修正
# vi smb.conf

[global]
# Cap the size of the individual log files (in KiB).
   max log size = 1000
   max log size = 100

↓追加
hosts allow = 192.168.0. 127.



2014/05/11

Raspberry Pi をRead-Onlyで動かす

ラズパイを電源ブチ切りできるように

SDをRead-Onlyでマウントするシステムを構築

するためのメモ


※wheezy環境での構築メモです。
2018年を迎えた今でもアクセスがあるのですが、
構築に失敗したという情報も見受けます。
十分にご注意ください。
Stretchでは確実に死にます。


aufs+fsprotectよりお手軽なunionfs-fuseを組み込んでみる。
※RAMDisk運用ができていることが前提

パッケージ導入
# apt-get install unionfs-fuse

スクリプト編集
# cp /usr/share/doc/unionfs-fuse/examples/S01a-unionfs-fuse-live-cd.sh /etc/init.d/a-unionfs-fuse-live-cd
# cp /usr/share/doc/unionfs-fuse/examples/rc.local.omit-pid.sh /usr/local/sbin/a-unionfs-fuse-omit-pid.sh

# vi /etc/init.d/a-unionfs-fuse-live-cd
先頭(#!/bin/shの後)にINIT INFOを追記
#!/bin/sh

### BEGIN INIT INFO
# Provides: a-unionfs-fuse-live-cd
# Required-Start: mountall-bootclean
# Required-Stop:
# Default-Start: S
# Default-Stop:
# X-Start-Before: procps udev-mtab urandom
# Short-Description: UnionFS mode
# Descrition: Shutdown process will not be required
### END INIT INFO

前半の UBIN= の下に追記
UBIN=/usr/bin/unionfs-fuse

cd /boot
file=noprotect
if [ -e ${file} ]; then
    echo "${file} exists"
    exit 0
fi

mount -o remount,ro /dev/mmcblk0p1 /boot

末尾の pivot_root . oldroot の下に追記
pivot_root . oldroot

mount -o remount,ro /dev/root /oldroot
for d in dev run run/lock sys run/shm dev/pts boot
do
  mount --bind /oldroot/$d /$d
done

同 init q の下に追記
init q

/usr/local/sbin/a-unionfs-fuse-omit-pid.sh

exit 0

initスクリプト有効化
# update-rc.d a-unionfs-fuse-live-cd defaults

切り替えスクリプト作成
# vi /usr/local/bin/noprotect
#!/bin/sh

mount -o rw,remount /boot
cd /boot
if [ -e "protect" ]; then
    rm /boot/protect
fi

if [ -e "noprotect" ]; then
    echo "noprotect mode"
else
    touch /boot/noprotect
    echo "noprotect mode"
fi

mount -o ro,remount /boot

# vi /usr/local/bin/protect
#!/bin/sh

mount -o rw,remount /boot
cd /boot
if [ -e "noprotect" ]; then
    rm /boot/noprotect
fi

if [ -e "protect" ]; then
    echo "protect mode"
else
    touch /boot/protect
    echo "protect mode"
fi

mount -o ro,remount /boot

# chmod a+x /usr/local/bin/noprotect
# chmod a+x /usr/local/bin/protect


起動モード切り替え
通常(ReadWrite)モードで起動
# noprotect

ReadOnlyモードで起動
# protect



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

フォロワー