2020年3月14日土曜日

Raspberry Pi model B+ で家庭内ActiveDirectoryDomainControlerを作る。

気が付いたら1年くらい放置していましたね・・・

今回は大抵の家に転がっている(?)古いラズパイをつかっていわゆる自宅ADを作ってみました。
ラズパイ model B+となると、メモリは512MBだし、ラズパイ3みたいにDockerが動くわけでもない。Etherも100Mbpsだしシングルコアだしで今となってはずいぶん微妙なものになってしまいました。
ちょうど自宅サーバをリプレイスするにあたり、MicroSoft社から無償配布されているHyper-V Server2019を検証するにあたり、非ADな所詮Workstation環境ではFW突破から初手の初期設定がかなり厳しく、それでもなおリモート管理がつながらないというMS仕草に疲れた本質的でない作業が大変だったので、ADを組むことにしました。

一昔前私がSambaを使っていたころ(Ver1.0~2.0)設定は難解だわやれケルベロスだwinbindだとかなりの修行が必要でしたが、今やSamba4は自力でADのプライマリドメインコントローラになれます。インストールも設定も随分簡単になりましたので、これで行けそうな気がします。

  • 対象:Raspberry Pi model B+
  • OS: Raspbian Buster Lite
  1. まずは公式サイトよりイメージをダウンロードし、SDカードに書き込みます。今では各OSごとにSDカードに書き込むツールを公式が配布していますので、それを使っても構いません。
  2. 次に、ラズパイ起動時に自動的にSSH接続できるようにしたいので小細工します。書き込んだSDカードを抜き差しすると、FAT32で初期化された領域が見えます。そこにsshという名前の空のファイルを作成します。するとラズパイ起動時に自動的にSSH接続できるようになります。
  3. 書き込んだSDカードをラズパイにさして起動させます。無事起動しましたら、とりあえず主要なソフトとアップデートのインストールを行い再起動します。
    $ sudo apt-get update sudo apt-get -y upgrade
    $ sudo apt-get dist-upgrade
    $ sudo apt-get install vim git sudo reboot
  4. 再起動後、再度SSHで接続し、TimeZoneやロケールの設定をします。
    $ sudo timedatectl set-timezone Asia/Tokyo
    $ sudo dpkg-reconfigure -f noninteractive tzdata
    $ sudo perl -pe 's/^# (ja_JP.UTF-8 UTF-8)/$1/g' -i /etc/locale.gen
    $ sudo locale-gen sudo update-locale LANG=ja_JP.UTF-8
    $ sudo dpkg-reconfigure -f noninteractive locales
  5. 次にIPアドレスを固定にします。まず設定ファイルを開きます。
    $ sudo vim /etc/dhcpcd.conf
  6. 設定ファイルの中に Example static IP configuration という箇所がコメントされているので、こんな感じでコメントアウトしてIPアドレスを設定します。
    # Example static IP configuration:
    interface eth0
    static ip_address=192.168.0.11/24 #固定したいIPアドレス、サブネット
    #static ip6_address=fd51:42f8:caae:d92e::ff/64
    static routers=192.168.0.1 #デフォルトゲートウエイIP
    static domain_name_servers=192.168.0.1 8.8.8.8 # DNSのIPアドレス
  7. ホスト名を設定します。ここでは、dc.example.comとします。(昔ながらの~.localってのは今はダメらしい)
    $ sudo raspi-config nonint do_hostname dc.example.com
    $ sudo vim /etc/hosts

    192.168.0.11 dc.example.com #追加
    127.0.0.1 dc.example.com #追加
  8. 次にあまり使わないIPv6を無効化します。
    $ sudo bash -c "echo net.ipv6.conf.all.disable_ipv6 = 1 >> /etc/sysctl.conf"
  9. ここでいったん再起動して、設定した固定IPで繋がる事、外部へ出れることを確認しておきます。
  10. Samba4をビルドするのに必要なパッケージ群をインストールします。
    $ sudo apt-get -y install acl attr autoconf bison build-essential \ debhelper dnsutils docbook-xml docbook-xsl flex gdb krb5-user \ libacl1-dev libaio-dev libattr1-dev libblkid-dev libbsd-dev \ libcap-dev libcups2-dev libgnutls28-dev libjson-perl wget \ libldap2-dev libncurses5-dev libpam0g-dev libparse-yapp-perl \ libpopt-dev libreadline-dev perl perl-modules pkg-config \ python-all-dev python-dev python-dnspython python-crypto \ xsltproc zlib1g-dev libjansson-dev python3-distutils git \ libpython3-dev liblmdb-dev pkg-config libgnutls28-dev python3-dns python3-dnspython \ libarchive-dev libacl1-dev libldap2-dev libpam0g-dev libgpgme11-dev
  11. Samba4のソースコードをダウンロードします。(最新版はここから探してください)
    $ sudo mkdir /usr/local/src/samba wget https://download.samba.org/pub/samba/stable/samba-4.12.0.tar.gz
    $ sudo tar xvzfp samba-4.12.0.tar.gz -C /usr/local/src/samba
    $ rm samba-4.12.0.tar.gz
  12. コンパイルして、インストールします。なお、ラズパイmodel B+でやると、コンパイルが終わるまでオーバークロックしない場合軽く半日は掛かりました。configureでも30分くらいかかったかな?
    $ cd /usr/local/src/samba/samba-4.12.0
    $ sudo ./configure --with-utmp --with-ads
    $ sudo make && make install
  13. インストールが無事終わったら、ドメインコントローラを構築します。といっても今じゃウイザードがあります。
    $ sudo /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive --function-level=2008_R2
    詳しい説明は公式ドキュメントを見ていただければと思います。 といっても注意点はDNS backendはデフォルトのSAMBA_INTERNALを選択する。function-levelは(今のところ)2008_R2まで。DNS forwarder IP addressはADのドメイン以外の名前解決できるDNSサーバを指定する。Administratorのパスワードは大文字小文字数字を入れた8文字以上じゃないとダメくらいです。
  14. 設定が出来ましたら、自動生成されたケルベロス認証設定ファイルをコピーします。
    $ sudo cp /usr/local/samba/private/krb5.conf /etc
  15. 公式サイトを参考に、スタートアップスクリプトを作成し登録します。
    $ sudo vi /etc/systemd/system/samba-ad-dc.service
  16. 有効化し再起動時に自動起動するようにします。
    $ sudo systemctl daemon-reload
    $ sudo systemctl enable samba-ad-dc
  17. 再起動する前に、正しく起動するかを確認しておきましょう。
    $ sudo systemctl start samba-ad-dc
    $ sudo systemctl status samba-ad-dc
    これで表示がグリーンでActive: active (runnning)になっていればOKです。
  18. あとはADに所属させたいPCのDNSをラズパイADのIPアドレスに設定して、通常通りADに参加すればOKです。参加の際RPCサーバが起動していないとエラーが出ますが、特に問題なく使えています。ただし、windows10の職場又は学校にアクセスするからAD参加すると最後でエラーになりますので、従来通りシステムのプロパティからADに参加させましょう。
ユーザの追加などはいろんな管理ツールがあるので割愛します。自分が試したところ、ユーザとコンピュータの登録は出来るのですが、グループポリシーの適用とかが上手くいかないようです。あくまで家庭内で数人ユーザ登録する分には使えると思います。 あとラズパイのスペック的にログインに数秒待たされます。

2019年3月4日月曜日

技術書典6に出展します!!

突然ですが、技術書典6に自分が所属している「広島電子工作娯楽部」名義で出店してきます。
人生初の自費出版です!


タイトルは「基板を作ってみよう」という何の捻りもないものです。
想定対象読者は、ブレッドボードや万能基板での作成などを経て、電子工作初心者を脱し、そろそろ基板作成に興味はあるけどなんだか難しそうだなぁ。と二の足を踏んでいる人です。

肝心の本の内容ですが、こんな感じです。
気が付いたら90ページを超えていた内容を今回、技術書典6特装版としてギュギュっと52ページに纏めました。
本書の目的は「とにかく基板を作ってみよう。CADの習得はそれからだ」です。
自分は長年基板を作りたいけど手が出ないよね・・・から、去年人生初の基板作成に踏み切り、こんなにも基板作成するハードルや環境が違っていたのかと衝撃と感動を受けました。
どのくらい衝撃だったかというと、勢い90ページくらいの本を書いてしまう程度には。

ではなぜ自分が本を書いたのか。巷にはトラ技を始めKiCadの入門本が溢れています。解説しているブログもたくさんあります。それでも自分は手を出しませんでした。いや、手を出した先が想像できなかったので手を出せなかったのです。
イベントで聞いてみても、「基板作成なんて工業高校には設備や研究室があるから」「技能があるから」また本業でやられている方も「基板発注ってむっちゃ高いよ。CADだって高いし」と実際に基板作成に手を出している人は少ないことを知りました。
3Dプリンタのような、成果物として見えるものでは無いですし、どちらかというと基板は目的のための手段にすぎず、自作したとしても人目に触れるものでは無いのかもしれません。
また、巷の本などでは、KiCadなどCADの操作に重点を置いているものが多く、基板を作りたいという目的に到達するまでの道のりが長く(まるで天守閣が見えるのにお城の周りをグルグル回らされているような感覚)、その結果基板作成は手間と時間がかかり容易ならざるもの。という印象がついているのではと思いました。(自分がそうでした)

そこで本書では、自分が試行錯誤した経験も含め、「まずは基板を作ってみよう。失敗は手を動かしたものしか得ることは出来ないのだから。」という思いをぶつけました。
ページ数の制約上詳細な手順を省いたり、やむなく削除した内容もあります。(自動配線や貫通ビアなどは省略しました)
しかし、LEDをチカチカさせるだけで、次に役に立たない。は避けたかったので、限りある紙面で説明できる限りのことはしました。そこそこの規模の回路図を描き、基板設計をします。

 手書きと違い、コンピュータ上の作業ですので、いくらでもやり直しができます。
本書では実際にFusionPCBに発注をしています。基板作成の費用がどの程度か参考になると思います。
送料込み$14.58で10枚作れます。つまり1枚200円しない程度で作れるんです。
筆者は初めて作った基板は失敗しました。やはりコンピュータ上と実物は違うものです。
しかしその経験は実際に基板を作成しなければ得られなかったのです。
(このころの顛末については、この辺りに上げています)



最後に:
当日皆様に会えることを楽しみにしています!!
本書が少しでも皆様のチャレンジのきっかけになれば、筆者として幸いです。

2018年10月7日日曜日

オープンハードカンファレンス 2018 Kagawa/Fall in OSCに行ってきました。

OSC香川で展示と、オープンハードカンファレンス 2018 Kagawa/Fall in OSCに行ってきました。

っといっても、急遽何か喋ってくれと言われたので、ほぼ徹夜で仕上げたのですが。
内容はこの所すっかりはまっている基板作成について。