Raspberry pi3 に新規ユーザ下でsambaサーバ (NASファイルサーバ)

Raspberry pi3 に新規ユーザ下でsambaサーバ (NASファイルサーバ)
2016/12/18

家庭内lanで、WiFi無線lan router (OS: DD-WRT)のNAS機能を利用して、ファイルサーバ (NAS (Network Attached Storage (?))を立てていた。raspberry pi3 modelB (OS: raspbian jessie)導入に伴い、ファイルサーバをraspberry piに移行。その手順記。

ファイルサーバは、sambaサーバを立てる事で簡易に実装する。「raspberryにsambaサーバ」は、多数の記事があるので今更では有るが、殆どは admin権限のある初期ユーザアカウント化で実現しており、セキュリティー的に少し心配。そこで、ここでは、admin権限を持たない新規ユーザを登録して、そのユーザ下のdirectoryをaccess可とする。

1. samba 及び ntfs-3g のインストール

> sudo apt update    ← インストール可能ソフトリストを最新版にアップデート
> sudo apt install samba

> sudo apt install ntfs-3g
← 重要:外付けストレージが ntfs フォーマットの場合、raspbianはread-onlyでマウントする。read-writeにするには ntfs-3g パッケージをインストールする必要がある。

2. smb.conf の編集

> sudo cd /etc/samba
> sudo cp smb.conf smb.conf.original    ← オリジナルを保存しておく
> sudo vi smb.conf

>>> 以下を編集・追記
# map to guest = bad user    ← #を付けてコメント化
read only = no    ← 読み書き可とする
interfaces = 192.168.xxx. 127.0.0.0/8 eth0    ← 家庭内lan 192.168.xxx. からのみaccess可とする。
host allow = 192.168.xxx.
security = user

>>> ファイルの最後に以下を追記
[nas]
comment =nas directory
path = /media/nas1    ← nasとしてアクセスするdirectory
valid users = @nas    ← 新規ユーザ (nas)でaccess
public = yes    ← ゲストユーザもaccess
force group = nas
create mask = 0660
directory mask = 0771
read only = no

<<< ファイルを保存する (esc > :wq)

> sudo /etc/init.d/samba restart    ← sambaをリスタート


3. raspbianに新規ユーザーを追加

> sudo adduser nas
>>> パスワード等を定義する

4. sambaにユーザを追加

> sudo pdbedit -a nas
>>> sambaで使うパスワードを定義    ← raspbianにログインするパスワードとは別にする

5. 外付けストレージ (usb stick)のauto mount

Raspbian jessieでは、usb stickは自動的に /media/pi/にマウントされるが、ここでは新規ユーザ nas にマウントされるようにする。(前記のntfs-3gと 新規sambaユーザでハマったので本備忘録。)

> df    ← usb stickの。/dev/sda1 等のdevice directoryを確認。
> ls -l /dev/disk/by-uuid    ← ストレージのuuid xxxxx を確認。
> id -u nas    ← nasのユーザ番号を確認。
> id -g nas    ← nasのグループ番号を確認。

> sudo mkdir /media/nas1    ← usb stickのマウントdirectoryを作成

> sudo vi /etc/fstab    ← automountを定義する
>>> 以下を追記
UUID=xxxxx /media/nas1 auto nofail,uid=<ユーザ番号>,gid=<グループ番号>,noatime 0 0
<<< ファイルを保存

上記を定義しないと、新規ユーザ nasでアクセスすると、パーミッション拒否で蹴られる。(外付けストレージのユーザ・グループがraspberryの初期ユーザのままなので。)

6. raspberryを再起動

> sudo reboot

7. PC他でsambaサーバをアクセス

> smb://192.168.xxx.xxx/    ← 192.168.xxx.xxxは raspberry piIPアドレス


以上。

機器:    raspberry pi3 model B
OS:    raspbian jessie

(感想: ntfsフォーマットdiskと新規ユーザ nasでアクセスするところにハマったが、比較的容易な作業。)



Raspberry piをAirprintサーバ化し WiFi接続のCanonプリンターにiphoneからプリント

Raspberry piをAirprintサーバ化し WiFi接続のCanonプリンターにiphoneからプリント
2016/12/15, 12/29 追記

スマホ初期からandroidiphoneを使っている。スマホから印刷するのは、iphoneからならairprint対応のプリンターが有れば一発。ではあるが、手持ちのプリンターはairprint非対応の Canon MP980 インクジェットプリンター。MP980は、WiFi接続対応でまだまだ現役。airprintのために買い替えるのは考慮外。

因に、これまでのiphoneから印刷は dropboxのようなiphone・パソコン両方からアクセス出来る外部ストレージに一旦移し、パソコンを起動して印刷、の手順を踏んでいた。

airprintサーバをWiFiルータ内に起てられないか、いろいろ試行錯誤したが不成功。さらに追い打ちをかけるように、iOS10ではVPN(pptp接続。WiFiルータのOSに組み込まれている。)が非サポートとなり、外から家庭内lanに接続するには、セキュリティーがより高い IPSEC/L2TP なりに移行しなければならなくなった。これらを解決すべく、最後の手段としてraspberry piを導入する事とした。

この備忘録は、airprintサーバ化とCanonプリンタへのWiFiプリントについて。VPN(L2TP)については別途で。

まず、家庭内lanの状態について。

外界との接続(gateway):光ファイバールータ。このルータを家庭内全体のDHCPサーバとする。WAN IPアドレスは、WiFiルータ(DD-WRT)のDDNSで自動アップデート(この備忘録もまだかいていない、、、な。)

WiFi無線アクセスポイント(ap):WiFiルータを、gatewayルータに固定IPでethernet接続。OSはDD-WRTを導入(この備忘録もまだ書いていなかった、、、)。WiFiルータのDHCPはオフ。家庭内のWiFi無線機器は、全てこのアクセスポイントで賄う。

プリンター: Canon inkjet printer MP980。WiFiにて上記 WiFiアクセスポイントに接続。

上記に、今回、raspberry pi 3 model B (OSはraspbian jessie)を導入。WiFiでも接続出来るが、速度を考えると ethernetに接続。固定IPで。

以下は、プリンタドライバ(cups)と、WiFi接続Canonプリンタの追加(cups-backend-bjnp)、とairprintサーバ化(share printer)の手順。

全て sshにて raspberry piにログインし、コマンドラインで作業する。コマンドは ">"記号の後ろ部分。また、editorはviを使用する(と言うことは、viの使い方を要勉強。)


1. プリンタドライバ(cups)のインストール

まず、インストール可能ソフトの最新版リストへのアップデート。

> sudo apt update

cupsのインストール。

> sudo apt install cups

cupsd.confの編集。オリジナル版は.originalとして保存。

> cd /etc/cups
> sudo cp cupsd.conf cupsd.conf.original
> sudo vi cupsd.conf

以下のように各行を編集する。

==========
Listen *:631

<Location />
  Order allow,deny
  Allow @LOCAL
</Location>

<Location /admin>
  Order allow,deny
  Allow @LOCAL
</Location>
==========


2. WiFi接続Canon printerの追加

ユーザ pi を追加。

> sudo usermod -aG lpadmin pi

cups-backend-bjnpのインストール。

> sudo apt install cups-backend-bjnp
> sudo service cups restart

家庭内lanに繋がるパソコン(iphoneでも良い)上で web ブラウザーを起動し、raspberry pi (IPアドレス: xxx.xxx.xxx.xxx)を以下のURLでアクセスし、プリンタを追加する。

https://xxx.xxx.xxx.xxx:631/
プリンタを追加
bjnp:....のプリンタを選択


3. airprintサーバ化(Share printer)

airprintサーバ化に必要な avahi、dbusはraspbian jessiに組み込まれ、既に動作している。
airprintサーバ化は、cups上でプリンターシェアをオンすることで完結。

https://xxx.xxx.xxx.xxx:631/
CUPS 「管理」で、「このシステムに接続されているプリンタを共有」をチェック。

4. iphone上で、プリンターにCanonプリンタが表示されるか確認する。


12/29 追記

iPhoneから pdf ファイルをプリントしてみると、airprint 出来ないケースがある、、、。短時間の経験だが、

可能: Acrobat reader, Remote File Manager Free, ...
不可: iBooks, Dropbox, ...

iBooks, Dropbox からは、cups/ghostscriptとの color space handlingの問題か(?)、 プリントエラーになる。Safari で気に入ったページを pdf に落とす(イメージ 1)事が可能な先は、今のところこの2つなので、これはイタイ。

仕方ないので回避策は、Dropboxに落とした後、Acrobat readerで参照して(若しくは読み込んで)から print 。(Acrobat、エラい)が、Apple Inc. のバカさか、無駄に電波/パケットを使っている。(Apple Inc. は、一体、何を考えているのか? (考えすぎているのか、、、。))

以上。

(感想: 比較的簡単なインストールだった。が、最後に落とし穴があった、、、。)


iPhoneをSIMフリー化、4G繋がらない、3Gのみ、何故?

Softbank iPhone(6s)でiOS10.1.1にアップデート。その後、契約後180日も過ぎたので、オンライン(費用負担無し、ショップ店頭では3000円必要)SIMフリー化に挑戦。使いたいSIMカードはまだ入手していないが、iPhoneの契約解除後だと90日以内にSIMフリー化しないとSIMフリーに出来なくなるので、忘れないうちにSIMフリー化する。

http://www.softbank.jp/mobile/support/usim/unlock_procedure/

のページに従い、My Softbankにログインし、解除手続きを済ませる。

さて、使用したい他社SIMカードを持っていない場合は、

1) iTunesで、バックアップ
2) 本体、設定→一般→リセット→全てのコンテンツと設定を消去
3) iTunesで、バックアップから復元

で良いはずだが、いくつかハマったので備忘録。

「1) iTunesで、バックアップ」時、アプリ内のデータ、特に自ら入れたデータはバックアップされない。iTunesのバックアップとは別に、独自の方法でバックアップをしておく必要がある。例えば、iBookに保存したwebページのpdf等。

「3) iTunesで、バックアップから復元」で、復元後、本体→モバイルデータ通信→通信のオプション→4Gをオンにする(音声通話とデータ)にしているにも関わらず、データ通信が(本体画面上部の通知バーに4Gが出ず) 3G。また、携帯電波では、インターネットに繋がらない、、、症状。何故?

ソフトバンクショップに相談。電源オンオフ、機内モードオンオフ、本体リセットー>ネットワーク設定をリセット、、、では、4Gが復活しない。

自宅に帰って、いろいろトライ、、、3)のバックアップから復元の「作業前」で見ると、4Gに繋がっている。で、バックアップから復元を完了すると、3Gのみで4Gにならない。復元した内容(の一部)が悪さをしている、、、。

となると、モバイルネットワーク設定が絡んでいそうなので、設定→一般→プロファイルで、ネットワーク設定のプロファイルをひとつづつ選択し→消去。で、あるプロファイルを消去したら、4Gが復活。これが悪さをしていた。

何かと言うと、将来使いそうなSIMカードのプロファイルを先行でインストールしていた。で、使うSIMカードはまだ無いので、このキャリアーのアクチベート(?)がまだ。対応するプロファイルのSIMカードがアクチベートされていないと、iOS内部で全体を3Gに設定してしまう(?)。iOS(10.1.1)のバグだね。

教訓:使わないプロファイルは削除。

以上。

使用スマホ:iPhone6s
使用OS: iOS10.1.1


MacでCANONプリンターをネットワーク越しに使うーCUPS-BJNP

MacCANONプリンターをネットワーク越しに使うーCUPS-BJNP

自宅で CANON MP980を 無線LAN接続で使用している。ローカルネットワーク内なら、プリンターは、Mac OS X (使用OSは 10.6.8 ← 古いね。今時、10.11.xなのだが、仕事で使用するアプリが結構高価で 10.11にアップグレード出来ない/使えているので、しない。ので、10.6.8でストップ)のプリンタ追加>ほかのプリンター>Canon IJ ネットワーク の表示中から選択・設定で、使用する事が出来る。

さて、「外出先」から「自宅」のCANONプリンターに印刷を出したい、事態が発生した。(← 何故?の理由の解る方は、エライ!)いつものようにCANONプリンターを選んで印刷!としても、Macもプリンターも黙ったまま、、、。オイ、CANON君、どうした???

、、、問題は、CANON固有の 「Canon IJ ネットワーク」なるところにあり、Canon IJ ネットワークは「ネットワーク越し」には通信出来ない/しない、となっている事らしい。(← CANONさん、修正お願いします。)

別の問題(「Linux」でCANONプリンターを「無線LAN」で使う。まだブログに書いてないが、いずれ書いておこう)から、Linux (Ubuntu)に CUPS-BJNP をインストールして、LinuxでもCANON MP980を「無線LAN」ネットワークプリンターとして(自宅で)使用している。このプリンター設定で、実は、ネットワーク越しにCANONプリンターが使えることを確認している。

BJNPとは、「Linux」でCanonプリンターを「無線LAN」を介して「 USB接続」しているようにするためのプロトコル ( https://sourceforge.net/projects/cups-bjnp/ )らしい。

そこで、Mac上に CUPS-BJNPをインストールして、Macでも ネットワーク越しにCANON MP980を使えないか、と言うのが今回の問題。MacUnix系なのですんなりインストール出来るかと思い気や、ハマったところが有るので、その備忘録。

Terminalで、commandを使ってコンパイルするので、その辺を知っている人でないと無理。

1) 上記のURLから、ソースコードをダウンロード。

2) 解凍して、対応するdirectoryに入り、READMEに従って、、、が約束事だが、各ステップに従って、私の環境で変更した点を列記していく。

まず、

> ./configure --prefix=/usr
> make

ここで、

bjnp-io.c:174: warning... でerror。

> vi bjnp-io.c に入り、

static printer_t *
bjnp_init_printer(printer_t *printer, http_addr_t *addr, const char *user, const char *title)
{
    /* uint16_t session_id; */
    uint32_t session_id;

のように、unit16_t を unit32_t に変更。
で、再度

> make

これで、bjnpの実行ファイルが作成された。次に、

> sudo make install

メッセージ、、、 /usr/bin/install -c bjnp '/usr/libexec/cups/backend'

と bjnpが /usr/libexec/cups/backnend にコピー/インストールされた。

実は、このmake installをせずに、「直接」/usr/lib/cups/backend にbjnpをコピーして、以下のプリンター設定を行おうとしたが失敗。/usr/lib/cups/...は Linuxでのdirectoryだが、Macでは /usr/libexec/cups/... directory。最初から、make installをすれば良かった。が、MacLinuxでどこに違いが有るか解って、多少は収穫になった。

3) CUPSプリンターの設定

http://localhost:631/で、Add printer > Network printerに CANON MP980... (ipアドレス)が現れる。選択すると、bjnp://192.168.3.4:8611/ のプリンタ設定が出来る。このプリンターを選ぶ事により、Macでもネットワーク越しにCANON MP980に印刷出来るようになった。

メデタシ、メデタシ。

以上。

使用環境:

MacBook Pro 13 inch
OS X 10.6.8







ソフトバンク光BBユニット E-WMTA2.2 のポート解放 VPN (PPTP) 接続

ソフトバンク光BBユニット E-WMTA2.2 のポート解放 VPN (PPTP) 接続

長い間nttドコモ・nttフレッツ光の世話になっていたが、スマホに機種変更するため、家族割(2台)+おうち割+ホワイト光電話 合算で docomo/softbank で安いほう(多分?)であろう softbank光に乗り換えた。(auを外したのは 単に歴史上の経緯で、、、。)

因に、softbankが宣伝している値段は あるレベルのオプション/条件を満たしたときの最安。なので 実際の料金は宣伝値段にはならない。極めて注意が必要。また、必要ないオプションは速攻解約しないと 知らずのうちに高額な料金を支払う事になる。 こちらも要注意。問題は、欲しい割引を適用するために最少ミニマムオプションが何であるかを見定めるのがなかなか難しいこと。まあ、他社も似たようであろうから、上記は「多分」。

さて、Softbank光にすると、光BBユニット(E-WMTA2.2)が届く。このユニットは (ソフトバンク宣伝の)

1) 「IPv6高速ハイブリッド IPv6 IPoE + IPv4」なる方式で、「最大」1Gbps
2) ホワイト光電話
3) おうち割

のために必須。

無線LANもあるが、無線LANは別機種で動作させているので必須ではない。因に、他の型番では 100Mbpsとのこと。( http://www.softbank.jp/ybb/option/bbunit/ )

さて、ここからが本題。自宅のコンピュータをアクセスするため フレッツ光時代には VPN (PPTP)を動作させていた。(Securityに問題のあるPPTPですか のツッコミは無しで。OpenVPNを動かしたかったが まだ動作させる事が出来ていない、、、。)

VPNを通過させるためには特定のポートを解放しないといけない。E-WMTA2.2 本体に webブラウザーでアクセスし 「ポート転送」を記述することで ポート解放ができる(と、http://ybb.softbank.jp/support/connect/hikari/router/bbu2_port.html で指示されている)。転送先アドレスは IPv4 (例えば、 192.168.1.2)で指定。

ところが、この指定で外部からVPN アクセスしても ウンともスンとも反応しない。外部からポートスキャンを行っても 解放したはずのポートが見えない。再起動、ケーブル接続、ONUユニット接続方法変更、、、いろいろトライしたがダメ。(因に、ソフトバンクサポートに問い合わせても 前記の指示以上の説明はなく、役立たず、、、。)この段階で ネット上「糞ルータ、、、あるが使用しない、、、解約してしまえ、、、」と言われているのが解ったような、、、。

だが、何とも気持ち悪いのでいろいろ調べた。そのうちに動作せせる事ができたので、備忘録でここに書いておく。

肝は、どうやら「IPv6高速ハイブリッド IPv6 IPoE + IPv4」(例えば、 http://internet.watch.impress.co.jp/docs/news/574106.html )で、BBIXなる接続箇所で (実は、全て?)IPv6にして 自宅回線に送っている(?)。従って、光BBユニット側ではポート解放は IPv6で記述しないと、、、かもしれない。(ソフトバンクの説明にはそのような事は書いてなく、ソフトバンク側でも実は知らない???)

そこで、光BBユニットの 「詳細設定」>「パケットフィルター設定」>「フィルターエントリー設定(IPv6)」に、VPN処理をおこなう宛先のIPv6アドレスを「宛先IPv6アドレス」に、転送ポート番号等を書き込んで 設定してみた。と、、、なんと、ポートが解放出来、VPN (PPTP)接続出来た。(残念ながら、どのポートが解放されるかその仕組みは、未だに不明。)ポート番号は、開けたい一つのポート番号のみのフィルターを設定したが、残念ながら、IPv4で設定したポート全部は解放されていなかった。しかも、IPv6フィルタで指定したポートが解放されている訳ではない、、、???。しかし、解放されたポートはある、、、。

なぜ解放されるポートが現れたのか? 最低限、(BBIXで?)IPv6アドレスと機種が結びつけられる事が大事なのかもしれない。因に、IPv6では、全世界の1台々々のコンピュータに個別に到達できるようで、ルータとかローカルネットワークが無意味なる、、、(ような)。で、セキュリティー上、BBIXのデフォールトは、 IPv6と機種の対応、を付けておかない???)

最後に、どうやって宛先アドレスの IPv6アドレスを知るか。実は、これが難題。IPv6アドレスの定義を理解している人は、Macアドレス等からIPv6アドレスを導きだせるだろうが、素人には無理。

窮余の策は、光BBユニットに IPv6アドレスを知りたい機種を接続、IPアドレスDHCPでもらうように設定して(IPv4設定のところ?)、DHCPv6クライアント一覧で IPv6アドレスを表示させた、、、で、やったような。(因に、このアドレスはVPN接続を行うアドレスなので、IPv4アドレスは固定で使用(通常、DHCPは使用「しない」設定)。これだと、DHCPv6クライアント一覧にも対応機種が出てこない、、、。)

以上。
(2016年7月25日改訂)






Unix/Linux editor vi/vimの備忘録

Unix/Linux editor vi/vimの備忘録

[vim: 複数行のカット・コピー・ペースト]
mx  (ポインターのある、以下同文)開始行にマーク
d'x  終了行まで削除
y'x  終了行までコピー
pp   ターゲット行の上にペースト

(補:xの代わりにsを使うversionもある。)

Chicken of the VNC


Chicken of the VNC.app コネクションでハマったので備忘録

他のmac(サーバー)をremote(クライアント)からアクセスするツールにChicken of the VNCがある。使い方はネットをグーグルしてもらうとして、サーバーがアクセスを受け入れるためには、いくつかのおまじないが有る。(セキュリティーのためにも重要。)

基本は、サーバー側のシステム環境設定>共有 パネルで、リモートマネージメントをオンにし、更にリモートマネージメントで現れる「コンピュータ設定...」で、「VNC使用者が画面を操作する事を許可 パスワード:」でパスワードを設定。(さて、このパスワードは、セキュリティーから考えて、クライアント側のパスワード(だろう)。)

さて、数台のサーバーを使用していると、あるサーバーにはアクセス出来るのに、あるサーバーでは蹴られる事態に遭遇した。蹴られたサーバーで、リモートマネージメントはオンにしているし、コンピュータ設定...でパスワードは設定しているし(パスワードは「・・・・・」でマスクされている(当然だが))、、、で、なぜ繋がらない、、、他に必要な設定があるのか、、、と悩んでしまった。

解決は、簡単で、パスワードを入れ直す事だった。

繋がるサーバーではパスワードを入れていたが、繋がらなかったサーバーでは、入れてなかったか、あるいは別のクライアントで繋ぐためのパスワードだったのか。パスワードの欄は「・・・・」とマスクされているので、入れた/入れてない/何を入れたで混乱していた(のだろう)。


イメージ 1


(記事は以上。)

OS: サーバー・クライアントとも Mac OS X 10.6.8
2015/4/23