きなこのブログ

技術系の覚書など。

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の使い方は前の記事で。

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

Raspberry Pi 3を買ったのでセットアップする

Raspberry Pi 3を買ったのでセットアップする

必要なもの

  • microSD (SDアダプタついてきました)

  • teraterm
  • これを読んでいる人ならLANケーブルの1本や2本家に転がってるよね

使いたい新機能が特になかったのと、安かったのでB+じゃなくてBにしました。GUIも特に用途がないのでヘッドレス(ディスプレイ無し)です。使いみちを思いついたら合体型HDMIタッチディスプレイとか組んでみたいですね。

手元に届いたら早速箱を開けてヒートシンクを付けてケースをセットして組み立て完了です。小さすぎて感動する可愛さ…

電源の差込口がminiUSBで、頻繁に抜き差しするとぐらつきそうで怖かったので、ちょっとお高いですがボタン付きにしといてよかったです。

OSインストール

  1. Raspbian Stretch LITE(ここでは2018-04-18版)をダウンロード
  2. DD for WindowsmicroSDに焼き焼き
  3. microSDはFATでフォーマットして書き込み

書き込むとパーティションが2つ(+未割り当て)出来てbootパーティションだけWindowsでも読み取ることが出来ます。

DataパーティションEXT4というフォーマットでlinux用なのでこのままだと読み込みできません。ext2fsdをインストールしたら読み書きできるようになりますが、下手にいじると壊しそうなのであんまり触らないほうがいいでしょう。

SSHで繋がるようにする

  1. bootパーティションに空のテキストファイル「ssh」を作成します。拡張子はなし。
  2. microSDをラズパイに挿して電源ケーブルを挿せばOSが起動します。
  3. IPを固定(できれば)
  4. 初期ユーザpi、初期パスワードraspberryでTeratermからSSHログイン

LANケーブルを繋げばDHCPでIPが振られる…のですが自宅のルータには払い出しIPの表示機能がなかったので払い出しレンジを一個ずつpingして探す羽目になりました。この記事を読んでいる賢いあなたにはブロードキャストにpingしてからarp -aするという方法もあります。

私の場合この時点ではネットワーク設定の方法が分からなかったので、とりあえずDHCPサーバ(ルータ)側で払い出しアドレスを固定しておきましました。

先にシリアル接続を有効にしておいた方が楽でしょう。私はネットワーク設定で何度も失敗して繋がらなくなってイメージを焼き直して発狂してシリアルコンソールUSBを後からポチりました。

シリアル接続で繋がるようにする

封筒にぴょろっと入って届きましたが型番が書いてあったような…なかったような…

「PL2303 Serial USB」とかで検索すると色々ヒットしますが、とりあえずうまく行ったやり方↓

順番に言うと、

  1. ラズパイのピンにケーブルを接続 f:id:kinakomochi-tank:20180519095334p:plain シリアルの赤は電源供給なので使わなくていいらしい

  2. PL2303のドライバ(PL2303_64bit_Installer_1.exe)をダウンロードしてインストール

  3. 一応Fix (PL2303_64bit_Installer.exe) もインストールしておく。訳しておくと

    1. 適当なところに保存してね。アンチウィルスは切っておくといいよ
    2. ダウンロードしたファイルを実行する前にUSBシリアルケーブルは抜いておいてね
    3. ダウンロードしたファイルを実行するよ
    4. デスクトップに"PL2303 Code 10 Fix Shortcut" が出来てるからダブルクリックしてね
    5. USBシリアルケーブルを挿して”Continue”をクリックしてね
    6. 終わったらPCを再起動してね
    7. USBシリアルケーブルを挿し直したら動くようになってるよ!
  4. 念の為ラズパイ側でシリアル接続を有効にしておく

sudo raspi-config
-> 5 Interfacing Options
  -> P6 Serial
    -> はい
  1. TeratermのSetup > Serial > Baud rateを115200にする (デバイスマネージャ側は9600のままでも特に問題なさそう)
# ボーレートの調べ方?
dmesg | grep tty
... console=ttyS0,115200 console=tty1 ...

これでTeratermからシリアル接続できます。これでもうネットワークの設定をトチっても安心です。うまく動かない場合は端末やTeratermを再起動したりボーレートの設定を見直してみましょう。

OS初期設定

やっていることはほぼ参考にさせていただいたサイト「Raspbianのインストールと最強の初期設定」そのままです。ここでは自分のラズパイに行った部分だけ記録を兼ねて書いていきます。

超抜粋版 はじめてのvi チートシート

configファイルを編集する箇所があるので、viなんて触ったこと無いという人向けに書いておきます。Windows気分で触るとひどい目にあうので、今後sudo vi なんとかとかいうコマンドが出てきたら、コマンドモード挿入モードを切り替えて使うんだなということを覚えておきましょう。

マウスホイールをコロコロしたりBSとかDelとか押してファイルを滅茶苦茶にしているそこのみんなー!最低限これだけ使えたら何とかなるよー!

Esc コマンドモードに戻る
↑↓←→ コマンドモードでカーソル位置を移動する(挿入モード時は使わない)
:q 開いているファイルを閉じてviを終了する
:q! 未保存の編集を破棄し、開いているファイルを閉じてviを終了する
:w 編集した内容を保存する。 :wq としても使える
dd カーソルがある行を削除する
x カーソル位置の1文字を削除する
s カーソル位置の文字を上書きして挿入モードになる
i カーソル位置の直前で挿入モードになる
A カーソル位置の直後で挿入モードになる
o カーソルがある行の上に1行足して挿入モードになる
O カーソルがある行の下に1行足して挿入モードになる
Alt+C 選択した文字列をコピー
右クリック (挿入モードで)ペースト

なに、初心者ならnanoの方が良い?それを知らないで結局viしか使わなかったけど何とかなったから大丈vi

怖いからとりあえず閲覧だけしたいんだけど…という場合はsudo less [ファイル名]を使いましょう。抜ける時はqです。

ソフトウェアアップデート

sudo apt-get update && sudo apt-get -y dist-upgrade && sudo apt-get -y autoremove && sudo apt-get autoclean

自動更新の設定

sudo apt-get install -y unattended-upgrades

失敗したら一つ上のソフトウェアアップデートのコマンドをひとつずつ実行してから再挑戦してください。

sudo vi /etc/apt/apt.conf.d/50unattended-upgrades

>「"o=${distro_id},n=${distro_codename}";」をOrigins-Patternの中に追加する

raspi-config

sudo raspi-configで設定画面に入る

  • Localisation Options
  • Change Locale: ja_JP.UTF-8 > ja_JP.UTF-8
  • Localisation Options->Change Timezone: Asia > Tokyo
  • Change Wi-fi Country: JP
  • Change Keyboard Layout: 一応
  • Advanced Options
  • Memory Split: 16M (最小) GUI、カメラ、ビデオなどを使うなら最大値で256Mまで、
  • Hostname: お好きなものを。

SSHホスト鍵更新

sudo rm -v /etc/ssh/ssh_host*
sudo dpkg-reconfigure openssh-server

パス無しsudoの禁止

sudo vi /etc/sudoers.d/010_pi-nopasswd
#を足してコメントアウトする
#pi ALL=(ALL) NOPASSWD: ALL

デフォルトユーザ名の変更

参考サイト:[Raspbian]ユーザ名変更の個人的に「正しい」と思うやり方

# 作業用の仮ユーザ(tmp)を作成してsudoグループに追加
sudo useradd -M tmp
sudo gpasswd -a tmp sudo
sudo passwd tmp
exit
# tmpでログインしてユーザpiをtaopiに変更
sudo usermod -l taopi pi
sudo usermod -d /home/taopi -m taopi
sudo groupmod -n taopi pi
exit
# taopiでログインして仮ユーザを削除し、パスワードを再設定
sudo userdel tmp
sudo passwd taopi

swapを無効にする

sudo systemctl stop dphys-swapfile
sudo systemctl disable dphys-swapfile

ここまでできたらとりあえず初期設定は完了です。

それにしてもブログ記事書くのってしんどいですねー。続くかな

技術ブログはじめました

ラズパイ買ったら楽しかったのでこれから備忘録的に書きます

  • Raspbian初期設定
  • Linux超初心者向けコマンドチートシート
  • シリアルコンソールケーブルで接続する
  • ネットワーク設定
  • Apatcheで懐かしのnicky.cgiを動かす
  • マンションLANにVPNアクセス