きなこのブログ

技術系の覚書など。

2つめのCGIをインストール

これまでの記事で使ってきたraspiにてがろぐをインストールしようとしたところ、500 Internal Server Errorが出てしまって解決にちょっと手間取りました。そのメモです。

まずは普通にインストールのため、

ここまでやってエラーが直らなかったので、.cgiファイルの先頭パスをチェックし、ファイルの改行コードをCRLF->LFに変更もしてみましたが、直らず。

ログファイルを見てみました。

sudo less /var/log/apache2/error.log

するとまずは以下のようなメッセージが。

(2)No such file or directory: AH01241: exec of '/var/www/html/tegalog/tegalog.cgi' failed

いやいや、そこにちゃんと置いてるよ?ということでシンボリックリンクを作成してみたところ、エラーログが変化。

Can't locate CGI.pm in @INC (you may need to install the CGI module) (@INC contains: . /etc/perl /usr/local/lib/arm-linux-gnueabihf/perl/5.24.1 /usr/local/share/perl/5.24.1 /usr/lib/arm-linux-gnueabihf/perl5/5.24 /usr/share/perl5 /usr/lib/arm-linux-gnueabihf/perl/5.24 /usr/share/perl/5.24 /usr/local/lib/site_perl /usr/lib/arm-linux-gnueabihf/perl-base) at /var/www/html/tegalog/tegalog.cgi line 28.

CGI.pmが無い??

$ find `perl -e 'print "@INC"'` -name '*.pm' -print | grep CGI
find: ‘/usr/local/lib/arm-linux-gnueabihf/perl/5.24.1’: そのようなファイルやディレクトリはありません
find: ‘/usr/local/share/perl/5.24.1’: そのようなファイルやディレクトリはありません
find: ‘/usr/local/lib/site_perl’: そのようなファイルやディレクトリはありません

sudo a2enmod cgidとはまた違うモジュールが要るらしい。

こちらの記事を参考に別のモジュールをインストールしてみる。

stackoverflow.com

sudo apt-get install libcgi-session-perl

これで直りました。

IPアドレスが取れない? [Raspbian Stretch]

部屋の模様替えをしていて、うっかりラズパイの電源を抜いてしまいました。

もう一度コンセントを差し込んだらLEDは点いたものの…あれ?Apatchに繋がらない、pingも通らない。

色々サービスの再起動もしてみたけど直らず、dhcpcdがFailedになっている。

なんだなんだ??とapt-getなどいろいろやってみましたが、結局

sudo dhcpcd wlan0

としたら直ってしまいました。固定IPなんですが…なんだったのかな?

DropboxでRaspberryPiのバックアップ

データの保護が心配になってきたものの、バックアップ用にUSBメモリやラズパイもう一枚というのも見栄えが良くないし、やっぱりバックアップするなら拠点を別にしたいので、Dropboxでファイルバックアップが取れるようにしました。

環境:RaspberryPi Mpdel B / Raspbian Stretch (2018-04)

RaspbianでDropboxを使うには

DropboxLinux用ソフトウェアを提供してはいますが、RaspberryPiに搭載されているARM系CPUには対応していないみたいです。公式のものは動かしてみても「platform is not supported」みたいなことを言われます。

そこでgithubで公開されているBASHスクリプトDropbox-Uploaderをお借りすることにします。名前はUploaderですがダウンロードも可能です。リアルタイム同期はできませんが、バックアップ用途なら十分でしょう。

参考にしたサイト: 第54回「SORACOM応用編!ラズベリーパイからDropboxへファイルをアップロード(1)Dropbox-Uploader」 【Raspberry Pi】Dropbox Uploader のインストール

Dropbox-Uploaderをインストールする

README.mdを見ながらインストールしていきます。

ダウンロード

curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh

実行権限を付与

chmod +x dropbox_uploader.sh 

適当なフォルダへ移動して初回実行

sudo mv dropbox_uploader.sh /usr/local/bin/dropbox_uploader 
/usr/local/bin/dropbox_uploader/dropbox_uploader.sh

初回実行時はセットアップが実行されます。App keyとApp secretの取得は次の手順で。

Dropbox APIを設定する

https://www.dropbox.com/developers/apps にアクセスしてCreate APIからAPIを作ります。

APIのタイプはApp FolderFull Dropboxの2種類ありますが、ここではFull Dropboxを使用します。というのは、App Folderだとアカウントルートの下に別途App専用フォルダが作成されるのですが、そこは完全に独立しており共有もできないという、Dropboxの仕様があるからです。

私は既にDropbox上で同期しているフォルダ・共有されたフォルダをラズパイに同期したかったのでFullにしましたが、完全に分けたいし共有もしないということであれば、App Folderを選んでも手順は同じです。

f:id:kinakomochi-tank:20180725094118p:plain

Create App > 1. Dropbox APIを選択 > 2. Full Dropboxを選択 > App nameに分かりやすいアプリ名を入れて > Create Appでアプリの完成です。

App keyとApp secretを先程のターミナルに入力してセットアップは完了です。

動かしてみる

Readmeのまんまですが。テストアップロード

dropbox_uploader upload test.txt /test.txt

中身のないファイル/ディレクトリはスキップされます。アップロード時にローカルファイル(ラズパイ上の)に読み取り権限がないとエラーになります。またハッシュ値を比較していて同じであればスキップされます。このチェックにかなり時間がかかっている感じ。

上手く行ったのでcrontab -eでスケジュール実行を登録

dropbox_uploader.sh upload /var/www/html/ /backup
dropbox_uploader.sh download /localsite/notes /var/www/html

見るときはcrontab -lです。

RaspberryPiでnicky.cgiを動かす

レガシーを通り越してレトロな風情のある懐かしのnicky.cgiRaspberry Piで動かす記事です。需要なさそうですが…ローカル用ということで。

環境:RaspberryPi Mpdel B / Raspbian Stretch (2018-04)

Webサーバを立てる(Apache

参考サイト:VMware + Debian jessieでウェブサーバ その3 -ViVid Bit-

まずはApacheをインストールします。これだけで2.4(最新)が入ったみたい。

sudo apt -y install apache2

文字コードUTF-8にします。

sudo vi /etc/apache2/conf-available/charset.conf

AddDefaultCharset UTF-8

セキュリティ設定を変更しておきます。

sudo vi /etc/apache2/conf-available/security.conf

# クライアントに送り返すサーバ情報を最低限にしておく
ServerTokens OS → Prod
# サーバが生成するドキュメントのフッタに情報を載せない
ServerSignature On → Off

ポートを変更する場合はこちら。下記の設定だと、アクセスURLがhttp://<ラズパイのhostname>:8181/になります。

sudo vi /etc/apache2/ports.conf

Listen 8181

こちらも合わせて変えておきます。

sudo vi /etc/apache2/sites-enabled/000-default.conf
# 一番最初の行
<VirtualHost *:8181>

終わったらApacheを再起動。

sudo /etc/init.d/apache2 restart

ブラウザでhttp://<ラズパイのhostname>/またはhttp://<ラズパイのIPアドレス>/にアクセスしてみましょう。Apache2.4のWelcomeページが見えたら成功です!簡単でしたね。

設定ファイルの構成が書いてあります。ふむふむ。

/etc/apache2/
|-- apache2.conf
|       `--  ports.conf
|-- mods-enabled
|       |-- *.load
|       `-- *.conf
|-- conf-enabled
|       `-- *.conf
|-- sites-enabled
|       `-- *.conf

Perl-CGIを動かせるようにする

nicky.cgiPerlで書いてあるので、Perlをインストールしましょう。apt-getで5.24が入りました。

sudo apt-get install perl

Perl-CGIを動かす設定

Apacheの設定ファイルの方に追記します。Webサーバのデフォルトルートフォルダ/var/www/htmlをそのまま使い、その下のnickyフォルダの中に設置します。

sudo vi /etc/apache2/mods-enabled/mime.conf

# 219行目:コメント解除し、CGIとして扱う拡張子を設定(デフォルトのまま)
AddHandler cgi-script .cgi .pl

sudo vi /etc/apache2/sites-enabled/000-default.conf

# 13行目あたりに追記
<Directory "/var/www/html/nicky">
    AllowOverride All
    Options +ExecCGI
    Require all granted
    AddDefaultCharset EUC-JP
</Directory>

nicky.cgi文字コードEUC-JPなので、それも書いておきます。この書き方をしておくと、nickyフォルダ以外は最初に設定したUTF-8が既定の文字コードになります。

nicky.cgiを設置

CGIファイルを編集

nicky.cgiMeryなどで開き、1行目のパス#!/usr/local/bin/perl#!/usr/bin/perlに変更しておきます(.cgiのファイルにはすべてやっておきましょう)

CGIファイルを設置します。

sudo mv /home/pi/nicky.cgi /var/www/html/nicky/nicky.cgi

パーミッションを書き換えます。

sudo chmod -R 755 /var/www/html/nicky/nicky.cgi

CGIの実行ユーザを変更する

この状態でhttp://Pi-hostname/nicky/nicky.cgiにアクセス…しても動きません。

試しにls -al /var/www/html/nickyしてみるとファイルのユーザとグループがpiかrootになっていると思います。そう、実行権限が無いのです。755は「所有者にはフルコン、所有グループには実行権限、その他にも実行権限」です。rootやpiが所有者だと実行はできるんじゃないの??と思えますが、実施に動かすのはWebサービスなので、そいつに書き込み権限がないとnicky.cgiは動作できないというわけです。

なぜ所有者が違うかというとmvしたからですね。このあたりは、コピーならコピー先のパーミッションが適用され、移動なら元のパーミッションごと持っていくWindowsの挙動と似ています。

そこで、まずはsudo less /etc/apache2/envvarsでapache2のグループとユーザを確認します。

# 16行目あたり
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

どちらもwww-dataだということがわかりました。cgiファイルとフォルダの所有者と所有グループをを書き換えます。

$ sudo chown www-data:www-data /var/www/html/nicky
$ sudo chown www-data:www-data /var/www/html/nicky/nicky.cgi

Apacheのcgidモジュールを有効にする

さらに、Apacheの設定としてモジュールの有効化が必要になります。コア機能以外はモジュール化されていて後で入れるんですね。

sudo a2enmod cgid

終わったらApacheを再起動しましょう。これで無事CGIが動作するはずです。

sudo systemctl restart apache2

無効にするときのコマンドはこちら。

sudo systemctl restart apache2

viでの文字化けをなおす

panel.cgiが動かない…1行目のパスを書き換え忘れていたなあ。よし、viで修正しよう。

参考サイト:Linuxのviで文字化けをしないようにする

viで表示中のファイルの文字コードを変更する

:e ++enc=euc-jp

保存するときの文字コードを変更する

:set fenc=euc-jpのあと:wq

まだエラーが出る

それでもまだカテゴリ機能にアクセスするとCan't locate CGI.pm in @INC (@INC contains: ~~~(パスが書いてある)と表示されます。nicky.cgiは問題ないのに、panel.cgiだけ上手くパスが通っていないみたい?

シンボリックリンクを作成して解決します。

cd /etc/perl
sudo ln -s /var/www/html/nicky/panel.cgi panel.cgi

さて、動いたでしょうか。これでこの秘密の小箱はあなたの秘密の日記帳です。もちろん日記以外にも好きなコンテンツを置いて楽しむことが出来ます。

マンションLANでSoftEther VPN on Raspberry pi 3

いわゆるマンションLANというのか、ホテルのようにLANポートが壁に出ていて挿したらインターネットに出られるけどローカルIPしかもらえない、という環境でVPNする方法です。

前回の記事の続きです。

目標:グローバルIPなしでVPN接続して、自分自身と家LANにアクセスしたい

いくらルータがRTX830であってもグローバルIPが無ければVPNセッションは張れません。そこで、自宅LAN内にVPNサーバを立て、いわゆる「NAT越え」を実現する方法を考えます。

VPN Azureを使う

Raspberry piの活用もしたかったので、今回はSoftEther VPN serverを使用することにしました。SoftEtherは元々L2TPなどに対応していないネットワークでもHTTPSプロトコルで通信することでVPNセッションを確立するそうです。つまり自宅のルータがVPNパススルーに対応していない安いやつでも大丈夫です。さらにVPN Azureという機能でサーバリレーらしきやり方を用いることで、グローバルIPのない拠点に対してもVPN接続が出来るようにしてくれます。

ネットワーク構成を考える

結論から言うと、NIC1枚構成は諦めました。かなりハマったのですが、tap作ったりbr作ったりL3SW作ってサブネット分けたり仮想HUB増やしてカスケードとか色々やりましたけどうまく行きませんでした。

幸いにしてRaspberry pi 3にはNICが有線と無線の2枚搭載されています。ここではeth0をVPN用、wlan0をLAN内接用として使用する構成にします。

概要図(手書き)

f:id:kinakomochi-tank:20180524070602p:plain

Raspberry piVPN ClientがVPN Azureで待ち合わせて家LANに一緒に帰るイメージでしょうか。TeamViewerと似てますね。VPN ClientはRaspberry piを含む家LANのすべての端末にアクセスできます。

VPN Azureの代わりにVPSを自分で立ててサーバリレーする方法もあるみたいです。ちょっと興味はあったものの、国内サービスだと月額1000円くらいはするようだし、外国の激安VPSだとサービス継続性の不安やセキュリティ問題をクリアする自信がなかったので、無料(!)のVPN Azureで頑張ってみることにしました。

構築手順を考える

この記事で扱う構成を簡単にまとめると以下のようになります。

この構成では、既存の環境にラズパイとラズパイ上の設定を足すだけです。難しい起動スクリプトもありません。それではやっていきましょう。

SoftEther VPN serverの設定

SoftEther VPN serverをインストール

公式サイトのとおりです。

  1. SoftEtherのサイトからVPN Serverパッケージをダウンロードします。ここではLinux -> ARM EABI (32bit)のもの。

  2. teratermRaspberry piSSHログインします。

  3. ダウンロードしたファイルをteratermドラッグ&ドロップするとあら不思議。/home/pi(例)と入力してSCPをクリックするとファイルがラズパイにコピーされます。そう、これがSCP…!

  4. ここからはCUI

   # パッケージを解凍
   tar xf softether-vpnserver-v4.27-9664-beta-2018.04.20-linux-arm_eabi-32bit.tar.gz
   # vpnserverというフォルダができるのでmakeコマンドを実行
   cd vpnserver
   sudo make
   # フォルダごと実行フォルダへ移動
   cd ..
   sudo mv vpnserver /usr/local
   cd /usr/local/vpnserver/
   # 実行権限を付与
   sudo chmod 600 *
   sudo chmod 700 vpncmd
   sudo chmod 700 vpnserver

5.インストールできたか確認してみる

   sudo /usr/local/vpnserver/vpncmd
   1. VPN Server または VPN Bridge の管理
   #あとは空白のままEnterEnter
   check
   この動作環境チェックツールを実行したシステムがテストに合格した場合は、SoftEther VPN ソフトウェアが動作する可能性が高いです。チェックにはしばらく時間がかかる場合があります。そのままお待ちください...
   
   'カーネル系' のチェック中...
                 [合格] ○
   'メモリ操作系' のチェック中...
                 [合格] ○
   'ANSI / Unicode 文字列処理系' のチェック中...
                 [合格] ○
   'ファイルシステム' のチェック中...
                 [合格] ○
   'スレッド処理システム' のチェック中...
                 [合格] ○
   'ネットワークシステム' のチェック中...
                 [合格] ○
   
   すべてのチェックに合格しました。このシステム上で SoftEther VPN Server / Bridge  が正しく動作する可能性が高いと思われます。
   
   コマンドは正常に終了しました。

6.全部○になったらとりあえずOKです。exitで抜けます。

init.d vs systemd

よその記事を見ていて、init.dで起動スクリプトを書く記事と、それをさらにsystemdで登録などしている記事があって混乱したのでちょっと調べてみました。

  • デーモン…要するに(Windowsで言うところの)サービス。

  • init…デーモンを起動するためのもの。よりカーネルに近いところにいる。

  • init.d…initの一種であるsysvinitで使われる起動スクリプトが置かれるディレクト/etc/init.dのこと。

  • systemd…sysvinitの進化系。

  • sysvinit…Debianの説明によると、

    jessie 以降のデフォルトは、Linux では systemd になります。これは円滑な移行を促すとともに、systemd への切り替え後に 万が一システムが起動しなくなった場合に備えてフォールバック用の SysV init バイナリを提供します。

    ということなので、systemdで動くならわざわざsysvinitを使わなくていいということですね。

とりあえず今Stretchを触っている限りではsystemdだけで困っていません。

起動ファイルを作ってスタートアップに登録する

参考サイト:SoftEther VPN Serverをsystemd対応にする - Qiita

サービスのファイルを作る

sudo touch /etc/systemd/system/vpnserver.service

vpnserver.serviceの中身を書く

[Unit]
Description=SoftEther VPN Server
After=network.target network-online.target

[Service]
User=root
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
Type=forking
RestartSec=3s
WorkingDirectory=/usr/local/vpnserver/
ExecStartPre=/sbin/ip link set dev eth0 promisc on

[Install]
WantedBy=multi-user.target

デーモンをリロードして作ったvpnserverを立ち上げてみる

$ sudo systemctl daemon-reload
$ sudo systemctl start vpnserver

自動起動に登録してちゃんと上がってくるか確認

$ sudo systemctl enable vpnserver.service
$ sudo reboot
$ systemctl status vpnserver.service
● vpnserver.service - SoftEther VPN Server
   Loaded: loaded (/etc/systemd/system/vpnserver.service; enabled; vendor preset
   Active: active (running) since Tue 2018-04-24 21:56:41 JST; 45s ago

Active: active (running)になっていればいい。やったぜ。

SoftEther VPN 管理マネージャの設定

  1. VPN serverと同じところから「SoftEther VPN Server Manager for Windows」をダウンロードして、作業用PC(Windows)に管理マネージャをインストールします。
  2. 新しい接続設定を作成して、ホスト名をwlan0に固定したIPアドレスにします。(eth0はこのあとアクセスできなくなるので)ポート番号は443のままで
  3. 接続設定の作成画面では管理パスワードを入力しないでOK
  4. できた接続先に接続すると管理画面が開きます

まずはこの時点で対象機器=Raspberry piにアクセスできています。このあと仮想HUBの設定を間違えたりネットワーク設定をトチったりするとブロードキャストストームが発生することもあるので、駄目になったら接続設定を削除してやり直しましょう。

  1. 仮想HUBを作成 名前と管理用パスワードは適当に
  2. 仮想HUBの管理ー>ユーザの管理で適当にユーザを作る
  3. パスワード認証にしてパスワードを設定 これがVPNアクセスアカウントになる
  4. ローカルブリッジ設定で作った仮想HUBとeth0をブリッジ
  5. VPN Azure設定から適当なホスト名を作成

もしもの時のCUIから操作

sudo /usr/local/vpnserver/vpncmd
1
Enter
Enter
help

ネットワーク設定

interfacesの設定

/etc/network/interfacesは特に触るところはありません。

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotlplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

ネットワークに接続される時に実質auto eth0allow-hotplug eth0の違いは無さそうに見えるのですが、SoftEtherのセットアップで色々やっている時にauto eth0すると上手く立ち上がりませんでした。違いがよく分かりませんが、上記は成功例として記載しておきます。(参考:/etc/network/interfaces" の基本的なシンタックス - Debian公式ドキュメント)

dhcpcd.confの設定

/etc/dhcpcd.confeth0を0.0.0.0にします。理屈はよく分かっていませんが、こうすることでeth0はIPが”無い”ものとみなされるようです。L2で接続されているということなのかな??

interface eth0
static ip_address=0.0.0.0

interface wlan0
static ip_address=192.168.0.116/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

実はこの0.0.0.0を使う設定に気づいたのがかなり最後の方だったので、これを使えばNIC1枚構成でも上手く行っていたのかもしれません。(根気が尽きたので未検証。。。)

wpa_supplicant.confの設定

wpa_supplicant.confもとくにいじりません。

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

# ここから追記
network={
    ssid="SSID" #ダブルクォーテーションが必要
    scan_ssid=1 #SSIDがステルスなら1にする
    psk=暗号化されたパスフレーズ #暗号化しないと動かない(気がする)
    key_mgmt=WPA-PSK #なくてもいいかも
}

ネットワーク>vpnserverの順に起動する必要があるので、sudo rebootして完了です。デーモンとインタフェースが立ち上がっているか確認しておきましょう。

SotfEther VPN Clientをインストール

ここではWindows版を使います。SoftEther VPN ClientはPCに仮想ネットワークインタフェースを一個増やします。そいつが仮想HUBとカスケード接続されてあたかもClient PCが家LANに参加しているように振る舞います。当然ながら、物理インタフェースがインターネットに接続している必要があります。

  1. 外出先のPCでVPN Clientをインストールしましょう。
  2. 新しいVPN接続を作成します。
  3. 接続先VPNサーバを自分のvpnazureホスト名にして
  4. 仮想HUBに設定したユーザ名とパスワードを入れて
  5. ポートは443、992、1194、5555のどれでもいい
  6. 接続できると家のルータからDHCPアドレスがもらえます。

接続確認

  • とりあえずwlan0のアドレスにpingしてみる
  • 手っ取り早くターミナルログイン
  • その他WebサービスなりSMBなりお好きに

DHCPがもらえない時は仮想HUBの設定を確認してください。SecureNATが有効になっているとこの構成ではだめです。

ラズパイ以外には接続できるけどラズパイ自身に接続できない時はブリッジかwlanの設定が間違ってます。eth0は0.0.0.0にすること、tapやbrctlは使わないことです。

あとバカバカしいんですがdhcpcdでrouterのアドレスを打ち間違えてて仮想HUBまで繋がらないというのもありました。この時はRaspberryPiのターミナルからVPN Azureのホスト名にpingできないのでインターネットに出れてないとわかりました。

セットアップするより記事にするほうが大変ですね…はてなMarkdown難しい。とりあえず、次引っ越す時はパブリックIPがもらえる所にしたいと思います。

Raspbian Stretchでネットワーク設定

Raspbian Stretchでネットワーク設定

dhcpcd.conf か?/etc/network/interface か?

ネットの記事を探すと/etc/network/interfaceで設定するという記事がたくさんありますが、Raspbian Jessieから大きな変更があり、dhcpcd.confで固定するようになったようです。(Wheezy -> Jessie -> Stretch - Wiki(en)

dhcpcd vs /etc/network/interfacesより抜粋して要約;

本当に単純なやり方でJessieを使うなら、interfacesはほとんど無視してdhcpcd.confinterfacesで作業できます。

dhcpcdとinterfaceに優先順位はある?どちらを使えばいい?

dhcpcd.confwpa-supplicant.confが基準になって、interfacesはデバイス自身のために残ります。

ということなのでWheezyまでは固定IP設定は/etc/network/interfaceでいいですし、Jessie以降でもそうできなくはないですが、ここではStretchなのでdhcpcd.confを使うことにします。

なお、同じような大型アップデートとしてサービスの登録をinit.dで行っていたものがsystemdに変わっていますが、これは別の記事で書きます。

/etc/network/interfacesの設定

よって/etc/network/interfacesにはIPを書かず、デバイス設定の記述だけ足します。

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotlplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

ちなみに、初期状態でも起動したらIPを取って来ているのでDHCPなら何もしなくてもよさそうです。configに明記するなら以下のようにできます。

auto eth0
iface eth0 inet dhcp

dhcpcd.confの設定

/etc/dhcpcd.confの一番最後に固定したいIPアドレスを書き足します。

interface eth0
static ip_address=192.168.0.115/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

interface wlan0
static ip_address=192.168.0.116/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

インタフェース名もWindowsユーザには馴染みがないので混乱するところですね。eth0が有線LAN、wlan0無線LANです。

wpa_supplicant.confの設定

無線LANの接続設定は/etc/wpa_supplicant/wpa_supplicant.confに書きます。

先に必要なSSIDと、パスフレーズを暗号化してメモっておきましょう。

wpa_passphrase SSID パスフレーズ

wpa_supplicant.confにconfigを追記します。key_mgmt公式ドキュメントを見ていると、なくても良いかもしれません(未検証)

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

# ここから追記
network={
    ssid="SSID" #ダブルクォーテーションが必要
    scan_ssid=1 #SSIDがステルスなら1にする
    psk=暗号化されたパスフレーズ #暗号化しないと動かない(気がする)
    key_mgmt=WPA-PSK #なくてもいいかも
}

wlanデバイスが動作しているか不安な場合は、SSIDを拾うかどうか見てみましょう。

sudo iwlist wlan0 scan | grep <SSID名>

余談ですが、サポートされる周波数は2.4GHzのみです。5GHzはサポートされていません。

結果確認

DHCPの予約があれば解除しておき、サービスとインタフェースを再起動してIPアドレスが固定されるか確認します。ifconfigWindowsで言うところのipconfigです(ざっくり)

# サービスとインタフェースを再起動
sudo systemctl restart networking
sudo systemctl restart dhcpcd
sudo ifconfig down eth0
sudo ifconfig up eth0
sudo ifconfig down wlan0
sudo ifconfig up wlan0
ifconfig

まとめてsudo rebootでもいいです。下手するとsshが繋がらなくなるので注意してください。シリアル接続だとサービスの起動ステータスも出力されるので、networkingdhcpcdが[OK]になっているかチェックしておきましょう。

コマンドからステータスチェックするならこう。

systemctl status networking
systemctl status dhcpcd

Active: active (exited)になっていれば立ち上がっています。

再起動後、ifconfigして無事IPアドレスが取れていれば成功です。

Raspberry pi(Linux)基本のコマンド

Raspberry piLinux)基本のコマンド

それではネットワーク設定…に行く前にWindowsユーザには馴染みのないCUI操作を覚えましょう。ここではこれから行うセットアップに必要な最低限のコマンドだけ紹介します。

ここで使っているOSはRaspbian Stretch (2018-04-18) です。

基本操作

コマンド名 --helpで大体ヘルプが見られます。root権限が必要な場合はsudo コマンド名です。しょっちゅう使います。

ログアウト exit

再起動 sudo reboot

ファイルを作成 touch [ファイル名]

ファイルをコピー cp [コピー元] [コピー先]

ファイル/フォルダを移動または名前変更 mv [コピー元/元の名前] [コピー先/新しい名前]

ファイル閲覧 less [ファイル名]

ファイルを削除 rm [ファイル名]

カレントディレクトリを移動(Winと一緒)

cd [ディレクトリ名] [ディレクトリ名]に移動する

cd .. 一つ上に上がる

cd ~/ ホームディレクトリ(既定では/home/pi)に戻る

ディレクトリを作成

mkdir [ディレクトリ名]

ディレクトリを削除

rm -r [ディレクトリ名] 中身もまるごと削除します

rm -rf [ディレクトリ名] 警告を出さずに強制削除

ファイルとディレクトリの一覧を表示

ls [ディレクトリ名] ディレクトリの一覧を表示

ls -a[ディレクトリ名] 隠し属性のファイル・ディレクトリも表示

ls -al[ディレクトリ名] さらにアクセス権と所有者も表示

ファイル編集 vi [ファイル名]

viの使い方は前の記事で。

とりあえずこれだけ使えればマシンの中を行ったり来たり程度はできるでしょう。ネットワーク設定やサービスに関するコマンドはまたそれぞれの記事で紹介します。