2015年12月13日日曜日

Orange PI PCにDebian Linuxを入れる編

前回の投稿(リンク)の続きです。

OSAKANA TAROのメモ帳Orange pi PCをLinuxで使う方法 / lobris版UbuntuをOrange pi 2などで使う のページを参考にして入れていきます。

ただ、Ubuntuではなく、Debianの最小構成みたいなものを入れます。

Debian & Ubuntu for Orange PI H3 boards からファイルの置き場所( Google Drive )に行きDebian_jessie_mini.img.xz をダウンロードして、7zipで解凍。SDカードへの書き込みの方法は他のサイトで探してください。

以下の方法は、私がやって上手く行っているみたいだというだけで、素人が適当にやっていることなので、sudoが抜けているとか、それ根本的に間違ってるぞ、とか、普通そんなことしないぞ、とかそのままやっても上手く行かねえ、とか色々突っ込みどころはあるかと思いますが、決して「上手く行かないけど。どうやってやるの?」とか私に質問しないでください。聞かれても正直、わからないです。



焼いたSDカードの中身は Orange PI PC用以外のファイルがたくさん入っているので、以下のように削除して名前を変える、という作業をWindows PC側でします。

 これだけ不要なファイル。


消してしまいます。


名前変えます。


名前変えます。



SDカードを突っ込んでOrange PI PCを起動。SSHでつなげますので、キーボードもモニターもつなげなくて良いです。LANケーブルだけルーターにつなぎます。

TeraTermなどでssh
OrangePIのIPアドレスはこの時点ではわからないので探す。

ユーザー名:root
パスワード:orangepi
# インストールした時点ではrootでSSHできてしまう問題がありますが、後で直します。

わかりにくいと思いますが、以下、赤い文字列がコマンドです。

fs_resize
Do you want to resize "/dev/mmcblk0p2" (y/N)?  y

passwd
YourRootPassword
# rootパスワード変更(任意の文字列)

shutdown -r now
# 再起動してリサイズを反映させる

再度TeraTermなどでssh
OrangePIのIPはたぶん先ほどのIPアドレス。
ユーザー名:root
パスワード:先ほど変えたroot password

mkdir /etc/skel/public_html
# Webサーバーを運用する予定なら public_htmlというディレクトリがユーザーを追加した時点で自動的に作られる設定。Webサーバー入れないなら不要。

adduser YourUserName
# 自分のユーザー名を追加

groups orangepi
# orangepiの所属しているグループを確認。通常 orangepiとsudoの2つ。

usermod -aG sudo YourUserName
# 先ほど作った自分のユーザー名を sudo グループに設定。YourUserNameはあなたが作りたいユーザー名ですから、そのまま入力しないように。
# sudo ができるようになるための設定。

userdel orangepi
# orangepiユーザーを削除

groupdel orangepi
# orangepiグループを削除

apt-get install vim
# viエディタを使い慣れている人はviがないと話にならないので、この時点でインストール

update-alternatives --config editor
#エディタが違うものになっていたらviに変換するコマンド

vi /etc/apt/sources.list
----------------------------------------------------------------
esc : %s/hr/jp/g
----------------------------------------------------------------
sources.listがクロアチアになっているので、jpに一括置換。

apt-get update
apt-get install aptitude
# aptではなく、aptitudeを使うので、aptitudeをインストール
# aptよりも強力らしい(正直よく知らんですけど)

aptitude update
aptitude upgrade

su YourUserName

sudo  cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
sudo vi /etc/timezone

Asia/Tokyo # に変更

date
# Sun Dec 13 09:12:46 JST 2015, JSTになっているか確認

sudo dpkg-reconfigure locales
JP.EUC-JP JP.UTF-8にチェック

sudo aptitude install cpufreqd cpufrequtils libcpufreq0
#デフォルトのCPU:1.6Ghzはオーバークロック状態らしいですので、1.2Ghzぐらいに落とします。

sudo vi /etc/cpufreqd.conf
以下のように編集
----------------------------------------------------------------
[Profile]
name=Performance High
minfreq=80%
maxfreq=80%
policy=performance
#exec_post=echo 8 > /proc/acpi/sony/brightness
[/Profile]
----------------------------------------------------------------

sudo vi /etc/init.d/cpufrequtils
GOVERNOR="performance" に変更

sudo /etc/init.d/cpufrequtils restart

# これで良いのか?自信なし。何かdmesgでエラー出てるけど、、、

vi sensor.sh
#以下のスクリプトをコピペしてCPUが回っている周波数と温度などを見ます。
----------------------------------------------------------------
#/bin/bash
while (true); do
    cpu_cur=$(( `cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq` / 1000 ))
    cpu_max=$(( `cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq` / 1000 ))
    cpu_min=$(( `cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq` / 1000 ))
    cpu_cur="$(printf "%4s" $cpu_cur)"
    cpu_max="$(printf "%4s" $cpu_max)"
    cpu_min="$(printf "%4s" $cpu_min)"
    tempr=`cat /sys/devices/virtual/hwmon/hwmon1/temp1_input`
    tempr="$(printf "%3s" $tempr)"
    ddr_cur=$(( `cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/cur_freq` / 1000 ))
    ddr_max=$(( `cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/max_freq` / 1000 ))
    ddr_min=$(( `cat /sys/devices/platform/sunxi-ddrfreq/devfreq/sunxi-ddrfreq/min_freq` / 1000 ))
    ddr_cur="$(printf "%4s" $ddr_cur)"
    ddr_max="$(printf "%4s" $ddr_max)"
    ddr_min="$(printf "%4s" $ddr_min)"
    echo -ne "  CPU (MHz): $cpu_cur (min $cpu_min, max $cpu_max)  TEMPERATURE: $tempr  MEMORY (MHz): $ddr_cur (min $ddr_min, max $ddr_max)   "\\r
    sleep 0.2
done
----------------------------------------------------------------
chmod +x sensor.sh
./sensor.sh

# CPU (MHz): 1200 (min 1228, max 1228)  TEMPERATURE:  49  MEMORY (MHz):  672 (min  408, max  672)
#これぐらいに落ちていれば、オーバーヒートしないと思います。Ctrl+Cでスクリプトを止められます。

aptitude install zsh
#shellはやっぱりzshだろう

cd

vi .zshrc
#zshの設定はとりあえずこんな感じで。
----------------------------------------------------------------
# Lines configured by zsh-newuser-install
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
autoload -U compinit; compinit
setopt hist_ignore_all_dups

setopt hist_reduce_blanks

alias lsa='ls -a'
alias lsl='ls -l'
alias lsla='ls -al'
alias -g G='| grep'
alias -g L='| less'
alias -g M='| More'
alias log='cd /var/log'
alias etc='cd /etc'

autoload colors
colors
case ${UID} in
0)
  PROMPT="%B%{${fg[red]}%}%/#%{${reset_color}%}%b "
  PROMPT2="%B%{${fg[red]}%}%_#%{${reset_color}%}%b "
  SPROMPT="%B%{${fg[red]}%}%r is correct? [n,y,a,e]:%{${reset_color}%}%b "
  [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] &&
    PROMPT="%{${fg[white]}%}${HOST%%.*} ${PROMPT}"
  ;;
*)
  PROMPT="%{${fg[red]}%}%/%%%{${reset_color}%} "
  PROMPT2="%{${fg[red]}%}%_%%%{${reset_color}%} "
  SPROMPT="%{${fg[red]}%}%r is correct? [n,y,a,e]:%{${reset_color}%} "
  [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] &&
    PROMPT="%{${fg[white]}%}${HOST%%.*} ${PROMPT}"
  ;;
esac

autoload -U compinit
compinit

# auto change directory
#
setopt auto_cd

# auto directory pushd that you can get dirs list by cd -[tab]
#
setopt auto_pushd

# command correct edition before each completion attempt
#
setopt correct

# compacked complete list display
#
setopt list_packed

# no remove postfix slash of command line
#
setopt noautoremoveslash

# no beep sound when complete list displayed
#
setopt nolistbeep

alias ls='/bin/ls -F --color=auto'

export PATH=$PATH:/sbin

path_history=($(pwd))
path_history_index=1
path_history_size=1

function push_path_history {
    local curr_path
    curr_path=$1

    if [ $curr_path = $path_history[$path_history_index] ]; then
        # do nothing
    else
        local path_history_cap
        path_history_cap=$#path_history

        if [ $path_history_index -eq $path_history_cap ]; then
            local next_cap
            next_cap=$(($path_history_cap * 2))

            path_history[$next_cap]=
        fi

        path_history_index=$(($path_history_index+1))
        path_history[$path_history_index]=$curr_path
        path_history_size=$path_history_index
    fi
}

function - {
    if [ $path_history_index -eq 1 ]; then
        # do nothing
    else
        path_history_index=$(($path_history_index-1))

        local prev_path
        prev_path=$path_history[$path_history_index]

        cd $prev_path
    fi
}

function + {
    if [ $path_history_index -eq $path_history_size ]; then
        # do nothing
    else
        path_history_index=$(($path_history_index+1))

        local next_path
        next_path=$path_history[$path_history_index]

        cd $next_path
    fi
}

function reset_path_history {
    path_history=($(pwd))
    path_history_index=1
    path_history_size=1
}


function chpwd {
    push_path_history $(pwd)
}

----------------------------------------------------------------

sudo vi /etc/ssh/sshd_config
#sshd_configの編集

----------------------------------------------------------------
PermitRootLogin yes

PermitRootLogin no
# Rootログインを禁止します。

Port 22

Port 50022
#別に22番でよければ、そのままPort 22で

AllowUsers YourUserName 
# を最後の行に追加
----------------------------------------------------------------

sudo vi /etc/hostname
YourHostName # host name を適当に入れる

sudo vi /etc/hosts
127.0.0.1       YourHostName # hostnameで設定した名前をここに書く

sudo vi /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1 # 追加。 ipv6は使いません。

sudo aptitude remove isc-dhcp-client
# dhcpを削除する。

sudo vi /etc/network/interfaces
# IPアドレスを固定します。
----------------------------------------------------------------
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
   address 192.168.1.101
   netmask 255.255.255.0
   gateway 192.168.1.1
   dns-nameservers 192.168.1.1
----------------------------------------------------------------
IPアドレスはご自分の環境に合わせて適宜書き換えてください。

これで私の環境ではとりあえず動いているようです。上手く行かない場合は、私にはわかりませんので、エラーは後であれこれ弄って何とか直す。Webで探して苦労しながら解決する、というのがこの手のものを使う楽しみというものです。

後はapache2でも、lighttpdでも、asterisk入れて内線電話システムやら、Webcamをつないで motionでも、お好きなように構成していけば楽しみが広がる、と思います。まあ何にしろ、LANの内部だけでやってる方が無難です。

以上、Debian_jessie_mini のやり方だけで、その他のディストリビューションはわかりません。
間違ってるところはご指摘ください。再度申し上げますが、素人があちこちのWebサイトを引いて適当にやっていることなので、、、