2023年7月 この範囲を時系列順で読む この範囲をファイルに出力する
弊社の音響担当に意見を聞きました。使ってもらうために彼らの慣れに合わせたいと思っているので、私の感覚だけで作りたくないのです。
こちらのイメージも具体的になってきたのでナルホドねぇ~が連発でしたが、そんな話の中で驚いたのはいわゆる叩きに使えるアプリが少ないという事実。
世の中には音楽再生アプリが数多ありますので私が作ったアプリを使ってくれるだろうかと思っていましたが、音響さんにとって便利な機能を積極的に取り込めば割り込む余地はありそうです。
大半の音楽再生アプリはあくまで音楽を聴くことを目的にしているためか操作に対するレスポンスが悪くキッカケ合わせに使うのは難しいのだそうです。私が音源再生のライブラリとして使っているVLCライブラリはレスポンスが良いので不思議です。
マルチスレッド化を考えていますが、その前にソースコードの整理が必要っぽいです。
フラグを用いた逐次処理をベタベタの平文で書いていますが、2000行に届こうともなるとインデックスが使えない平文ではエディタを上下スクロールするだけでも面倒ですし、今後の加筆、修正を考えるとこのままではいけないような気がします。
特に PysimpleGUI の設定が大量なので、せめてこの辺りをC言語で言うところのヘッダーファイル化したいものです。定数や関数をオレ様ライブラリ化するのですが、これが正しい書き方なのでしょう。
ここまでを試作とし、Python として美しい書式で新たに書いた方がいいのかな?
#Python
こちらのイメージも具体的になってきたのでナルホドねぇ~が連発でしたが、そんな話の中で驚いたのはいわゆる叩きに使えるアプリが少ないという事実。
世の中には音楽再生アプリが数多ありますので私が作ったアプリを使ってくれるだろうかと思っていましたが、音響さんにとって便利な機能を積極的に取り込めば割り込む余地はありそうです。
大半の音楽再生アプリはあくまで音楽を聴くことを目的にしているためか操作に対するレスポンスが悪くキッカケ合わせに使うのは難しいのだそうです。私が音源再生のライブラリとして使っているVLCライブラリはレスポンスが良いので不思議です。
マルチスレッド化を考えていますが、その前にソースコードの整理が必要っぽいです。
フラグを用いた逐次処理をベタベタの平文で書いていますが、2000行に届こうともなるとインデックスが使えない平文ではエディタを上下スクロールするだけでも面倒ですし、今後の加筆、修正を考えるとこのままではいけないような気がします。
特に PysimpleGUI の設定が大量なので、せめてこの辺りをC言語で言うところのヘッダーファイル化したいものです。定数や関数をオレ様ライブラリ化するのですが、これが正しい書き方なのでしょう。
ここまでを試作とし、Python として美しい書式で新たに書いた方がいいのかな?
#Python
Pythonでマルチスレッドをする方法を改めて調べていました。
以前は threading を使いましたが、concurrent.futures が便利っぽい。普通の関数を使うのと大差ない手間で使えます。
しかもマルチスレッドだけでなくマルチプロセスも扱えます。マルチプロセスでも fork して管理する作業が無く、マルチスレッドとほぼ同じ書き方で使えるので、どちらかで書いておけば後から変更するのも簡単。
マルチスレッドとマルチプロセスの違いは先達の書き込みが沢山があるので割愛しますが、今回の用途ではマルチスレッドが良さそうです。処理の総量はシングルプロセスでも十分に間に合っているのですが、ウィンドウマネージャーの待ちとシリアル通信の待ちがかみ合わないことへの措置なので軽快なマルチスレッドなワケです。
#Python
以前は threading を使いましたが、concurrent.futures が便利っぽい。普通の関数を使うのと大差ない手間で使えます。
しかもマルチスレッドだけでなくマルチプロセスも扱えます。マルチプロセスでも fork して管理する作業が無く、マルチスレッドとほぼ同じ書き方で使えるので、どちらかで書いておけば後から変更するのも簡単。
マルチスレッドとマルチプロセスの違いは先達の書き込みが沢山があるので割愛しますが、今回の用途ではマルチスレッドが良さそうです。処理の総量はシングルプロセスでも十分に間に合っているのですが、ウィンドウマネージャーの待ちとシリアル通信の待ちがかみ合わないことへの措置なので軽快なマルチスレッドなワケです。
#Python
EVがエコである条件は、環境負荷が少ないエネルギー源で電力を起こし消費量も少ないことです。製造においても運用においてもです。
ところが現実は違うようです。電力の大半を火力発電で賄い、運用エネルギーの消費量も少ないとは言えず、製造ではガソリン車よりも多くのエネルギーを必要とするそうな。
ぶっちゃけ、目の前で排ガスを出さないだけでエコとは呼べないのが今のEVです。給電インフラの不足や電池の原料採掘と廃棄のことまで言い出したらキリがありません。
まぁ、目の前で排ガスを出さないのはアリっちゃありっちゃありなんですけど。
そんなこんなの裏で人造石油が注目されています。藻に下水を喰わせて搾り取ったり、炭酸水に原油(種油)を混ぜて培養するなど様々な方法が考案されていますが、人造石油のいいところは大気中の二酸化炭素が原料の一部になること、燃やしても有害物質の発生がとても少ないことなどです。特に硫黄の含有量がほぼゼロなので硫黄酸化物(SOx)の排出が理屈ではゼロです。しかもとても安価に作れるそうな。これは凄いことです。
欠点があるとするなら主要特許を持っているのが日本だということです。
日本車潰し(正確には日本のエンジンメーカー潰し)のためのEV化なのに、このままではEVはダメでやっぱり内燃機関でしょとなり燃料まで日本が強くなって本末転倒です。
次世代燃料、高性能電池、レアメタルレス高性能モーターなどの主要特許を日本がほぼ独占しているのは皮肉でしかありません。
他者の足を引っ張ることで一番になろうとしても頂点には立てないという道徳の授業かな?
#雑談
ところが現実は違うようです。電力の大半を火力発電で賄い、運用エネルギーの消費量も少ないとは言えず、製造ではガソリン車よりも多くのエネルギーを必要とするそうな。
ぶっちゃけ、目の前で排ガスを出さないだけでエコとは呼べないのが今のEVです。給電インフラの不足や電池の原料採掘と廃棄のことまで言い出したらキリがありません。
まぁ、目の前で排ガスを出さないのはアリっちゃありっちゃありなんですけど。
そんなこんなの裏で人造石油が注目されています。藻に下水を喰わせて搾り取ったり、炭酸水に原油(種油)を混ぜて培養するなど様々な方法が考案されていますが、人造石油のいいところは大気中の二酸化炭素が原料の一部になること、燃やしても有害物質の発生がとても少ないことなどです。特に硫黄の含有量がほぼゼロなので硫黄酸化物(SOx)の排出が理屈ではゼロです。しかもとても安価に作れるそうな。これは凄いことです。
欠点があるとするなら主要特許を持っているのが日本だということです。
日本車潰し(正確には日本のエンジンメーカー潰し)のためのEV化なのに、このままではEVはダメでやっぱり内燃機関でしょとなり燃料まで日本が強くなって本末転倒です。
次世代燃料、高性能電池、レアメタルレス高性能モーターなどの主要特許を日本がほぼ独占しているのは皮肉でしかありません。
他者の足を引っ張ることで一番になろうとしても頂点には立てないという道徳の授業かな?
#雑談
LTC Player は音源プレーヤー部がほぼ終わり。今後は LTC Generator の制御を組み込んでいきます。
LTC Generator の制御部はマルチスレッドを使って音楽プレーヤーと分ける必要があると思われます。LTC Generator との通信は最短で33msec(1/30秒)毎に行われますが、PysimpleGUI の sg.window.read() のタイムアウトを25msecにしているためにタイミングが間に合わない可能性があるからです。タイムアウトをもっと早くすれば良さそうなものですが、これ以上早くすると PysimpleGUI にとってよろしくないのです。あちらを立てればこちらが立たず状態ですが、トータルの処理量には無理は無く、あくまでタイミングの問題ですから、マルチスレッドにすればストレス無く動くと思います。
スレッド間通信には Queue を使えばいいでしょう。共有メモリや Pipe より通信は遅いのですが、List だろうが Tuple だろうがPythonで扱う変数をそのまま扱えるので便利です。通信するデータ量も僅かですから速度が気になることもないでしょう。ちなみに、Queue を送った後にほんの僅かな sleep() を入れると受け側のスレッドが動くまでの時間を短く出来る様です。
#Python
LTC Generator の制御部はマルチスレッドを使って音楽プレーヤーと分ける必要があると思われます。LTC Generator との通信は最短で33msec(1/30秒)毎に行われますが、PysimpleGUI の sg.window.read() のタイムアウトを25msecにしているためにタイミングが間に合わない可能性があるからです。タイムアウトをもっと早くすれば良さそうなものですが、これ以上早くすると PysimpleGUI にとってよろしくないのです。あちらを立てればこちらが立たず状態ですが、トータルの処理量には無理は無く、あくまでタイミングの問題ですから、マルチスレッドにすればストレス無く動くと思います。
スレッド間通信には Queue を使えばいいでしょう。共有メモリや Pipe より通信は遅いのですが、List だろうが Tuple だろうがPythonで扱う変数をそのまま扱えるので便利です。通信するデータ量も僅かですから速度が気になることもないでしょう。ちなみに、Queue を送った後にほんの僅かな sleep() を入れると受け側のスレッドが動くまでの時間を短く出来る様です。
#Python
LTC Player はいい感じに進んできました。
PlayListには「Continue」って項目を入れています。音終わりで止める(AutoPauseする)か曲を続けるかの設定です。単に止めて続けても面白くないし、曲間の時間を設定出来たら面白そうなので、曲が終わって次の曲が始まるまでの待ち時間を設定出来るようにしました。0秒にしておけば普通の曲ツナギです。もちろん、待ち時間が終わらなくても PLAY を押せば次の曲に行きます。ついでにマイナス秒も設定出来るようにしてみました。前倒しで曲を終りにする機能です。お尻の無音が長い曲を曲続きにしたい場合に便利かなと。使う人がいるかわかりませんが、ソースを見たら簡単に入れ込めそうだったので欲を出してみました。ライブラリがVLCなので厳密な時間再現は出来ませんけどね。
それにしても、Python のソースなのに明らかにアセンブラっぽい。どう見ても一般的な Python の流儀から外れています。勉強しながら考えなら書いていると体に染みついたアセンブラ風味になってしまうようです。ソースコードを誰かに納品するワケじゃありませんのでオレ流で構わないのですけどね。けど、オブジェクト指向でクラス・インスタンスをベースにするより、フラグベースでリニアな処理手順にした方が分岐が少なくてバグを見つけやすいかもと思ったり。リニアに書くのが非合理的なのでオブジェクト指向なんでしょ!という正論は聞きませんwww
#Python
PlayListには「Continue」って項目を入れています。音終わりで止める(AutoPauseする)か曲を続けるかの設定です。単に止めて続けても面白くないし、曲間の時間を設定出来たら面白そうなので、曲が終わって次の曲が始まるまでの待ち時間を設定出来るようにしました。0秒にしておけば普通の曲ツナギです。もちろん、待ち時間が終わらなくても PLAY を押せば次の曲に行きます。ついでにマイナス秒も設定出来るようにしてみました。前倒しで曲を終りにする機能です。お尻の無音が長い曲を曲続きにしたい場合に便利かなと。使う人がいるかわかりませんが、ソースを見たら簡単に入れ込めそうだったので欲を出してみました。ライブラリがVLCなので厳密な時間再現は出来ませんけどね。
それにしても、Python のソースなのに明らかにアセンブラっぽい。どう見ても一般的な Python の流儀から外れています。勉強しながら考えなら書いていると体に染みついたアセンブラ風味になってしまうようです。ソースコードを誰かに納品するワケじゃありませんのでオレ流で構わないのですけどね。けど、オブジェクト指向でクラス・インスタンスをベースにするより、フラグベースでリニアな処理手順にした方が分岐が少なくてバグを見つけやすいかもと思ったり。リニアに書くのが非合理的なのでオブジェクト指向なんでしょ!という正論は聞きませんwww
#Python
PysimpleGUI の使い方が更に見えてきたので LTC Player はそれっぽさが増しています。
右クリックメニューが便利ですね。ほとんどのウェジットに設定が出来ます。ボタンを配置することなく操作イベントを起こせるので、使用頻度が少ない操作やパソコンに間違って触れても発生させたくない操作には良いようです。問題は「ここには右クリックメニューがあるよ」をどうやって示すかです。隠しコマンドの様なショートカットキーは嫌いなのでその様にはしたくありませんし、「ここにあるよ」を強く主張したらボタンと同じです。強く主張することなく右クリックメニューがあることを示すデザイン手法が欲しいところです。もう少し研究が必要です。
まだまだα版ですが、「自分が仕事で使うなら欲しい機能」を実装していくのは楽しいですね。
VLC Media Player にもある機能ですが、スライダーで再生位置を設定したり、カーソルキーで少し戻す・送る機能は便利です。音源を聞きながらのデータ整理では能率が良いですし、リハでは「音の終わりから何秒戻したところから再生したい」とかがよくあるからです。されど本番では絶対に触りたくない機能ですから、右クリックメニューで有効/無効を設定出来る様にもしておくと更にイイ感じです。
#Python
右クリックメニューが便利ですね。ほとんどのウェジットに設定が出来ます。ボタンを配置することなく操作イベントを起こせるので、使用頻度が少ない操作やパソコンに間違って触れても発生させたくない操作には良いようです。問題は「ここには右クリックメニューがあるよ」をどうやって示すかです。隠しコマンドの様なショートカットキーは嫌いなのでその様にはしたくありませんし、「ここにあるよ」を強く主張したらボタンと同じです。強く主張することなく右クリックメニューがあることを示すデザイン手法が欲しいところです。もう少し研究が必要です。
まだまだα版ですが、「自分が仕事で使うなら欲しい機能」を実装していくのは楽しいですね。
VLC Media Player にもある機能ですが、スライダーで再生位置を設定したり、カーソルキーで少し戻す・送る機能は便利です。音源を聞きながらのデータ整理では能率が良いですし、リハでは「音の終わりから何秒戻したところから再生したい」とかがよくあるからです。されど本番では絶対に触りたくない機能ですから、右クリックメニューで有効/無効を設定出来る様にもしておくと更にイイ感じです。
#Python
某所に設置したサーバー機の OS は Debian です。
それ自体が素晴らしいのもありますが、細かい解説を残してくれる先達が多いので、自分がやりたいと思うことはネットを検索すればほとんど解決します。
samba を用いてのファイル共有はその昔の文字コード問題は全く無くアクセスも速いですね。Windows-Server で共有するのと遜色ありません。
Wi-fi のアクセスポイントにもしていますが、汎用の USB-Wifi トングで問題ありません。
VPN(openvpn)で本社のサーバーとも繋げています。ファイルを直接開くのはお勧め出来ないものの、特別なことをせずに本社の共有フォルダにアクセス出来ますから作業性は良いですね。VPNとは拠点間LANとも呼ばれる手法で、疑似的にLANケーブルが繋がっているのと同じ状態を作り上げる手法です。openvpn 以外にDNSサーバーに細工をしてルーティングを施さないといけませんが、要領がわかってしまえば簡単です。
#サーバー
それ自体が素晴らしいのもありますが、細かい解説を残してくれる先達が多いので、自分がやりたいと思うことはネットを検索すればほとんど解決します。
samba を用いてのファイル共有はその昔の文字コード問題は全く無くアクセスも速いですね。Windows-Server で共有するのと遜色ありません。
Wi-fi のアクセスポイントにもしていますが、汎用の USB-Wifi トングで問題ありません。
VPN(openvpn)で本社のサーバーとも繋げています。ファイルを直接開くのはお勧め出来ないものの、特別なことをせずに本社の共有フォルダにアクセス出来ますから作業性は良いですね。VPNとは拠点間LANとも呼ばれる手法で、疑似的にLANケーブルが繋がっているのと同じ状態を作り上げる手法です。openvpn 以外にDNSサーバーに細工をしてルーティングを施さないといけませんが、要領がわかってしまえば簡単です。
#サーバー
PysimpleGUI は簡単な画面を簡単に作れますが、母体である Tkinter の機能の一部を直接引っ張り出すことで思った以上に細かい作り込みも出来ます。
もちろん、直接使うのに比べたら出来ることは少ないのですが、少ない学習量と記述量でここまで出来るなら御の字だと思います。主なGUIライブラリは、一つのことをするのに「あっちにコレ」「そっちにソレ」と彼方此方に記述をしなければなりません。細かく言うなら、雛形 class をオーバーライドして自分用の class 定義を延々とやらねばならず、Pythonの書き方としては王道なのでしょうが、簡単なことを簡単に実現するには程遠い感じです。
何を以って良しとするかは難しいですが、GUI画面製作の入門として PysilmpleGUI がお勧めなのは間違いありません。class ってイマイチわからない、って人も使えると思います。
もちろん、オブジェクト指向の書き方が出来るプログラム言語で class を使わないのは魅力が半減ですから身に付けるべきですケドね。
本業が詰まってしまい LTC Player の製作は完全に止まっていますが、合間に勉強を進めていきましょう。
#Python
もちろん、直接使うのに比べたら出来ることは少ないのですが、少ない学習量と記述量でここまで出来るなら御の字だと思います。主なGUIライブラリは、一つのことをするのに「あっちにコレ」「そっちにソレ」と彼方此方に記述をしなければなりません。細かく言うなら、雛形 class をオーバーライドして自分用の class 定義を延々とやらねばならず、Pythonの書き方としては王道なのでしょうが、簡単なことを簡単に実現するには程遠い感じです。
何を以って良しとするかは難しいですが、GUI画面製作の入門として PysilmpleGUI がお勧めなのは間違いありません。class ってイマイチわからない、って人も使えると思います。
もちろん、オブジェクト指向の書き方が出来るプログラム言語で class を使わないのは魅力が半減ですから身に付けるべきですケドね。
本業が詰まってしまい LTC Player の製作は完全に止まっていますが、合間に勉強を進めていきましょう。
#Python
2023年6月 この範囲を時系列順で読む この範囲をファイルに出力する
そんなこんなで LTC Player の製作は止まっています。進めたいのですが時間だけでなくアタマの容量も不足してます。
PysimpleGUI を筆頭にプログラム環境でどこまで出来るかを探りながらなので、自分でもどう仕上がるかわからんという本音もあります。
最近気づいたのは、sg.FileBrowse() などのボタンとしてレイアウトしなければならない機能は、不可視設定した column に入れ込んでしまえば表示しなくても使えること、ボタンオブジェクトを押したことにする .Click() を使えば他の event から(もちろんメニューからも)読み出せるというものです。PysimpleGUIを使ったことがないとピンとこないことですが、これは PysimpleGUI のレイアウトに自由度を与えてくれます。
追記
.Bind() を使うと細かいキーボード操作を event として取り込むことが出来るらしい。
キー操作をプレスにするかリリースにするかを選べるハズです。この辺りも研究課題です。
#Python
PysimpleGUI を筆頭にプログラム環境でどこまで出来るかを探りながらなので、自分でもどう仕上がるかわからんという本音もあります。
最近気づいたのは、sg.FileBrowse() などのボタンとしてレイアウトしなければならない機能は、不可視設定した column に入れ込んでしまえば表示しなくても使えること、ボタンオブジェクトを押したことにする .Click() を使えば他の event から(もちろんメニューからも)読み出せるというものです。PysimpleGUIを使ったことがないとピンとこないことですが、これは PysimpleGUI のレイアウトに自由度を与えてくれます。
追記
.Bind() を使うと細かいキーボード操作を event として取り込むことが出来るらしい。
キー操作をプレスにするかリリースにするかを選べるハズです。この辺りも研究課題です。
#Python
このところサーバーを作っていました。設置場所は某劇場の舞台事務所です。
インターネットにも行けるごく普通の館内LANを使うのですが、館内のフリーwi-fiと元を同じくする回線です。先の設定がどうなっているのかわかりませんが、ネットマスクの桁数から想像するにフリーwi-fiの回線そのものと思われます。無料で使わせてもらえるので贅沢を言ってはいけませんが、接続しているパソコンと共有しているフォルダは絶対に隠さなければなりません。
となると、必要な通信は通って不必要は通信は遮断するゲートウェイサーバーを構成する必要があります。その他の課題は、ローカルLANをwi-fiにすることです。机の配置の都合でLANケーブルを敷設出来ないからです。
サーバー機の構成は、機体がジャンクのPC、OSはdebian、データストレージはRAID1にしたHDDを2台とバックアップ用のUSB-HDD、wi-fiのアクセスポイントとしてUSBのwi-fiトングです。マザーボードにはLANコネクタが2個あるので、外向きLANと内向きLANを構成してwi-fiトングは内向きのLANとブリッジします。
これまでにも近い構成を何度も組んでいますからすんなり終わるだろと思ったら大間違い。このところのdebianはヴァージョンが上がるごとにセキュリティ対策が増え、設定が微増するのは仕方ないとして、旧来のコマンドが使えなくなったり設定の仕方がちょっとだけ変わるのです。私からすればよくわからん方言となりますので調べるのに時間がかかりました。持った通りに組めましたが、思惑より2日間余計にかかって他の仕事がヤバイ。
おまけというか蛇足ですが、VPNで本社にも繋がる様にしておきました。本社の共有フォルダにアクセス出来れば業務も楽だろうと。
突っ込んだ話ですが、DHCPサーバー、DNSサーバーとしてdnsmasqを使ってみました。簡易的なモノというイメージがありますが、私が組む小規模サーバーにはisc-dhcp-serverやbind9よりも等身大です。複雑な振り分けやルーティングはしませんので機能は十分ですし何よりも設定が分かりやすい。これらはサーバーを作り始めた当初に難儀したところですからこの使い勝手は感激レベルです。一つ問題を上げるなら、起動後、wi-fiトングと内向きLANとのブリッジが完了する前にdnsmasqが起動すると正常に動作しないので、dnsmasqの起動に待ちを入れる必要があったことです。これを見つけるのに少し時間がかかりました。
/etc/resolv.conf を dhcpcd に書きかえらない対策が必要なことも気付くのに時間がかかりました。dnsmasq は自分でルートファイルを持たないために設定が簡単ですが、dhcpでアドレスを受け取る際に得たDNSサーバーの情報で /etc/resolv.conf を書き換えてしまうのです。これをされると自分でDNSサーバーを持っている場合に不都合が出るので、/etc/resolv.conf は書き換え不可にしなければならないのです。dnsmasq にも書き換えしない設定があるようですが、何度やっても書き換えられてしまう。ならば、/etc/resolvconf をOSレベルで書き換えられてない様にすればいい。同様の問題を抱えた先達がいましたので有難くパクらせて頂きました。パーミッションを400にするのかと思いきや、パーミッションより上位のフラグがあって、それを設定するのがいいらしい。# chattr +i /etc/resolv.conf とのこと。+i は書き換え不可のフラグを立てるスイッチです。外すなら -i だそうな。
あと、DHCPクライアントをdhcpcdにしました。RaspberryPiで慣れているのもありますが、旧来の /etc/network/interfaces だけで設定するより何をしてもスムーズ。特にwi-fiトングをアクセスポイントにする hostapd を使うなら dhcpcd 一択と思えるほど快適でした。
書き始めたらキリがありませんが、都度の感想も書き入れた設定記録を残したので、次の製作では参考にしつつ読んで楽しもうと思います。
サーバーの設定は server world さんを参考にしています。
server world
ここの通りにすればちゃんと動きますので、私はここのレシピで基本設定をしてから好みに変更する様にしています。
ただし、セキュリティについては別です。基本はフォルダやファイルのパーミッション、ルーティング、IPフィルタリングですが、ここはそうった解説を書かない方針と見受けらえます。それらについては別途勉強しなければなりません。
#サーバー
インターネットにも行けるごく普通の館内LANを使うのですが、館内のフリーwi-fiと元を同じくする回線です。先の設定がどうなっているのかわかりませんが、ネットマスクの桁数から想像するにフリーwi-fiの回線そのものと思われます。無料で使わせてもらえるので贅沢を言ってはいけませんが、接続しているパソコンと共有しているフォルダは絶対に隠さなければなりません。
となると、必要な通信は通って不必要は通信は遮断するゲートウェイサーバーを構成する必要があります。その他の課題は、ローカルLANをwi-fiにすることです。机の配置の都合でLANケーブルを敷設出来ないからです。
サーバー機の構成は、機体がジャンクのPC、OSはdebian、データストレージはRAID1にしたHDDを2台とバックアップ用のUSB-HDD、wi-fiのアクセスポイントとしてUSBのwi-fiトングです。マザーボードにはLANコネクタが2個あるので、外向きLANと内向きLANを構成してwi-fiトングは内向きのLANとブリッジします。
これまでにも近い構成を何度も組んでいますからすんなり終わるだろと思ったら大間違い。このところのdebianはヴァージョンが上がるごとにセキュリティ対策が増え、設定が微増するのは仕方ないとして、旧来のコマンドが使えなくなったり設定の仕方がちょっとだけ変わるのです。私からすればよくわからん方言となりますので調べるのに時間がかかりました。持った通りに組めましたが、思惑より2日間余計にかかって他の仕事がヤバイ。
おまけというか蛇足ですが、VPNで本社にも繋がる様にしておきました。本社の共有フォルダにアクセス出来れば業務も楽だろうと。
突っ込んだ話ですが、DHCPサーバー、DNSサーバーとしてdnsmasqを使ってみました。簡易的なモノというイメージがありますが、私が組む小規模サーバーにはisc-dhcp-serverやbind9よりも等身大です。複雑な振り分けやルーティングはしませんので機能は十分ですし何よりも設定が分かりやすい。これらはサーバーを作り始めた当初に難儀したところですからこの使い勝手は感激レベルです。一つ問題を上げるなら、起動後、wi-fiトングと内向きLANとのブリッジが完了する前にdnsmasqが起動すると正常に動作しないので、dnsmasqの起動に待ちを入れる必要があったことです。これを見つけるのに少し時間がかかりました。
/etc/resolv.conf を dhcpcd に書きかえらない対策が必要なことも気付くのに時間がかかりました。dnsmasq は自分でルートファイルを持たないために設定が簡単ですが、dhcpでアドレスを受け取る際に得たDNSサーバーの情報で /etc/resolv.conf を書き換えてしまうのです。これをされると自分でDNSサーバーを持っている場合に不都合が出るので、/etc/resolv.conf は書き換え不可にしなければならないのです。dnsmasq にも書き換えしない設定があるようですが、何度やっても書き換えられてしまう。ならば、/etc/resolvconf をOSレベルで書き換えられてない様にすればいい。同様の問題を抱えた先達がいましたので有難くパクらせて頂きました。パーミッションを400にするのかと思いきや、パーミッションより上位のフラグがあって、それを設定するのがいいらしい。# chattr +i /etc/resolv.conf とのこと。+i は書き換え不可のフラグを立てるスイッチです。外すなら -i だそうな。
あと、DHCPクライアントをdhcpcdにしました。RaspberryPiで慣れているのもありますが、旧来の /etc/network/interfaces だけで設定するより何をしてもスムーズ。特にwi-fiトングをアクセスポイントにする hostapd を使うなら dhcpcd 一択と思えるほど快適でした。
書き始めたらキリがありませんが、都度の感想も書き入れた設定記録を残したので、次の製作では参考にしつつ読んで楽しもうと思います。
サーバーの設定は server world さんを参考にしています。
server world
ここの通りにすればちゃんと動きますので、私はここのレシピで基本設定をしてから好みに変更する様にしています。
ただし、セキュリティについては別です。基本はフォルダやファイルのパーミッション、ルーティング、IPフィルタリングですが、ここはそうった解説を書かない方針と見受けらえます。それらについては別途勉強しなければなりません。
#サーバー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131