Raspberry PiをAirPrintサーバーにして親孝行する


私の両親は共にiPhoneユーザーですが、残念ながらプリンターがAirPrintに対応していません。
そのため、Raspberry PiをAirPrintサーバーにしてプレゼントして親孝行をする作戦です。

# 準備するもの

* Raspberry Pi 3
* ケース
* 電源
* microSDカード

# OSの選択

無難にRaspbianを選択しました。
本日時点の最新バージョンはこれでした。

https://www.raspberrypi.org/downloads/raspbian/

````
RASPBIAN JESSIE WITH PIXEL
Version:January 2017
Release date:2017-01-11
````

# OSインストール

microSDカードにインストールします。

Windowsの場合だと、「DD for Windows」を使う方法が一般的ですが、変わった方法として、「Chromebook リカバリ ユーティリティ」を使った方法を紹介します。

## Chromebook リカバリ ユーティリティ

名前の通り、Chromebookをリカバリするときに使うツールです。
Chromeアプリですので、Chrome ウェブストアからインストールしてください。

https://chrome.google.com/webstore/detail/chromebook-recovery-utili/jndclpdbaamdhonoechobihbbiimdgai?hl=ja

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/f429db3d-d623-8c85-e9d8-642b4572ab6b.png)

## インストール手順

1. RaspbianのOSイメージをダウンロード、展開します。
1. Chromebook リカバリ ユーティリティを起動します。
1. 画面右上のギアアイコンから「ローカルイメージを使用」を選択します。
1. OSイメージファイルを選択する。
※拡張子「*.bin」でフィルタリングされているので、注意
1. 次々進んでインストールを完了させます。

## SSHの有効化

最近のRaspbianはSSHがデフォルトで無効になっているようです。
（リリースノートによると2016/11/25から）

bootパーティションにsshというファイルを作成すると有効にできますので、
ファイル作成します。

````
WindowsのエクスプローラーでSDカードのドライブを開き、
右クリック→新規作成→「テキストドキュメント」
ファイル名を「ssh」に変更
````

# 起動！

microSDカードをRaspberry Piに差し替え、電源を入れます。
Wi-Fiの設定はまだなので、一旦は有線Lanも接続します。

# ログイン

SSHでログインします。

```bash
ssh pi@raspberrypi.local
````

Windowsで名前解決ができない場合は、iTunesかBonjour Print Services をインストールしましょう。
https://support.apple.com/kb/DL999?locale=ja_JP&viewlocale=ja_JP

# 設定

Raspberry Piの初期設定です。設定の詳細は他の方の投稿を参考にしてください。

```bash
sudo raspi-config
```

変更したもの
* パーティションの拡張
* ロケールを「en_US.UTF-8」と「 ja_JP.UTF-8」に変更。
* VNCの有効化

# インストール＆設定

## OSアップデート

まずは手動で更新します。

```bash
sudo apt-get update    # 取得元からパッケージインデックスファイルの再同期を行うのに使用します。
sudo apt-get upgrade    # 現在システムにインストールされている全パッケージの最新バージョンを、/etc/apt/sources.list に列挙した取得元からインストールするのに使用します。
sudo apt-get dist-upgrade    # upgrade の機能に加え、新バージョンのパッケージに対する依存関係の変更を知的に操作します。
```

## OS自動更新設定

Windows Update風に自動更新する設定をします。
https://wiki.debian.org/UnattendedUpgrades

```bash
sudo apt-get install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
```

## ウイルス対策ソフト

ClamAV
https://www.clamav.net/

```bash
sudo apt-get install clamav
```

このあとに``` freshclam```を実行しようとか、root権限にしようとか手順がよく紹介されていますが、どうも、勝手にサービス起動し、ウイルス定義ファイルの更新もしてくれているような。。

```bash
 service clamav-freshclam status
 ```
 ```bash
● clamav-freshclam.service - ClamAV virus database updater
   Loaded: loaded (/lib/systemd/system/clamav-freshclam.service; enabled)
   Active: active (running) since 火 2017-02-28 22:41:39 JST; 17min ago
     Docs: man:freshclam(1)
           man:freshclam.conf(5)
           http://www.clamav.net/lang/en/doc/
 Main PID: 7190 (freshclam)
   CGroup: /system.slice/clamav-freshclam.service
           └─7190 /usr/bin/freshclam -d --foreground=true
```

## ログをAmazon CloudWatchに転送

急にAWSが出てきますが、今回はRaspberry Piを遠隔地（車で30分先の実家ですが）に配置するため、ログをAWSに転送したいと思います。
IAMユーザーの作成などは端折ってます。

CloudWatch Logs エージェント
http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/QuickStartEC2Instance.html

```bash
curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
sudo python ./awslogs-agent-setup.py --region ap-northeast-1
```
 
 とりあえず、 /var/log/auth.logのログをアップロードしてみます。
 何のログだろう。
 
 ```
 Launching interactive setup of CloudWatch Logs agent ...

Step 1 of 5: Installing pip ...DONE

Step 2 of 5: Downloading the latest CloudWatch Logs agent bits ... DONE

Step 3 of 5: Configuring AWS CLI ...
AWS Access Key ID [None]: 「AWS Access Key ID」を入力
AWS Secret Access Key [None]: 「AWS Secret Access Key」を入力
Default region name [ap-northeast-1]:
Default output format [None]:

Step 4 of 5: Configuring the CloudWatch Logs Agent ...
Path of log file to upload [/var/log/syslog]: /var/log/auth.log
Destination Log Group name [/var/log/auth.log]:

Choose Log Stream name:
  1. Use EC2 instance id.
  2. Use hostname.
  3. Custom.
Enter choice [1]: 2

Choose Log Event timestamp format:
  1. %b %d %H:%M:%S    (Dec 31 23:59:59)
  2. %d/%b/%Y:%H:%M:%S (10/Oct/2000:13:55:36)
  3. %Y-%m-%d %H:%M:%S (2008-09-08 11:52:54)
  4. Custom
Enter choice [1]: 1

Choose initial position of upload:
  1. From start of file.
  2. From end of file.
Enter choice [1]: 2
More log files to configure? [Y]: N

Step 5 of 5: Setting up agent as a daemon ...DONE


------------------------------------------------------
- Configuration file successfully saved at: /var/awslogs/etc/awslogs.conf
- You can begin accessing new log events after a few moments at https://console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#logs:
- You can use 'sudo service awslogs start|stop|status|restart' to control the daemon.
- To see diagnostic information for the CloudWatch Logs Agent, see /var/log/awslogs.log
- You can rerun interactive setup using 'sudo python ./awslogs-agent-setup.py --region ap-northeast-1 --only-generate-config'
------------------------------------------------------
 ```

なぜかサービスが有効にならないので、自分でサービス有効化＆起動

```bash
sudo systemctl enable awslogs
sudo service awslogs start
```

最終的にこんな感じにしました。

```bash
sudo cat /var/awslogs/etc/awslogs.conf
```
```bash
[/var/log/auth.log]
datetime_format = %b %d %H:%M:%S
file = /var/log/auth.log
buffer_duration = 5000
log_stream_name = {hostname}
initial_position = end_of_file
log_group_name = /var/log/auth.log
[/var/log/clamav/freshclam.log]
datetime_format = %b %d %H:%M:%S
file = /var/log/clamav/freshclam.log
buffer_duration = 5000
log_stream_name = {hostname}
initial_position = end_of_file
log_group_name = /var/log/clamav/freshclam.log
[/var/log/cups/error_log]
datetime_format = %d/%b/%Y:%H:%M:%S %z
file = /var/log/cups/error_log
buffer_duration = 5000
log_stream_name = {hostname}
initial_position = end_of_file
log_group_name = /var/log/cups/error_log
[/var/log/unattended-upgrades/unattended-upgrades.log]
datetime_format = %Y-%m-%d %H:%M:%S
file = /var/log/unattended-upgrades/unattended-upgrades.log
buffer_duration = 5000
log_stream_name = {hostname}
initial_position = end_of_file
log_group_name = /var/log/unattended-upgrades/unattended-upgrades.log
```



## プリントサーバー

本題です。

CUPS
https://www.cups.org/

```bash
sudo apt-get install cups
sudo apt-get install printer-driver-all    # プリンタードライバー
```


プリンター管理ができるようにグループ追加

```bash
sudo gpasswd -a pi lpadmin
```

VNCでログインし、Chromiumブラウザで https://localhost:631 にアクセスします。

VNCもChromeアプリで提供されています。
https://chrome.google.com/webstore/detail/vnc%C2%AE-viewer-for-google-ch/iabmpiboiopbgfabjmgeedhcmjenhbla


![image](https://qiita-image-store.s3.amazonaws.com/0/41574/8e0986e6-32e4-a769-69bb-f19169f326c9.png)

怒られても気にしない。

詳細設定　→　localhostにアクセスする(安全ではありません)　をクリック

![image](https://qiita-image-store.s3.amazonaws.com/0/41574/e4a23d93-296d-09bc-089e-b342f048594f.png)

何だこの解像度は。
設定を進めましょう。

* [管理]タブを選択
* [サーバー]→[サーバー設定]
    * 「このシステムに接続されているプリンターを共有」にチェック
    * 「リモート管理を許可」にチェック
    * 「所有者以外のユーザーにもジョブのキャンセルを許可」にチェック
* 「設定の変更」ボタンをクリック
* ログインダイアログが出たら、piユーザーのアカウント/パスワードを入力

これで他のパソコンからもアクセスできます。

* [管理]タブを選択
* [プリンター]→[プリンターの追加]ボタンクリック
* 設定したいプリンターを選択
* 「このプリンターを共有する」にチェック

今回は実家に設置するので印刷に失敗したら、ジョブをキャンセルするようにします。
「デフォルトオプション」の中の「ポリシー」を選び、エラーポリシーを「abort-job」にします。

# その他

最終的にはVNCもSSHも無効にしようかと計画中。
そしてTeamViewerをインストールしようかな。
https://www.teamviewer.com/ja/download/linux/


# 参考サイト
http://qiita.com/torch32171/items/c816acd5afa45fddabfe
http://qiita.com/tomiyan/items/77c7794074f9445ea548
http://qiita.com/ryosy383/items/ac450750e9419b5bcf75
http://orangain.hatenablog.com/entry/unattended-upgrades
http://l-chika.hatenablog.com/entry/2017/01/27/190853