投稿

OpenWrt で MariaDB を使えるようにする

WordPress をインストールするために、MySQL 互換で MySQL よりは軽量の(とはいってもそれなりに ROM 容量は食うが)MariaDB を使えるようにする。前提状況:USB メモリースティックドライブデータ領域として USB メモリースティックの外部ドライブを用意(👉 OpenWrt での USB メモリースティックドライブ)し、/mnt/data にマウントしていることを前提としている。アプリケーション自体(MariaDB)のインストール opkg install mariadb-server設定は /etc/mysql にあるmy.cnf はサーバー・クライアントに共通のグローバル設定用conf.d/50-server.cnf はサーバー専用のグローバル設定conf.d/60-galera.cnf は Galera Cluster 用のグローバル設定(Galera Cluster を使わない限り無関係)ユーザー別のローカル設定用は ~/.my.cnf を作成するということなので、基本的に /etc/mysql/conf.d/50-server.cnf を編集して設定を調整することになる。MariaDB の設定デフォルトの /etc/mysql/conf.d/50-server.cnf(抜粋) # # * Basic Settings # user = mariadb pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr # Don't put this on flash memory # Figure out where you are going to put the databases and run # mysql_install_db --force datadir = /mnt/data/mysql # tmpdir should also not go on flash memory tmpdir = /tmp lc-messages-dir = /usr/share/mariadb skip-external-locking # Instead of sk…

OpenWrt での uHTTPd 設定

USB メモリースティックドライブを前提として、uHTTPd がそのマウントされた外部領域を使うように設定することにする。やったことは以下で、SSH で設定ファイルを直接編集して行なった。(参考 👉 uHTTPd Web Server Configuration)uHTTPd 用に /etc/config/uhttpd の option home を linux home パーティションのマウントポイント(/mnt/data)下に指定する。/www/luci-static, /www/cgi-bin/luci のコピーを /mnt/data 下の対応する場所に置くあとは、index.html を自前のものに変更するなりして、動作を確認した。デフォルトの index.html は、LuCI の管理画面である、/cgi-bin/luci にリダイレクトされるようになっているので、この index.html を別のものに変更してしまったとしても、直接 /cgi-bin/luci にアクセスすればちゃんと管理画面に入ることができるので、何も問題はない。CGIちなみに、/etc/config/uhttpd を見ると、PHP や Perl は cgi-bin 以外の場所でも実行可能なように設定できるようだが、Python ではできないようだった(設定してみても、無効のようだった)。その他試しに uHTTPd の代わりに Apache を入れようとしたが、正常に動かすことができなかった。現在(OpenWrt 19.07)では、NGINX の環境が整っており、自分の場合は uHTTPd はアンインストールして使わず、LuCI も含めて SSL 対応版の NGINX で使っている(👉 OpenWrt で NGINX と PHP 7(FPM)環境を整える)。

OpenWrt で NGINX と PHP 7(FPM)環境を整える

例えば WordPress をインストールするためには PHP 7 が Web サーバーと連携して使える状態(FastCGI)を整えておく必要がある。この文書では、WordPress のことはとりあえずおいておいて、一般的に OpenWrt に Web サーバーとして NGINX(SSL 版)を利用し、PHP 7 を FPM(FastCGI Process Manager)で連携する方法について記す。前提状況:USB メモリースティックドライブWWW 用のデータを置く場所として USB メモリースティックの外部ドライブを用意(👉 OpenWrt での USB メモリースティックドライブ)し、/mnt/data にマウントしていることを前提としている。LuCI もろとも Web サーバー(HTTPd)を SSL 対応 NGINX 化する以前の OpenWrt 18.x とは飛躍的に進歩して、19.07 では SSL 対応版の NGINX が opkg として用意されている(以前は自前で Linux ソースコードからモジュールをビルドする必要があった)のみならず、NGINX 版 LuCI がセットアップされている opkg すら用意されており、OpenWrt コミュニティの旺盛な活動を感じる(👉 LuCI on other web servers > LuCI on nginx)。 opkg update opkg install luci-ssl-nginx opkg remove uhttpdLuCI 用にデフォルトでインストールされている uHTTPd は不要になるのでアンインストールした。用意した USB の外部領域(/mnt/data)があるので、デフォルトの Web ルート(/www 以下)を /mnt/data/www/default 以下にコピー。 mkdir -p /mnt/data/www/default cp -rp /www/* /mnt/data/www/defaultそれに連動して /etc/nginx/nginx.conf の設定を変更して、Web ルートが /mnt/data/www/default を指し示すように修正する。ただし、元々の root オプションが http ブロック直下にあったのを、2 番目の ssl 用の …

OpenWrt での USB メモリースティックドライブ

イメージ
(公式ガイド:👉 Using storage devices)関連パッケージのインストール opkg install kmod-usb-storage opkg install usbutils opkg install block-mount opkg install gdisk opkg install f2fs-tools opkg install kmod-fs-f2fsUSB ドライバーは kmod-usb-storage のみusbutils はコマンド lsusb -t を使って USB メモリーが接続されているかどうかを調べるため(オプショナル)block-mount はコマンド block info を使ってパーティション情報を表示するため(オプショナル)gdisk はパーティション操作のため(後述)f2fs-tools と kmod-fs-f2fs が USB メモリースティック用のファイルシステムのためのドライバーgdisk によるパーティション操作今回は 2GB の USB メモリースティックを使い、そのうち 256MB を swap パーティションに、残り 1.6GB をデータ用パーティションにした。gdisk コマンドでデバイス(/dev/sd*)を指定して実行すれば、あとは対話形式でパーティションデザインを行う形となる。 Disk /dev/sda: 3915776 sectors, 1.9 GiB Model: Storage Media Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 257F8D9E-B548-49DA-AC35-DF64271AA16E Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 3915742 Partitions will be aligned on 2048-sector boundaries Total free space is 2014 secto…

複式簿記システムの構築

イメージ
[STEP 1] Google SpreadSheets に蓄積した仕訳を SQLite + Python で処理するシステムの確立個人的に青色申告による複式簿記が必要なので、そのための必要十分なシステムを構築する。
(市販の会計ソフトは決して「必要十分」ではなく、単なる「十分」(つまり不必要な余計な要素を過剰に備えている)ので、論外。)おおまかなイメージとしては:逐次発生する会計イベントは人手によって「仕訳」してデータを入力し、1 年を通じてデータベース(仕訳帳)に蓄積する年間の蓄積された仕訳帳に基く年度末の「総勘定元帳の集計」と「決算整理仕訳」と「損益計算書の作成」は、Python プログラムで自動化する。具体的には:仕訳帳は Google SpreadSheets を利用して家族で共有集計・決算整理・損益計算は、Google SpreadSheets から TSV をダウンロードして、SQLite にインポートし、Python で SQL を駆動してそれらの定型化された作業を行い、結果を複数の TSV としてアウトプットする。最後にそれら TSV を単一の .xlsx ファイルにマージして一つの総勘定元帳として得る。仕訳帳のスキーマ(Google SpreadSheets) create table Journal ( id integer primary key, parent_id integer, date date, amount integer, debit text, credit text, description text ); ID は Google SpreadSheets 上では、単に「行番号+1」の計算式を使っただけのもの。親IDは、借方 or 貸方が諸口(複数科目)となる場合の「一対多」または「多対多」の仕訳のために用意した要素。グルーピングするエントリーのIDを親ID として指し示す。通常の一対一の仕訳「ID」「日付」「金額」「借方科目」「貸方科目」を示し、「親ID」は NULL一対多(または多対多)の仕訳の親エントリー「ID」「日付」を示し、「親ID」は NULL
「金額」「借方科目」「貸方科目」は両方とも「諸口」の場合は NULL だが、片方が単一の場合は、そのままその科目…

実家ネットワークの微修正

イメージ
ゲートウェイルーターの置き換え』でゲートウェイルーターを OpenWrt 化した R7800 に置き換える計画は無事完了した。これまで、ホームゲートウェイ直下の実質 DMZ である 192.168.0.0/24 と、ゲートウェイルーター(GateKeeper)の後ろにあるプライベート LAN の 192.168.1.0/24、VPN の仮想ネットワークの 192.168.255.0/24 という風に IP を割り付けていた。しかし、これだと、これら全体の 192.168.0.0/16 を DMZ と LAN に再分割しようとする場合に、LAN にはプライベート LAN と VPN をグルーピングしたいのだが、サブネット的に無理である。192.168.0.0/24 と 192.168.1.0/24 は隣り合っているので、192.168.0.0/23 としてまとめることは可能だが、隔離したいのは DMZ 用の 192.168.0.0/24 の方なので、意味がない。 そこで、プライベート LAN を 192.168.1.0/24 から 192.168.128.0/24 にすることで、192.168.0.0/16 を 192.168.0.0/17 と 192.168.128.0/17 で真っ二つに分けると、前者には DMZ 用の 192.168.0.0/24 が、後者には プライベート LAN 用の 192.168.128.0/24 と VPN 用の 192.168.254.0/24 が含まれるという風に上手くサブネットでデザインできる。(※ ちなみに、VPN 用を192.168.255.0/24 から 192.168.254.0/24 にするのは、単なる気まぐれである。何となく、偶数に揃えたかっただけという)192.168.0.0/1711000000.10101000.00000000.00000000~11000000.10101000.01111111.11111111
すなわち、192.168.0.0~192.168.127.255192.168.128.0/1711000000.10101000.10000000.00000000~11000000.10101000.11111111.11111111
すなわち、192.168.128.0~192.168.255.…

VPN から LAN 内のブリッジ(Aterm WG1200HP)にアクセスできない

イメージ
WireGuard VPN の仮想ネットワーク(192.168.255.0/24)から、接続先の LAN(192.168.1.0/24)内でブリッジ運用している Aterm WG1200HP(192.168.1.254)にアクセスできない。クイック設定 Web だけでなく、PING も反応なし。一方、このブリッジの向こう側にあるホストについては PING 等に応答は戻ってくる。OpenVPN で TAP(ブリッジ)接続すると、WG1200HP に問題なく接続できる。TUN(ルーター)接続だとやはり駄目。要するに、サブネット(セグメント)が異なると駄目なようだ。単にブリッジ運用しているだけなので、VPN からアクセスできなくとも大して支障はないのだが、ともかく気持ち悪かった。調べてみると、「送信元検証機能」が原因だった。(参考 👉 へっぽこ薬剤師のチラシの裏) 「使用しない」にして問題は解消、 VPN(別のサブネット)からでもクイック設定 Web と PING が ok となった。はっきり言って、NEC のマニュアルの表現がおかしい。送信元を詐称した通信を遮断する送信元検証機能により、LAN側、WAN側からのアクセスを監視し、送信元のアドレスが不正なパケットを廃棄します。別に「不正」じゃなくても、敵味方関係なく無差別攻撃しとるやんけ!ユーザーを守る頼もしいヒーローのふりしてカッコつけたりしないで、「単純バカだから、サブネットが異なるのは、何も考えないでパケットを DROP」とでも書けばいいんだよ。こんなだから、ガラパゴス化して、国内トップでも国際競争力ゼロなんだよ……。

クレジットカードの海外事務手数料

最近(2020-07-29 時点)、あちこちで Mastercard / VISA 系の海外事務手数料の値上げが発生しているようなので、まとめてみた。(税込)Mastercard / VISA楽天1.63参照エポス1.63参照ポケット(Mastercard)1.90参照エムアイ2.00参照VIEW2.20参照セゾン2.20参照Yahoo!2.20参照JACCS2.20参照Orico2.20参照三井住友2.20参照MUFG2.20参照d2.20参照ポケット(VISA)2.20参照Gold Point +2.20参照セディナ2.20参照JCBVIEW1.60参照楽天1.60参照Yahoo!1.60参照JACCS1.60参照Orico1.60参照ポケット1.60参照セゾン1.60+0.55参照セディナ2.20参照AmEx楽天2.00参照セゾン2.00参照エムアイ2.00参照

OpenWrt での NTP 設定

イメージ
System 設定Timezone は Asia/Tokyo にした。 NTP サーバー候補ntp.nict.jpntp.jst.mfeed.ad.jp0.openwrt.pool.ntp.org

OpenWrt での SSH 設定

イメージ
Wi-Fi の有効化作業に次いで、この SSH の有効化作業もインストール後に最優先となる作業だ。OpenWrt の設定・管理は LuCI だけでは作業が完結させることができず、SSH でログインして CUI 環境で作業しなければならないこともある。そのままでもパスワード認証で SSH にログインできるが、面倒なので、認証用の公開鍵を登録しておいた。System > Administration で(まだパスワードを設定していない場合にはルーターのパスワードを設定し、)SSH 用の公開鍵を登録しておく。 また、WAN に直接繋がっておらず LAN 内部からしかアクセスできないルーターならば気にしなくてもいいかもしれないが、(DMZ に設置したり、公開用の WWW サーバーを兼ねている等の)WAN 側からアクセス可能なルーターの場合は、Dropbear の設定で Interface を LAN のものに絞っておくことによって、SSH が LAN 内部からしかアクセスできないようにした方がいいだろう。一方、公開鍵を登録した場合、パスワード認証の方を無効化することも可能だが、上記設定により LAN 内部からしかアクセスできない状態にしているため、それほどセキュリティを心配する必要がないと考え、(Dropbear の設定で)パスワード認証を無効化するようなことはしていない。むしろ現状では、設定を色々といじっていて公開鍵認証でログインができなくなったりした場合に、パスワードで SSH ログインできないと面倒なことになるというリスクの方が大きい。