Raspberry Pi 2設定メモ
(注)この記事は2015年5月4日に旧ブログに投稿したものです。今でも有効な内容かは不明・・・
先日ストレス発散に(笑)Raspberry Pi2をしました。
改めて1から環境構築しましたので、その内容を備忘録がてらメモしておきます。
(なお、このページは随時更新する予定です)
入れたソフト&設定
jfbterm
素のままですとコンソール画面日本語を表示させると■表示になってしまいます。
そこでこのソフトを導入して日本語も表示できるようにします。
sudo aptitude install jfbterm
vim
Raspberry Piにはnanoって言うエディタが標準で入っていますが、 やはり使い慣れているエディタの方が捗りますからね。
ちなみに、私はvim派です。
sudo aptitude install vim
hostapd
isc-dhcp-server
新ラズパイは旅行でホテル行ったときに無線APとして使うことを企んでいます。
tightvncserver
xinetd
SofEther VPN Bridge
ラズパイとVPNサーバを拠点間接続させます。
詳細は作成中
iptables
サーバとして使う予定は無いですが不要なアクセスは蹴ってもらうようにします。
あとNAPTの設定も。
JavaScriptで文字コード変換
(注)この記事は2015年3月18日に旧ブログに投稿したものです。今でも有効な内容かは不明・・・
とあるWebアプリっぽいもの?を今作っています。
その中でブラウザからサーバへテキストを送信する際、Shift_JISの文字コードで送る必要があったんですが、JavaScriptの内部文字コードがUnicode(UTF-16)なので、変換が必要になりました。
参考:JavaScript中での文字列の扱い
(本来ならサーバ側で文字コード変換したかったんですけどねー・・・)
というわけで、JavaScriptでどうやってUnicodeからShift_JISに変換するのかなーと思って探ってみたんですが、単純には出来ないっぽいです。
その代わり、ステキなJavaScriptの文字コード変換ライブラリを見つけたので、これを使ってみることにします。
https://github.com/polygonplanet/encoding.js
参考にしたページはこちら。
http://qiita.com/weal/items/3b3ddfb8157047119554
280KBの超大作…!変換テーブル保持してたら、まぁそれくらいのサイズは行ってしまいますよね。
まず、入力した文字列()を文字コードの配列に変更します。
var unicodeText = "ほげぴよ"
var unicodeArray = str2Array(unicodeText);
function str2Array(str) {
var array = [],i,il=str.length;
for(i=0;i<il;i++) array.push(str.charCodeAt(i));
return array;
}
encoding.jsのEncoding.convert();メソッドを使って変換。
var sjisArray = Encoding.convert(unicodeArray, 'SJIS', 'UNICODE');
sjisArrayにShift_JIS文字コードの配列が格納されました。
あとはURLエンコーディングをして、サーバに送ればOKです。
Encoding.urlEncode(sjisText)
Raspberry Piで電子工作はじめました。
(注)この記事は2015年1月12日に旧ブログに投稿したものです。今でも有効な内容かは不明・・・
これまでラズベリーパイは、VPNルータや無線APをつくったりと、ソフトウェア部分で色々いじっていましたが、折角GPIOついてるんだし、電子工作でもやってみようと思います。
ちなみに、電子工作は大学の授業で習ったきりですので…10年ぶりくらい?完全に素人レベル。
というわけで、Amazonでお買い物。
Raspberry Pi model B+ 用 GPIOキット GPIOポート、ブレッドボード、40pinケーブル、LED、抵抗、プッシュボタン、ジャンパーワイヤー付き
今見たら品切れになってますね。。。タイミングが良かったー
Raspberry Piとブレッドボードを繋げてみます。
若干ケースに干渉してしている気がしなくもないですが…まぁつながりました。
では、さっそく配線。
電子工作の”Hello World” 的な事と言えば、Lチカですよね。
さっそく配線してみました。
(写真だけではわかりにくいので、LEDと抵抗の線は青で追記しました。緑はブレッドボード内部の配線です)
LEDは足が長いほうがアソード(+側)。逆だと繋がりません。
抵抗は、購入時についていた1kΩを使用します。
カラーコードはさすがに読み方を覚えていないので、Webサイトで調べつつ。。
http://www.azusa-st.com/resistor/
では、Raspberry Piから制御してみます。
今回はGPIOの25番に繋いだので、こんな感じ。
echo 25 > /sys/class/gpio/export
cd /sys/class/gpio/gpio25
echo out > direction
では、LEDを点灯させてみます。
echo 1 > value
無事つきました。ちなみに消灯する場合は、
echo 0 > value
です。
最後に、GPIO25番の制御を終了します。
echo 25 > /sys/class/gpio/unexport
とりあえず最初なのでコマンドラインからLチカしましたが、いちいちコマンド叩かなくても『WebIOPi』ってツールを使えばWebから操作できます。
http://code.google.com/p/webiopi/
サイトからtar.gzをDL→解凍して、
sudo ./setup.sh
サービスの起動は
sudo service webiopi start
です。
設定ファイルは、/etc/webiopi/configにあります。今回は特に触りません。
ブラウザで、http://ラズパイのIPアドレス:8000/ へアクセスすると、認証ダイアログが出てくるので、
ユーザー名:webipoi
パスワード:raspberry
でログインします。
GPIO Listをクリックするとこんな感じの画面が出てきます。
左列のINとOUTは入力・出力、
右列の黒と色付きは、OFFとONを表しています。
上からGPIOの22, 23, 24, 25とLEDをつないでみました。
24はOFFになっているのでLEDがついていませんね。
Raspberry PIで無線AP+ルーターを作ってみた
(注)この記事は2015年1月1日に旧ブログに投稿したものです。今でも有効な内容かは不明・・・
2015年1発目の記事は「Raspberry PIで無線AP+ルーターを作ってみた」です。
訳あって毎年恒例の年越し新年会にラズパイを持って行くことになり、じゃあ折角なんで無線LANからでも使えるようにしておこうと思ったわけです。
というわけで大晦日にお買い物。
IEEE802.11n/g/b準拠 150Mbps(規格値)無線LANアダプター(超小型モデル)WN-G150UMシリーズ
ラズベリーパイに挿したら自動認識してくれました。
ネットワークの設定
WPAによる暗号化通信の設定をします。
wpa_passphrase [SSID] [Key]
コマンド実行結果
network={
ssid="[SSID]"
#psk="[Key]"
psk=*******************************
}
出力された文字列を基にして足りない項目を補完し、/etc/wpa_supplicant/wpa_supplicant.conf ファイルに追記します。
追記後のファイルはこんな感じ。
/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="****"
psk=*************
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}
ちなみに、/etc/network/interfaces ファイルの内容は以下の通り。
自動認識したときに勝手に追記してくれたようです。
X画面で色々いじったりしてからの内容なので、挿した直後とは違うかも。。。
/etc/network/interfaces
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
最後に、ネットワークを再起動すれば、無線LANでアクセスができるようになりました。
sudo service networking restart
ちなみに、X画面上からも設定できます。
そっちのほうがはるかに楽。
無線APの作成
では、いよいよ無線APを作ります。
まず、hostapdをインストール
sudo apt-get install hostapd
設定ファイルのサンプルをコピーして、編集します。
sudo zcat /usr/share/doc/hostapd/examples/hostapd.conf.gz > /etc/hostapd/hostapd.conf
色々と沢山設定があるみたいですが、コメントがしっかり書いてあるので読めば何とかなりそうです。
とりあえず、自分は以下の行を編集(&アンコメント)しました。
/etc/hostapd/hostapd.conf
ssid=RaspberryPi
wpa=2
wpa_passphrase=**********
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
デーモン起動時に設定ファイルを読み込むように、/etc/default/hostapd ファイルを編集します。
変更した行は以下の通り。
/etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"
まずは手動でhostapdを起動してみます。
sudo hostapd /etc/hostapd/hostapd.conf
Configuration file: /etc/hostapd/hostapd.conf nl80211: 'nl80211' generic netlink not found Failed to initialize driver 'nl80211' rmdir[ctrl_interface]: No such file or directory
うまく動きませんorz
困った時のネットで調べてみたら、どうやらドライバーが対応していないそうで。。。
“nl80211 not found”
という出力が出た場合、”driver=nl80211″は使えません。”driver=rtl871xdrv”を使いましょう。
というわけで、バイナリを差し替えます。
wget http://www.adafruit.com/downloads/adafruit_hostapd.zip
unzip adafruit_hostapd.zip
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.ORIG
sudo mv hostapd /usr/sbin
sudo chmod 755 /usr/sbin/hostapd
/etc/hostapd/hostapd.conf ファイルも修正します。
/etc/hostapd/hostapd.conf
driver=rtl871xdrv
もう一度起動。
sudo hostapd /etc/hostapd/hostapd.conf
無事に起動できました。
アンドロイド端末からもAP名がちゃんと表示されます。
DHCPサーバの作成
続いて、DHCPサーバーを作成します。
sudo apt-get install isc-dhcp-server
そしたら…
[FAIL] Starting ISC DHCP server: dhcpd[....] check syslog for diagnostics. ... failed!
failed!
いきなり起動しようとしてエラー吐きました。
まだ何も設定していないので当然っちゃ当然。
というわけで、設定ファイルを編集します。
変更したのは以下の通り。
/etc/dhcp/dhcpd.conf
#option domain-name "example.org"; #option domain-name-servers ns1.example.org, ns2.example.org;
(上記2行はコメントアウト)authoritative;
(上記1行はアンコメントアウト)subnet 192.168.2.0 netmask 255.255.255.0 { range 192.168.2.101 192.168.2.110; option broadcast-address 192.168.2.255; default-lease-time 600; max-lease-time 7200; option routers 192.168.2.1; option domain-name "local"; option domain-name-servers 8.8.8.8, 8.8.4.4; }
(上記を追加。アドレス等は適当に置き換えてください)
DHCPサーバに使用するインタフェース(今回の場合、無線LAN)を指定します。
/etc/default/isc-dhcp-server
INTERFACES="wlan0"
無線LANインタフェースに固定IPアドレスを割り当てます。
(もともと設定が書いてあった箇所はコメントアウト)
/etc/network/interfaces
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface wlan0 inet static
address 192.168.2.1
netmask 255.255.255.0
iface default inet dhcp
以上で設定は完了です。
デモ
当日のデモはこんな感じでやってみました。
CentOS7を入れたら色々とハマった
(注)この記事は2014年7月21日に旧ブログに投稿したものです。今でも有効な内容かは不明・・・
CentOS7が出ました。
しばらくすれば、さくらのVPSの標準OSもCentOS 7に変わる思いますが、折角なのでISOイメージからインストールしてみました。
…そしたら色々とハマったのでメモ。
iptables → firewalldに変わった
/etc/sysconfig/iptables ファイルが見当たらないなぁと思ったら、ファイアウォールのサービス変わったんですね。
コマンド叩いて設定入れ直しました。。
設定の一覧を表示firewall-cmd --list-all-zones
サービスを有効にするfirewall-cmd [--zone=<ゾーン名>] --add-service=<サービス名> [--timeout=<秒>]
ポート,プロトコルを有効にするfirewall-cmd [--zone=<ゾーン名>] --add-port=<ポート番号>[-<ポート番号>]/<プロトコル> [--timeout=<秒>]
- ちなみに、サービスやポート、プロトコルを無効にしたい場合は –add-~ → –remove-~ に変更
- –permanent をつけずに実行した場合、再起動した際に設定が消えてしまう。
再起動後も設定を有効にしたい場合は、–permanent 付き、–permanent 無しをそれぞれ実行する。
詳細は以下のURL参照
FirewallD/jp — Fedora Project Wiki
Linux女子部 firewalld徹底入門!by Etsuji Nakai (Slideshare)
Fedoraのfirewalldの設定 — 猫ぱーんち!
Webminのステータス表示が正しく出ない
コマンド叩くのめんどくさいから普段はWebmin導入しているんですけど、
ステータス表示画面がエラー出てたんですね。
調べたら以下の3パッケージを導入すればいいみたいです。
perl-Data-Dumper
perl-Data-Dumper-Concise
perl-Data-Dumper-Names
起動管理プロセスがupstart → systemdに変わった
設定ファイルの書き方が色々変わって苦労しました。
書き方は下記のURLを参考していただくとして。。。
自動起動を有効/無効にするsystemctl enable/disable <サービス名>
サービスを起動、停止するsystemctl start/stop <サービス名>
サービスの状態を確認するsystemctl status <サービス名>
参考URL
Linux女子部 systemd徹底入門 by Etsuji Nakai (Slideshare)
systemd & systemctl — とみぞーノート
SELinux関係
さくらのVPS(標準OSでインストールした場合)では、SELinuxは無効になっているんですが、ISOからCentOS7をインストールした場合は有効になっていました。
このまま有効にしておいてもよかったんだけど、過去にいろいろSELinux関係でハマっているので無効にしておきます。
SELinuxの有効/無効は/etc/selinux/config ファイルを開いてSELINUX=disabled
に変更
ちなみに、現在の状態を確認するのは、getenforceコマンド。
一時的に有効/無効に設定するのは、setenforce 0 または setenforce 1
ちなみに、ls -l コマンドでファイルの一覧を表示させたとき、パーミッション欄に表示される “.”(ドット)は、SELinux有効時に作成されたファイルなんですって。
これまであまり気にしてなかったけど、そういう意味だったのね。。