技術メモ」カテゴリーアーカイブ

接続元 IP が変更された際の iptables の SSH 設定変更

当方は、一般的なプロバイダーから接続している。
そのためルータを再起動するなどによって PPPoE を再確立した時点で、接続元の IP が変わってしまう。
この影響により、SSH 接続を制限しているサーバに対し、以下の作業を都度行う必要がある。

手順

自分が接続しているマシンのネットワーク  IP(グローバル IP、ゲートウェイ IP)を探す。

AAA.BBB.CCC.DDD

そのIPアドレスの WHOIS 情報を探す

次項は、再接続時の際に「偶然、以前に設定したセグメント内に入る」という可能性を考え、このような作業を追加としている。
個人的な「こだわり」の部分。

これは、全開放に比べたら極めて小さい穴だし、SSH 接続は鍵認証しかできないなど、他の部分でセキュリティレベルは上げるなどの処置を施している。
その点からして、リスクはカバーしてると思う。

あくまで参考程度とすること。十分考慮のうえ注意すること。
熟考せず無為に参考のまま設定すると、セキュリティ的にガバガバになるリスクがある。
参考にしての設定は、あくまで自己責任で。

登録情報からネットワーク IP アドレス(付与されている IP アドレス範囲)を探す。

なるべく広めの IP で SSH ポートを開くため。上位があるなら、なるべく広めに開ける。

AAA.BBB.CCC.EEE/FF

「さくらの VPS」コントロールパネルからコンソールに root ログイン

TeraTerm などで接続できない以上、仮想コンソールを使うしかない。

何番目に SSH 開放 IP アドレス(範囲)を突っ込むか探す。

この辺りは、手探りで探すしかない。
主に利用するコマンドは以下。

  • ルールの確認(設定コマンド原文)
# iptables -S
  • ルールの確認(設定順番号、表示整形)
# iptables -L --line-numbers

iptables の構成次第によって、追加(挿入)する場所が厳密な場合があったり、何も考えず、最後に追加すればよい場合など、そこは個々の構成に併せて考える。

iptables に追加(挿入)コマンド投入

  • 【例1】IP アドレスを範囲(サブネット単位)で SSH 開放する場合
# iptables -I INPUT 5 -s AAA.BBB.CCC.EEE/FF -p tcp
 -m state --state NEW -m tcp --dport 22 -j ACCEPT
  • 【例2】1つの接続元 IP アドレスだけ SSH 開放する場合
# iptables -I INPUT 5 -s AAA.BBB.CCC.DDD -p tcp
 -m state --state NEW -m tcp --dport 22 -j ACCEPT

この状態で Teraterm, WinSCP などから接続確認

TeraTerm などで、以前の通り接続できるか確認。
問題なければ、次項。

sysconfigに設定情報を保存

# service iptables save

念のため、ちゃんと保存されたかの確認もする。

# cat /etc/sysconfig/iptables

参考

【余談】将来こうしたい

ルーターの切断や再起動した時にしか必要のない作業とはいえ、毎回この設定をするのは、いちいち面倒。
なので、何かしらの自動化を考えている。

NASか、クラウドストレージか。そしてフリーか、メーカーか。

標題の件。
いつもリプレースとかで悶々と考えたり調べたりするので、つらつらとまとめてみた。

フリーのNAS系OS

後者で触れる「OS 上のアプリとして動く『クラウドストレージ』ソフト」とは異なり、OS レベルで NAS としての機能を提供する。
よって OS インストールと同時に、NAS としての機能も併せてインストールされる。

記事作成時点での主な OS は、以下。

  • TrueNAS(旧 FreeNAS)
  • openmediavault
  • Rockstor
  • XigmaNAS(旧 NAS4Free)

メリット

無料。

何と言ってもこれでしょう。

デメリット

バグ対策。

何と言ってもこれでしょう。(またかw)

CentOS など無料版 Linux OS とは、開発体制(というか、単純に言うと、関わっている人の数)からして、あまりにも脆弱。
保証? フリーなのだから、目標とかポリシー・スタンスはあるだろうけど、保証なんてものはない。

そのため、OS などのバグによって、データが破損したり、危険に晒されるリスクは常にある。
勿論そうならないようにするため、RAID 機能やバックアップ機能の提供はされているが、それすらフリーの機能なわけで。

でも NAS 上で管理するデータは、運用する個人・組織の「資産」にも等しいもの。
リスクがあるのは、あまり気分がよいものではないかも。

メーカー製 NAS に比べて、遅い(という可能性)

動作するハードウェア、たとえば CPU などを広範囲化する等、より汎用的に動作するように OS が実装されている。
そのため、OS 部分をはじめとしたプログラムが膨大になり、結果的に処理スピードの劣化に繋がってしまう。

所詮「フリー」という点に尽きる。

TrueNAS(旧 FreeNAS)⇒ ベース OS が FreeBSD = 主流じゃない。

FressBSD 系には ZFS という、とても多機能で魅力的なファイルシステムを利用できるメリットもある。
しかしながら、いかんせん FreeBSD は主流ではない。
そのため、Web 上での情報が少なく、例えばハードウェアに適合するデバイスドライバーを探すのに難儀する可能性や、トラブルシューティングの際のハードルが高くなる点が考えられる。

【記事注】
ZFS は最近 Linux 系 OS にも移植され、利用できるようになりつつある。
FreeBSD 系の普及があまりにもしないため、ZFS 作った人が折れて Linux を容認したからか?

クラウドストレージ

OS 上のアプリとして動く『クラウドストレージ』ソフトのこと。
ソフトウェアとはいえ、ミドルウェア的な位置づけのような感じ。

主なソフトウェアは、以下。

  • Nextcloud
  • ownCloud(商用版もあり)

これ以外にもあるとは思うが、個人的には Nextcloud の1強だと思ってる。
ちなみに Nextcloud は ownCloud からのフォーク(いわゆる「派生」)であり、ownCloud 自体にもフリー版はある。
でも、関係者や歴史的経緯(いわゆる「仲違い」)からして、現在フリーのクラウドストレージとしての代名詞は、Nextcloud になっているような気がする。

メリット

無料。

もういい(笑)

ファイルの世代管理など、付帯機能の可能性。

クラウドストレージは、ネットワーク先にあるディスクのファイルと同一の「コピー」を自分のマシンに保存し、「同期」する形態が基本。
そのためNASに比べて、ファイルを破損するリスクが軽減されたり、ファイルそのものの世代管理機能が提供されている場合もある。

デメリット

バグ対策。

これも NAS と同じ。

クライアントにも(原則として)領域が必要。

上記に触れた通り、コピーとは言え、利用中(編集・表示中)のファイルをローカル内に保存することが原則。
そのためローカルのディスク内から、ある程度の容量がクラウドストレージとの連携用に必要となる。

とはいえ、クラウド上のすべてのファイルを同期(コピー)を保存しているわけではなく、利用しているファイルのみ同期されることが基本。
それにローカルディスクで「どの程度の容量をクラウドストレージの同期用領域として使用するか」を設定で調整することができることも多い(または自動的にやってくれる)。
そのため、動画などの馬鹿みたいに大きなファイルを扱っていなければ、ローカルディスクは逼迫されないと思う。

【余談】クラウドストレージ ≠ NAS

最近はクラウドストレージの機能を有する NAS(たとえば、Web ブラウザやアプリを経由して NAS にアクセスする)、逆に NAS のようなファイルアクセスが可能なクラウドストレージ(WebDAV を使用し、通常のファイルのようにアクセスできる)など、お互いの垣根を越えるような機能が提供されることが多い。
しかしながら、そもそもクラウドストレージと NAS には大きな違いがある。

NAS はあくまで、ネットワーク接続して利用するストレージ領域。ネットワークディスク。

NAS には、ネットワークの先にあるサーバ上のディスクのファイルに直接アクセスする。これが基本。

クラウドストレージは、サーバにあるファイルの「コピー」をクライアント作成して、同期を取る。

ネットワーク先にあるサーバ上ディスクのファイルと同一の「コピー」を、自分のローカルマシンに保存している。
そして、参照や編集の都度、サーバ上のファイルとの整合性を確認し同期を取っている。
そのため、ネットワーク先にある実ファイルとのやりとりが生じるため、タイムラグが生じる場合がある。

ちなみに、NAS・クラウドストレージともに、例えば同一ファイルを複数人が編集していた場合、デッドロックや不整合、はたまたファイルの破損が生じる可能性がある。
しかしながらこの場合、最近のクラウドストレージだと、ファイルの履歴を保存(世代管理)する機能が提供されていること多い。この場合、万一ファイルが破損しても、破損前のファイルに戻すことができる。

NAS の場合は、編集・参照ともにファイルを直接弄っている事になる。
そのため、Excel ファイルの場合など一部のアプリケーションではファイル編集時に排他制御を行っているものものあるが、基本的には同時編集などが生じた場合は「あと勝ち」つまり最後に保存した状態のものが、実際に保存されることになってしまうし、世代管理もしていないので、後戻りすることは基本的に不可能。

ここまで考えると、クラウドストレージのほうが軍配かなぁ。
フリーのNASはちょっと危険な臭いがする。
バックアップや RAID は、クラウドストレージとは別物で考えても良さそうだし。

メーカー系NAS

メリット

保証がある。

保証の形態は有料・無料、ディスク(データ領域)までの保証有無など、メーカーや購入機材によって様々だとは思う。

だが、それでもなお、ハードウェアだけでなくソフトウェアの保証まで範囲があるメリットは大きい。
使用者の心理手的負担が少なくて済む。

ベースシステム(ソフトウェア・ファームウェア・BIOS など)が最適化されている

各メーカーとも、NAS を制御するためのシステムは、独自開発されている。
そしておそらくそれらは、(余程の聴いたことのようなヘボいメーカーでないかぎり)各ハードウェアに併せて最適化されているはず。
言わば Linux OS を、NAS のハードウェアに併せてカーネルレベルで最適化しているようなイージ。
それによってシステムのスループットなど、機能向上に寄与しているはず。

デメリット

サポートには期限がある。

保証も含めて、メーカーは永久にサポートしてくれるわけではない。
ハードウェア部分のサポートは、一般的に製造終了後3~5年程度で終了するだろう。
そしてソフトウェア部分についても、手厚いメーカーですら、5年程度で終わると思う。
そうなった時点で、メーカーのホームページからは情報は抹消されてしまう可能性だってある。(Drobo は、まさにそうだった。)

メーカーの継続性にも注意する必要がある。

企業が途中で買収されたり、メーカーは維持されても、ブランドやNAS ハードウェアのビジネスにメーカーつまり企業としての事業メリットがなければ、事業が売却されたり、事業そのものが廃止される可能性だってある。

そうなった場合は、購入者も一蓮托生。

新たなテクノロジーや規格への追随性。

NASのテクノロジーも、年々進化している。
例えば内蔵されるディスクの容量は、年々増加の一途を辿っているわけだが、NAS によっては、その上限(ディスクの最大容量)が決まっていることが多い。

それと NAS に接続するためのネットワークプロトコル。
例えば、NAS のプロトコルでよく使われる SMB は、この記事作成時点では v3.0 や v3.1 が最新になりつつある。
このネットワーク規格の進化に、いつまでファームウェア更新で追随してくれるのかは、正直だれも判らない。

ちなみに当方で 10 年ほど前に設置した NAS は、SMBv1.0 のままファームウェアサポートが終了してしまった。
そのため、ある日、Windows 10 のアップデートを行った時に、接続できなくなるという憂き目に遭った。

後日これは何とか接続できるよう、Windows10 側の設定を変更したが、SMBv1.0 にはランサムウェアによるセキュリティリスクがある。
それを考えると、この NAS を継続的に利用することは、リスクになってしまう。

これらの点を踏まえると、いつまでも同一の NAS ハードウェアを使用することには躊躇が残る。

クラウドストレージサービス

おそらく理想的な最適解。
以下のサービスが有名。

  • DropBox
  • GoogleDrive
  • OneDrive (Microsoft)
  • box

メリット

企業としての保証・サポート

文字通り。

バックアップやハードウェアの心配が不要

これは「ある程度」という話。
今のところ、極めて稀にだが、復旧できないレベルの障害が発生するリスクは存在する。ほとんどの場合は心配は少ないと思われる。フリーNASやオンプレに比べると、故障リスクは低いのではないかと思う。

デメリット

高い。特にストレージ。

何よりも、これが筆頭ではないかと。
どうしても「月々」といったランニングコストが発生する。
企業系などの規模によっては、こちらのほうが安価な可能性はあるが、一般利用するには、どうしても「お高い」感が出てしまうう。

メンテナンスやネットワーク障害に影響される。

オンラインサービスの場合、この問題を避けることができない。
そのため、たとえば企業などの場合だと、オンラインストレージとオンプレの多重化を施す必要もあると思う。

自分なりの現実解

とは言え、まだ現時点では到達してないのだが、最終的にこうする予定。

  • オンプレサーバをファイルストレージとし、そこに Nextcloud を設置。(HDD 4台で RAID6 構成)
  • バックアップとして、Amazon S3 Glacier を使用する。

予定は変更する場合があります。

さくらのレンタルサーバに Nextcloud 入れてみた感想

インストール方法は割愛

ググれば既に解説されてるサイトがいくつかヒットするので、詳しくはそちらを参照。
自分の場合、この時点での最新バージョン(21.0.1)をインストールしたが、以下の点にハマったこと以外は、問題なくインストール、稼働してます。

ハマったこと

WAF は必ず「無効」にすること。

別に Nextcloud の問題ではなく。

インストールの途中で Nginx のエラーが出たり(レンタルサーバは Apache 稼働)、スタイルシートなどが反映されず、レイアウトが崩れたり、最初、理由がさっぱり判らなかった。無駄にすること数時間。

結局原因は「これ」。

WAF を有効にしてたのをすっかり忘れてた。
無効にしてインストールしたら、すんなり入った。

いきなり結論

重い

所詮「レンタルサーバ」(共用サーバ)なので、レスポンスは期待してなかったけれど、Web 画面はかなり「もっさり」してる。
遅いからと言って、レスポンスか返ってくるのを待たずにあちこちクリックすると 500 エラーになる。
でも、この辺りは WordPress(特にダッシュボード、管理画面)の挙動でも同様なので、期待しないほうが良いかも。

一応 Nextcloud 内部でも、キャッシュなどのレスポンス対策は施されているようだが、大量のユーザを抱えての運用には耐えられないと思う。
レンタルサーバ上の Nextcloud は、あくまで個人利用ぐらい。

ちなみに、レンタルサーバのプランを上げることによって「重さ」が軽減できるとは考えないほうがいい。

「多少」は軽くなる可能性があるものの、体感できるほどのレスポンス改善はおそらく期待できないと思う。

IT技術者じゃないとインストールは難しい、かも?

インストール等はかなり簡単にできるようになってはいる。しかしながら、Apache などの conf 設定や、Nextcloud 自体の config 設定など、細かな設定調整をしようとすると、IT技術者としての知識や経験・勘所が必要な部分がどうしても出てくる。

また、セキュリティ面の部分も考えると、適切なIT技術者がインストールや設定を担当するのが望ましいと思う。

Android, iOS などのアプリ提供を謳ってるけど、アプリで直接できるのは、ストレージ機能ぐらい

CalDAV, CardDAV を用いた同期(連携)については、Android, iOS の Nextcloud アプリを経由してやれるようだが、あくまで同期だけ。
Android, iOS の Nextcloud アプリが、直接カレンダー機能などのグループウェア機能を提供してるわけではない。

WebDAV に関連する機能は、レンタルサーバのプランに依存する

さくらインターネットの場合、レンタルサーバでも「マネージドサーバ」プラン(1台、丸ごとレンタルプラン)じゃないと、そもそも WebDAV 自体が使えない。

そして、それは WebDAV を使用した規格である CalDAV, CardDAV も使えないことを意味する。

カレンダーやメール閲覧機能について

Nextcloud システムは、アプリ(というかプラグイン?)機能として、カレンダーやメール、連絡先などの各種グループウェア機能を導入することができる。

しかしながら、機能面ではお世辞にも洗練されているとは言えない。
Nextcloud をビジネス上の統合環境として捉えるのであれば、選択するも良いとは思うが、その場合は、専用サーバを建てて運用するのが良いかと。

そして専用サーバを建てるぐらいであれば、Google Workspace(旧 G Suite)などのサービスを使ったほうが良い気がする、のだが?

それにレンタルサーバで Nextcloud を運用する場合、付加機能はそのままサーバ負荷になってしまう。
あくまでクラウドストレージとして割り切って、これらのアプリ導入は控えたほうが良いと思う。

外部ストレージ

たとえば、NextCloud のストレージから別サーバの領域を「外部ストレージ」として繋ぎ込むことが可能。
接続できるのは、Amazon S3 などの各種クラウドサービスのオブジェクトストレージや、FTP, SFTP で接続できるサーバ領域など。

ちなみに SMB/CIFS などにも接続できるが、今回はさくらのレンタルサーバに Nextcloud を設置したので、使えない(使わない)のではないかと。

自分の場合、いくつかの Web 領域として無駄に保有してる領域を FTP 接続して使ってみた。

「1つの外部ストレージの接続設定=1つのディレクトリ」として認識する

そのため、外部ストレージ配下の最大容量は、外部ストレージとして接続した先で個々に提供されている領域の上限になる。
接続先の領域サイズが極端に小さい場合は、その領域内に保存するファイルの容量に注意する必要がある。

あと、当たり前だが、ストレージ領域として合算された領域サイズとして、一連で使える訳でもない。

Web領域を繋ぎ込むことも可能だが、セキュリティに注意

ホームページ領域として提供された空間を FTP, SFTP で外部接続して有効利用すること自体は可能。
ただし、これらの領域は元々ホームページの領域として公開されている領域なので、外部接続先として繋ぎ込むディレクトリに対し、適切なアクセス制限を施さないと、ホームページの領域として丸見えになってしまうので、注意すること。

ちなみに ISP によっては、そもそもアクセス制限を施すことができない場合ホームページサービスもあるので、注意。
その場合、外部ストレージとしての使用は望ましくない。

遅い

ただでさえレンタルサーバ上の Nextcloud 本体への接続が遅い状況下で、さらに FTP 接続した先の外部ストレージを参照する以上、レスポンシブとは言い難い。
フォルダの同期という形で利用するのであれば、違和感を感じることはないかもだが、Nextcloud のWeb画面からテキスト等を直接参照・編集する場合には、かなり遅く感じる。
(たまに 500 エラーも発生する。)

Redmineと別サーバの git リポジトリを連携する

ここでは概念的な話のみ。
実際の設定方法等については、各自でググッてください。

あと、これは昔話です。Redmine のバージョンは若干古いです。
最新の Redmine や Git では状況が異なる可能性あり。

「Redmine や Git には余計な手を加えず、Redmine や Git の標準機能だけで連携を実現する方法を導き出したらこうなった」というお話です。

下調べ

もしかしたら最新の Redmine は、こんな面倒なことしなくても、標準機能だけで別サーバの Git リポジトリを直接参照できるかもしれない。
でも、自分が環境構築した当時、調べてみた限りではこんな状態だった。

プラグインでの連携

そのプラグイン自体が最新だか何だかよく判らなかったし、情報が少ないし、よくわかんなかった。
プラグインがメンテされる可能性も未知数。

トリッキーな方法で連携

Redmine のプログラムソース弄ってなんたらとか、ディレクトリをマウントしてどうたらとか。
文字通りトリッキーな方法すぎて、正直メンド臭そうだった。

制約

あと、命題を実現するうえでの制約が以下。

Redmine の制約

標準的なパッケージ(プラグインとか入れない状態)では、 Redmine と同一のサーバ上にある Git リポジトリとしか連携できない。

前述の通り、絶対にできないわけではない。
プラグインの利用とか色々細々と弄れば、異なるサーバ間でも連携できるかも知れない。
あくまで、Git と Redmine 本体が提供している標準的な機能だけで可能な設定では実現できないという話

当方の運用上の制約

Git リポジトリを管理しているサーバは、Redmine とは別のサーバ

Redmine 搭載のサーバと Git リポジトリを管理しているサーバは、それぞれ公開の場所も、管理上のポリシーも異なる。
そのため Redmine サーバを、Git リポジトリとして一緒して運用する(開発者などに公開して操作させる)ことができない。

でも Redmine は、システム開発の基幹。何とかしてこれらを連携させたい。

そこで出た妙案

Git リポジトリには hook(フック)機能がある。

これを使う。具体的には以下。

  • Git ベアリポジトリに push されたら
    1. ssh で Redmine サーバにログイン。
    2. Redmine サーバ側にある Git ノンベアリポジトリから、Git サーバのベアリポジトリの内容を fetch。

これによって、以下のメリット。

  • Git ベアリポジトリの管理は、Redmine と別サーバ。
  • でも Redmine サーバ自らの Git ノンベアリポジトリ(クローン)にも、その内容が常時同期される。
  • Redmine は、同一サーバ上の、同期された Git ノンベアリポジトリの内容と連携することで、あたかも Git リポジトリの本体と連携しているように見える。

余談

そんなの GitHub とか GitLab 使えば、Redmine とか要らなくね?

その通り。
GitHub, GitLab で世界が完結できている幸せな方々については、Redmine なんか必要ない。
ぜひともこの話はなかったことにしてほしい。

でも世の中 Redmine をポータルにして運用している組織は沢山いるような気がしたので、記事にした次第。

NVR500 の共有フォルダでハマったはなし

SMB の話です。

どうやら最近の Windows10 では SMBv2, SMBv3 で繋ぐみたいで。しかも SMBv3.1 つまり最新バージョン優先のようで。
SMBv1に至っては、設定しないと接続できない状況にまで成り下がったらしく。

調べてみると、SMBv1 はランサムウェアの餌食になったらしく、その影響で、Windows10 の途中で SMBv1 での接続が既定では無効にされたみたい。

その影響で、NVR500 の共有ディスクは参照できないのだと思い至ったので、以下のサイトなどを参考に SMBv1 で接続できるように設定してみた。

ところが

いくら設定をしても「¥¥xxxxxxxx~」ではネットワーク接続できない。
IPアドレスでもドメイン名を入力しても、だ。

でも windows7 環境で接続を試みたところ、あっさり繋がった(共有フォルダが参照できた)。

なので今度は試しに「ネットワークドライブの割り当て」で確認してみたところ、こちらも駄目。
ホスト名・IPアドレス、いずれの方法でもサーバが見つからない。

でも ping を打てば返ってくるし、そもそもルータからクライアントの IP アドレスは払い出されてる(ルータのDHCPサーバ機能は動いてる)し、そもそも Windows10 マシンからインターネットには繋がってる。ネットワーク的には問題ない。

ここまでやって気付いたのだが、もしかしたら認証まわりか、ポリシーまわりの設定がおそらく影響している可能性を疑っている。

断念

とまぁ、ここまで色々なことをやってきたのだが、これ以上を色々と調べて試すとなると、今度はレジストリとかポリシーまわりの設定まで弄る必要が出てきそう。

でも、それはそれで煩わしい(トリッキーだ)し、いよいよ本当にPC本体のセキュリティを危険に晒すリスクもありそうだし。
そもそもそこまでして、繋ぎ込むメリットもないだろう、という気分になってきた。

というわけで、ここで調査打ち切り。

有効活用の模索 ⇒ 断念

ここで方針を変えて、レガシーな共有ドライブを、ownCloud 経由でディスクとして利用できないかを検討してみた。

…とまぁ、ここまで図を作ってみたのだが、これも結局は断念することにした。

理由は以下。

そこまでしてSMBv1 しか使えない機材を、ずっと使い続ける必要はのか? メリットは?

この点に尽きる。

いくらネットワーク上のルールを厳格にしたとしても、今のご時世、ここまでしてわざわざトリッキーなネットワーク環境を構築するだけの、自身が納得できるメリットにはならなかった。

それにゴチャゴチャ難しい環境を構築したとしても、機材は老朽化する。
そんな機材を無理矢理使ったとして、「それが壊れたら」と思うと、今度は復旧そのものが難しくなってしまう可能性が高い。

それぐらいであれば、最新の機材を準備して快適な環境を手に入れたほうが、カネはかかるが、精神衛生上よろしい。
いや、たとえ今すぐに手に入れなくても、故障したときの事を考えて、スムーズにリプレースできるような環境を維持しておいたほうが良いのではないかと、考え至った次第。

気がついたら、機材・環境は老朽化

スマホなど端末の進化は著しいものがあるが、それはサーバとかネットワークも一緒。
いつの間にか(というか「あっ」と言う間に)機材はポンコツになり、ネットワークプロトコルなどの規約も進化してる。

そう考えると、ルータやサーバの類も、それらが作られた時代のものを頑なに利用するのは、セキュリティや故障のリスクを考えると、良い手段とは言えない。

先人の教えに「大事に使え」というような考え方もあるし、それが可能なものもある。
しかしながらモノによっては、長く使うことが、最終的に大きな不利益を被る危険性があることも、認識しておく必要がある。

とはいえ、カネかかるなぁ。(溜息)

余談1、DroboFS は何故か繋がってる。

ちなみに同じ状況(SMBv1 しか対応していないの)は、我が家で所有している DroboFS でも発生している、はず。

そころが、なぜかこちらは、SMBv1 で接続しているにも拘わらず、普通に参照できる。読み書きも正常。何故?

確かに DroboFS には、個々のユーザIDとパスワードを設定しており、フォルダ毎にそれぞれびアクセス権も設定している。
対して NVR500 には、元々、代表的なユーザIDとパスワードは設定できるものの、個々のユーザを設定することはできない。

その辺りの「違い」が今回の原因なのか?

余談2、リプレースを考えている。

色々と考えた結果。やはり SMBv3 に対応しているNASへのリプレースを考えている。
そうした場合 Synology などが割とリーズナブル、かつシェアも高そうなのだが、個人的なポリシーとして NETGEAR の ReadyNAS を採用するつもり。

ちなみに、我が家にはオンプレサーバが何台かあるので、これらの資源を有効活用すべく、フリーのNAS用OSとか ownCluod を利用することも検討した。ところが、色々調べてみて結果的に不採用。メーカーのサーバを利用したほうが安全そう。

不採用1:フリーのNAS用OS

FreeNAS など、いくつか代表的なOSが開発されているが、いかんせん「安定性に欠ける」というような記事が散見される。

確かに「どんなマシンでも動くようにする」ためには、それだけ「汎用的なプログラムが必要になる」のは当たり前。
それに対してメーカー製のNASは、製品に特化したOSを構成することになるし、それだけ「余計な部分」が削ぎ落とされている。
つまり、安定稼働の追求力が、フリーに比べて桁違い。

しかも最近は AWS (S3 ストレージ)などのクラウドを使ったバックアップの連携まで考えられているとなると、メーカー製NASは、その「手厚さ」も桁違い。

それにアプリケーションサーバのOSをフリーで選定するのとは訳が違う。
NASのOSは「ストレージデータ」というかなり大事な資産を管理している。
これを破損することは勿論の事、サーバそのものの安定稼働やバックアップにまで考慮すると以下略。

不採用2:フリーのオンラインストレージソフトウェア

要するに ownCloud の事。商用に例えると DropBox が近い。

こちらも検討したものの、やはり FreeNAS と同じで安定性やサポートに一抹の不安が残った。

それともう1点。

ownCloud 上で管理するファイルは、あくまでローカルファイルとの「同期による共有」となる。
つまり、原則としては、実体ファイルはローカルにも存在することになるため、ローカルディスクの容量を逼迫してしまう。

まぁ厳密にはクラウド(サーバ)上にのみデータを保存する形にして、必要に応じてデータをダウンロードする形での運用も可能だが、その場合は運用や設定に手間が生じることになる。

ちなみに「その1」:商用NASとしては、Drobo も採用候補だった

ところが、そもそもNAS製品については主力製品ではないようで、該当製品が2つしかない。
しかも米国サイトのサポートをページを見た限りでは、SMBv2 のサポートに留まっている(SMBv3 にまだ対応していない)模様だったのと、国内シェアやクラウド連携など機能面で弱そうだったので、今回は採用を見送った次第。

ちなみに「その2」:「個人的な理由」とは

こちらは「続きを読む」参照。

続きを読む

「@nifty @homepage」利用者だった人のための「@nifty ホームページサービス」について

【2021/05/10】
「標準モジュール」に関する記事について、認識の違いがあったので修正。

いつも「ホームページの仕様、どんなんだったっけ?」ってなるんで、備忘録。

経緯

元「@nifty @homepage」利用者は、「@nifty ホームページサービス」への移行案内の際、適切に手続きをしていれば、「@niftyホームページサービス(ミニ)」というプランで移行されている。

これは @nifty を2016年以前から契約利用し、かつ当時無料にて提供されていた「@nifty @homepage」を利用していた人向けの、言わば「救済」プラン。

プラン毎の違い

ちなみに「@nifty ホームページサービス」には、以下の3つのプランがある。

  • LaCoocan ライト(1G。CGIなど色々不可)
  • LaCoocan スタンダード(4G。CGI、DB利用可)
  • LaCoocan スタンダードプラス(10G。スタンダードの大容量版)

「ミニ」プランから「LaCookan スタンダード」「LaCookan スタンダード」のプランに変更することは可能。ただし変更後は、再度「ミニ」「ライト」プランに戻すことができない。

「@nifty ホームページサービス」既存の各種プランと違うところ

  • ディスク容量が2GB(ライトは1GB、スタンダード4GB、スタンダードプラス10GB)
  • CGI は Perl のみ利用可(ライトは利用不可)
  • CGI 定期実行が利用可(ライトは利用不可)

機能の違い

「@nifty ホームページサービス」への移行によって変わった機能

プライベートパック

アクセス制限機能(.htaccess、.htpasswd)による BASIC 認証に変わる(利用には再設定が必要)。

SSLも未提供。

URL

別物のサービスなので、URLも変わる。

FTP

サービス自体が別物扱いなので、すべて再設定が必要。
接続先ホスト名・アカウント名などが変更になる。

CGI

ホームページアドレスとCGI環境のアドレスが統合され、すべてホームページアドレス内で動作するようになった。
つまり cgi-bin ディレクトリがなくなり、すべて homepage ディレクトリ配下で、HTML ファイルと同じ場所にCGIの実行ファイルを設置し、そのファイルに実行権を与えれば動作するようになる。

「@niftyホームページサービス」では提供されなくなった機能

  • アクセスカウンター
    (自前CGIで実現可能。だが今時のコンテンツにおいてアクセスカウンターは流行らないし機能不足。解析用途であれば、Google Analytics などを導入するほうがよいと思う。)
  • サクサクかきあげ君
  • 簡単マイページ設定
  • 公開停止・再開機能(アクセス制限機能で代用可能)
  • 素材集(巷のWebコンテンツから拾えばよい)

「@nifty ホームページサービス」から提供される新機能

  • CGI 定期実行(LaCoocanライトを除く)
  • .htaccess(アクセス制限)
  • 独自ドメインの利用(ドメイン取得や維持は別料金)
  • カスタムエラーページ

LaCoocanスタンダード(プラス)にアップグレードすることで提供される新機能

  • sendmail
  • アクセスログ解析
  • 簡単インストーラー(WordPress などが導入可能、らしい)
  • データベース(MySQL、SQLite)

Perl(CGI)について

Perl 5 標準モジュールが一部欠けている

@homepage 時代と同じ。
ちなみに、perl 5.8.7(2021年3月時点)

ちなみに公式的には標準モジュールは提供しないとしているが、実際のところ、一部は利用可能。
しかしながら、例えば「DB_File」や「DateTime」モジュールが利用できない等、便利なモジュールが一部省かれている。
それに、今は使えているモジュールが今後使えなくなる可能性だってある。
なので、意味合いとしては標準モジュール提供は保証しないという形で捉えるのが妥当。

その影響により、ファイルアクセスだろうが、データアクセスだろうが、何をするにしても、原始的なレベルの作り込みが必要になる場合がある。

よって「@nifty ホームページサービス」における Perl は、かなり単純な機能のみを提供するようにしないと、開発・保守の両面からコストが発生することを念頭に置く必要あり。

自分の場合も、バックオフィスは別プロバイダで提供されている PHP と MySQL などで実装し、「@nifty ホームページサービス」はフロントエンドに徹し、Webコンテンツの稼働に必要なデータ類を、可能なかぎり構築してから転送している。

具体的には、バックオフィスにて tsv 形式のデータファイルなど、フロントエンド用のWebコンテンツ動作に必要なデータを構築・管理。
フロントエンド側では、バックエンド側からアップロードされたデータファイルなどを Perl を用いた CGI で動作させている程度に留めている。

ちなみに自分で必要な Perl モジュール(パッケージ・ライブラリなど)を設置することで「@nifty ホームページサービス」上で高度なWebコンテンツを構築することができる可能性はある。

ただ個人的には、今のご時世、小手先でゴチャゴチャ調整するのは時間がかかるし、ライブラリのアップデート時などの追従性やセキュリティ面も考えると不安。
もしそのようなコンテンツを実現したいのであれば、コスト面も踏まえると、もっと別の自由度の高いプロバイダーのサービスを使うと思う。

そもそも「@nifty ホームページサービス」が、いつまで CGI のサービス(というかホームページサービスそのもの)を提供してくれるかも不明。
(昨今ISPのホームページサービスは、契約者の利用率も右肩下がりなうえ、システムアップデートの追従やセキュリティなどの観点からコストに見合わず、提供終了されつつある。)

ここまで考えると、他のプロバイダーサービスを利用するほうが良いのではないかと。

use strict; use warnings; は役立たず。

とは言っても「外せ」という意味ではなく。

「@nifty ホームページサービス」は、(@homepage サービスの時代と同じく)ブラウザ上では全部500エラーが表示されるだけ。
また管理画面等からエラーログを確認するための手段もない。そのためエラーが発生しても、原因を掴むことは至難。

実際には、デバック文を挿入したり、変数を表示させるなどの手法で動作確認したり、ソース全体を、

eval {
  ...(CGIソース本体)...
};
if ($@) {
    print "Content-type: text/html\n\n";
    print "<title>error</title>\n";
    print "$@\n";
}

で囲い込んで、無理矢理エラーを表示させることも可能かもだが、正直微妙。

自分の場合はエラーを追跡するため「だけ」に、標準モジュールの存在しない開発・動作確認用のサーバを別途建てて、それから「@nifty ホームページサービス」にデプロイしています。

この環境を構築するのが一番面倒、という話もある。

【参考】使い道

これらサービスの制約下でも、当方では無駄なく使っている。
以下参考まで。

ちなみにいずれのコンテンツも、管理機能はWebプログラミングが可能な別サイトに構築。

期間限定の共有フォルダ

URLを知っていればアクセスできるようなファイルを置く場所。
期間超過のファイルは、「CGI定期実行」機能によって削除。

ただし前述の通りSSLが使えないため、盗聴されると可能性あり。そのため、そのリスクを負っても問題ないようなファイルしか扱えない。

画像アルバム

風景写真とか。素材写真とか。
こちらも当方(撮影・作成者)で権利関係の弊害がなさそうな画像を公開するために作った。

郵便番号⇒住所変換

文字通りのツール。
そもそも tsv 形式のデータの抽出速度がどれ位かかるのかを調べるため、実験的に作ったもの。
現実的な速度で提供できるように試行錯誤しながら提供中。

フォトアルバムを設置する

こちらの記事は、今後のシステム開発で経過に応じて、随時編集・追記します。

プロバイダーのホームページ領域を有効活用するため、フォトアルバムでも設置しようかと考えている。

まぁ「フリーのCGIとかプログラムを導入すれば、いいんじゃね」というレベルの、とてもありがちなシステムをつもりなんだが、それら「吊るし」のシステムだと、自分が契約している Web サーバ領域を有効利用するためには、仕様・環境などの条件がイマイチ合致しない。

特に問題となるのがこれ。

@nifty ホームページサービス ミニプラン

そう。
公開ページの設置を予定しているこのWeb領域が、曲者。
もともとは、老舗の「@nifty @homepege」の後継で、先代で提供されていた機能を、最低限継承した代物。

なので、Perl は使えたりするものの、5.8.7 と古かったりとか、一部の標準モジュールが使えなかったりする。
PHP も、このプランでは使えない。

別の記事でも書いたが、上位プランに変更することにより、PHP やデータベースが利用できるようになるのだが、料金や自由度を考えると、別会社のプランを検討する。

確かに巷の Perl CGI を探してきて、それを改造して無理矢理動かすというのも一案。
しかしながら、それだと楽しくないし、そもそも巷の Perl CGI も、かなり前に作られたものが多く、レガシーな作り物が多い。

そんなこんなの理由で、昨今のスタンダードな Web システムの実装とレガシーなサーバ環境の共存を研究する目的で、フルスクラッチしてみることにした。

システム構成

ありがちな「公開系」と「管理系」の2構成。

フロントエンド(公開系)

サーバは「@nifty ホームページサービス」
Web コンテンツは「Perl (CGI) + Vue.js (CDN)」で実装。

こちらは「見せるだけ」の機能に特化して、複雑な処理は走らせない。
というか、制限付き CGI (Perl 旧バージョン+標準モジュール一部欠け)をゴリゴリ開発する気は、更々ない。

Vue.js を利用するものの、フレームワークというよりは、結果セットのフィルタリングやソート時のエフェクト用途で利用する感じ。
ほぼ「受け身」のシステムなので、この程度の簡単な環境で構築。

バックオフィス(管理系)

サーバは「さくらの VPS」
Web コンテンツは「Laravel (PHP) + Vue.js(Laravel のUI として利用)」

こちらは管理機能を実装するため、Web システムとしてはガチ。
とはいえ、昨今の Web システムでは、割とスタンダードな環境。

ちなみに Laravel が Ver.5.x までであれば、Vue.js は内包されていたため、「さくらのレンタルサーバ」でも構築できた。

しかしながら Laravel Ver.6 以降、Vue.js はコマンドで追加インストールするようなスタイルになった。
しかもこのコマンド、中で npm を使用するのだが、この npm が「さくらのレンタルサーバ」がインストールされていない。

調べた限りでは「さくらのレンタルサーバ」に npm を力業でインストールするような猛者もいたようだが、当然ながらトリッキーなため、この時点で「さくらのレンタルサーバ」も採用外とし、「さくらのVPS」への実装とした。

個人的には、今後のシステム開発において「さくらのレンタルサーバ」は、パッケージ不足等で、いよいよ「使えない」という時代がやってきた事を感じてしまった瞬間であった。

公開系と管理系、「さくらの VPS」で構築すれば楽じゃね?

確かにそうなんだけども。
でも、元々「さくらの VPS」は、非公開系のサーバとして運用しているという個人的な事情と、公開系と管理系を同居させることによるセキュリティ面の配慮で分けた次第。
また「レガシーな Web 領域(=@nifty ホームページサービス)を有効利用する」という命題に応えるため、このような環境にした次第。

重要な考慮すべき部分

バックオフィス⇒フロントエンドの同期

データの追加・更新・削除の都度、キューを作成し、それを非同期バッチにて処理する事によってデータの内容をフロント側に反映することで同期する。

クラッシュ対策(バックアップ)

システム基盤(プログラムソース)については、別途バックアップする(というか、Git に保管しておく)のが前提。
ここで言うのは、データの話。

ちなみに、この Git リポジトリ。PostHook で別サーバに Fetch してるので、リポジトリ自体も複数保存している。

公開系

もともとデータはすべて「管理系」に保持していて、そこから抽出・アップロードされるため、クラッシュしても、データは「管理系」のほうから再度抽出することでリカバリ可能とする。

管理系

データについては、日毎のバックアップをバッチ処理し、バックアップサーバ(ストレージ)に転送する。

考えていること

データ連携

最初はこんな感じで考えていたのだが、もしかしたら Perl の簡易データベース(dbmopen など)が使える可能性があるので、利用可能であれば、その形式に寄せるつもり。

画像

閲覧用画像データには、コピーライトの埋め込みで、以下の候補を検討中。(TBD)

  • ウォーターマーク ⇒ ImageMagic で可能だが、簡単に消せる。
  • 電子透かし ⇒ できればこっちを考えている。
    ステガノグラフィーが主流だと思うけど、技術的に標準化されてないので、できれば標準的なのが使いたい。

CASIO KL-8500 の電池交換

当記事は、あくまで KL-8500 の話です。
他の機種・機器で同じ法則が通用するわけではないので、十分注意してください。
ソケット形状や端子の位置によっては、正しく動作しない可能性があります。

NAME LAND(ネームランド)のメモリ保護用電池の交換です。
ちなみに電池がなくても動作しますが、起動の都度、初期化を要求されたり、設定した書体選択がデフォルトに戻ったりと、色々と煩わしいです。

というわけで電池交換。ところが!!

CR2023 電池が売ってない!

実は Panasonic などの著名なメーカーは、CR2023 は終売してまして、ほぼ売ってないんですよ。
まぁ Google とかで探すと売っている店もあるんですが、さすが電池でメーカー終売してるし、電池そのものの使用期限(電池は使ってなくても劣化する)や海賊品(偽物)とかの存在を考えると、できれば通販で買いたくない。

代用品ないんだろうか?

結論

探した結果、以下の電池が代用できます。

  • CR2025
  • CR2032

実はコイン型リチウム電池にも「規格」がありまして、「C~」で始まるものであれば、公称電圧3V、「~R20~」が電池直径20.0mm、最後の2桁が高さ(電池の厚み)を現してます。

つまり、メーカー指定の CR2023 は、3V、直径20mm、厚さ2.3mmを現していて、互換性の候補は、

  • CR2025(3V、20.0mm、2.5mm)
  • CR2032(3V、20.0mm、3.2mm)

の2つが代表的選択となります。
そしてこの2つは特に問題なくソケットに挿入でき、稼働します。

ちなみに CR2016(3V、20.0mm、1.6mm)という薄型電池もありますが、こちら CR2023 よりも薄いため、電池がソケットの端子が上手く接触しない可能性があります。
実際に確認したわけではないのですが、選択しないほうが無難です。

もちろん CR2016 を2枚重ねとかは厳禁。
直列になってしまい電圧が6Vに倍増するため、最悪の場合、機器が壊れてしまいます。

対して CR2032 は、指定の CR2023 よりもかなり厚みがありますが、電池ソケットには挿入することができます。
ただし、いわゆるソケット内の「遊び」がなくなるため、次の交換時、ソケットからかなり外れにくくなります。その点覚悟してください。
自分はこれにハマってしまい、精密ドライバーで電池の表面をガリガリ傷つけながら、なんとか隙間に引っかけて取り外すことができました。

最も無難なのは CR2025。どうしても見つからないときは CR2032 を選択する、という感じですかね。

以上、あくまで延命の参考になればと思いますが、もともとメーカーサポートも切れた製品ではあるので、本体を買い換えるのが無難だと思います。

以下、余談

この機種、当時はパソコンと専用ケーブルでデータリンクできるオプションがありまして、パソコンで作成したラベルデータを直接印刷することができたのです。それが便利と思い購入しました。

しかしながら、本体のメーカーサポートが終了し、対応ソフトもサポート切れ(Windows xp までしか対応してない、バージョンアップ対応なし)となりました。
しかもデータリンクケーブルがRS-232Cだったりと、昨今のPC運用の中では使い勝手が悪くなってしまいました。

そのため長くお蔵入りしてましたが、テープカードリッジが大量残ってたのと、今回定型書式のラベルを複数印刷する必要が出てきたので、一時的に復活させて、データを直接入力して印刷することになりました。その過程で発生した出来事を記事にしてみました。

ちなみに今は、テプラに乗り換えてます。Wi-Fi対応で、プリンターとして認識できるタイプ。
ラベルプリンタも進化しました。

python2.x の csv.open() は、文字コードの対応が壊滅的

よくよく調べてみると、どうやら ASCII コード文字以外は対応していないらしい。

ということで、python3.x のインストールやり直し確定。

まぁ codec.open() 使って、あとで頑張ってパースするのもいいんですが、3.x 系で対応してるなら、わざわざ無駄な労力払わないくても、それ使えばいいじゃないですか。

どうりで、さくらのレンタルサーバだとpython 2.x系が標準で提供されてるのにもかかわらず、python 3.x 系をわざわざインストールしてる人と(いうか記事)が多いなぁと思ったら、こういうことだったのか。
2.x 系と 3.x 系の間には、文字コード関係をはじめ、かなり大きな進化点があるんですね。

なんだか 昔の Perl を思い出したよ。
jcode.pl, jcode.pm とか、懐かしいな。。。

VMWare ホストの Linux ゲストOSを、他の VMWare ホストに載せ替えた後に netconfigすると、eth0 のほかに eth1 ができてしまう

RHEL(RedHat Enterprise Linux) 5 での場合。他のブランドは知らん。

原因は、他の VMWare ホストに乗せ替えた時点で、MACアドレスが変わってしまい、それをnetconfigコマンドが「『NICが新規に刺された』と誤認識」(?)してしまうため。

以前の eth0 で設定していた情報が eth1 に移動し、移動先のVMWare ホストから割り当てられた MAC アドレスで、eth0 が作成されます。

そして、残った eth1 の情報は当然、前の VMWare ホストで稼働していた際のNICなので、このままにしておいても、何の役にも立ちません。
しかもそのままにしておくと、起動時に eth1 の情報を読み込んで、存在しないデバイスをOS内に格納されているNICデバイスドライバを総当りで探しに行ってしまいます。
その結果、起動が遅くなるうえ、起動時のメッセージがゴミだらけになります。

という訳で eth1 の情報は、残していてもあまり役に立たないので、削除するか、残しておくならば、何処かに移動してしまいましょう。

削除(移動)すべきファイルは、/etc/sysconfig/network-scripts/ の中にある ifcfg-eth1 というファイルです。