EC2でRocky Linuxのresolve.confが勝手に書き換わって鬱陶しい!

Rocky 9ですが、8も同じです。
/etc/resolv.conf書き換えたのに、rebootしたらあれ?勝手に書き換わってる。
DHCPで勝手にDNSの設定が変わるんだと思います。

面倒なので、こんな感じで設定を記載します。

/etc/NetworkManager/conf.d/disable-resolve.conf-managing.confを以下の内容で作成する。

/etc/resolv.confに本来あるべき内容を記載する。

これで書き換わらなくなったはず!

rebootしても書き換わらなければOK!

FortiSwitchの基本設定

FortiSwitchを初期段階でL2スイッチと同じレベルまで使えるようにしておこうと思います。

デフォルトのままでは、ハブとしても使えなかったので、最初にデフォルトのVLANを作成します。

Network→Interface→VLAN→add VLANで新規のVLANを作成します。

デフォルトVLAN作成

設定内容は概ねこんな感じです。
IP Configuration → IP/NetworkはFortiSwitchに割り当てるIPアドレスになります。

次に、ポートへVLANを適用します。

ポートへのVLAN割当て

今回は、VLAN IDを1として作成したので、デフォルトで設定が反映されています。
1以外のVLAN IDを使用した場合には、適宜ポートへVLAN IDを設定することになります。

後は、VLANを適当に作ってゲートウェイを設定すれば動いてくれそうです。

ここからは、余談になりますが、FortiLinkを設定すれば、FortiGateの画面から設定を行うことが出来る様になるのでしょう。

その設定は、また後日やってみたいと思います。

FortiSwitch初期化後のアクセス方法

FortiSwitch 448Eが発注から10ヶ月程掛かって、やっと届きました。
電子部品が不足している昨今とは言え、辛かったです。
発注後のキャンセルは基本的にダメということだったので、そこそこ厳しかったです。

FortiSwitch 448Eの設定を行おうと付属の英文マニュアルを片手に、接続を試みました。
英文マニュアルでは、IPアドレスだけが記載されていますが、頭にhttps://を付けてあげないと接続出来ません。

https://192.168.1.99/

初期状態でのID/PWは英文マニュアルに記載がある通りになっています。

ID : admin
PASSWORD : password

いきなりFortiLinkに接続したためか設定が上手く行きませんでした。

FortiLinkで一度FortiGateとFortiSwitchを接続してしまうと、FortiSwitch側のGUI管理画面やSSHでの接続が出来ませんでした。
これは、後の設定で解決されることを祈るのですが、何も設定せずにいきなりFortiLinkに接続すると痛い目をみたというかんじです。

仕方がないので、一度工場出荷状態に戻す方法を調べて、前面の小さな穴をクリップの先で押し続けてイニシャライズします。

さて、ここからが大変でした。

何と! ID/PWを正しく指定してもログイン出来ません!!

工場出荷状態とは、IDはadminのままなのですが、パスワードは無しになっています。

これが解らなくて、今時のPCからシリアル通信・・・ケーブルも無いしどうしようかと悩んでいたのですが、パスワード無しでログインすることで後の作業が元に戻りました。

以下のサイトを参考にさせて頂きました。
https://infosecmonkey.com/basic-fortiswitch-set-up/

ここを読んでいる人はほとんどいないと思いますが、ここにたどり着いた人は私と同じく苦労されているのだろうと思います。
日本語の情報がほとんどないので、ハードル高いですね。
がんばりましょう!

VMware Workstation Pro ディスク肥大化の対応

VMware Workstation Proで仮想マシンを使っているとディスクが肥大化していることがある。
VM内で確認するとそれ程ディスク容量を消費していないのに、ホスト側で確認するとアレこの容量なんじゃ?という感じです。

このような場合には、diskをshrinkすることでストレージ容量を削減することが可能です。

何故この様な状態が発生するかというと、ファイルシステムにおけるセクタの使い方にあるのではないかと想像されます。

イメージ的にはデフラグが発生していると、使っているない場所までディスク領域としてファイルに残されるのでしょう。
通常、ファイルの書き換えを行うと既存のデータを上書きするのではなく、空領域に更新データを書き込んでセクタを置き換えている動きをファイルシステムが行います。
その結果、空いた領域がそのままVMのディスク上に残った状態が発生しているのもと推察されます。

これをshrinkコマンドを使ってスリム化することが可能です。

では、実際に取り掛かります。

下準備

VMware Workstation Proのshrinkは、VM内で行います。
まずは確認を行うため、以下のコマンドを実行してみましょう。

通常、このコマンドを実行した際に得られる内容は各ディスクのリストです。
ここではLinux上で確認していますので、こんな感じでディスクの一覧が表示されます。

ただし、スナップショットを取っている場合などにはディスクの情報が得られず、以下のようなメッセージが表示されます。

shrinkを行う際には、スナップショットを全て削除する必要があります。
適宜、スナップショットを削除してから再度コマンドを実行してください。

ここまでが下準備です。

shrinkを行う

VMware Workstation ProのVM設定画面では、ストレージに対してデフラグ(Defragment Disk)や拡張(Expand Disk)や圧縮(Compact Disk)を行うことが出来ますが、未使用領域をクリアにしてスリム化するにはshrinkコマンドを実行することになります。

VMがファイルへの書き込みなどを頻繁に行っている状態では不整合が生じる場合もありえますので、できればバックアップを取るなども検討してみると良いでしょう。

その上で、以下コマンドを実行してshrinkを行います。

Linuxの場合、/bootは殆どの場合、元々の容量が少く書き換え頻度も少ないので影響は殆どありません。
容量が大きく書き換え頻度が多いディスクを対象にshrinkを行うことで、大きな効果が得られます。

また、仮想ディスクを1本で賄っている場合には、出来るだけ大きなディスクから順番に作業を行うことで作業時間を短縮できると思われます。

個々の環境によって異なりますが、ディスクの肥大化が進んだ状態では割り当てられているディスクの容量程度まで肥大化が進みます。
shrinkを実行すると、実際に使用しているディスク容量の約1.5倍程度の容量にスリム化してくれるでしょう。

今回実施した環境では、全体容量221GBに対し21GBまでスリム化出来ていましたので効果は絶大です!

ディスクの肥大化は時間経過に影響される傾向があります。

余談

ここで少し余談です。
これは想像の域を脱しませんが、こう考えると私の場合すっきりしました。

近年好まれて使用されているSSDは、書込み寿命があります。
書込み寿命の回数や容量については割愛しますが、ファイルを書き換える際、常に同じ領域を書き換えると同一記憶素子が劣化すると考えられます。
そのため、ディスク内の書き換えを行う際には、ディスク全体を満遍なく使用するために書き換える領域を全体に振り分けて少しでも寿命を長くしようとする動きを行います。

これに対して、VM上におけるディスクは物理的なディスクではなく、ファイルとして存在しておりファイルの容量が肥大化することに繋がると考えられます。

よって、書き換えが発生するVMのディスクは肥大化を回避することは出来ません。

将来的に、この仕組みは考慮されるべきであると考えられますが、現状では、この書き換えによるファイルの肥大化が発生しますので、システムによりその周期は異なるものの定期的なディスクメンテナンスを実施することで、実質的なストレージ容量の肥大化を防ぐ必要があるように考えられます。

クラウドシステムなどにおいて、この対策がどのように行われているかは、個々の仮想化環境に依ってことなり、VMwareによって構築されている環境であっても、shrinkなどを実施することが望まれることは無いと考えられますが、デフラグなどを無くすことでファイルアクセスの効率化や動作の安定を考慮する際には考えるべきポイントなのかも知れませんね。
とは言え、クラウドまで考えると厳しいので、まずは自分の環境で確認を行うことが望ましいかと思います。

Rock LinuxにGUIで使えるWiresharkをインストールする!

今更書く必要もないんですけどね。
「Rocky Linux Wireshark インストール」で調べると、yum -y install wiresharkって出てくるんですよ。

インストールしてみると、一向にメニューに「Wireshark」が出てこないわけですわ。

そうかと思ったら、こっちの方が多いんですけど、コンパイルするだのなんだの・・・

いや、そんな面倒なことしなくてもインストール出来たやん!!

これです。

Rocky Linux 9でデフォルトのPATH設定を行う。

パスの設定なんか自由にやればいいんですけどね。
.bashrcや.profileとかに書くのが一般的なんですかね?
ユーザ毎に独自のパスを設定する場合は、それで良いと思うのですが、サーバ全体で共通項目を設定する場合はユーザが作成される度に設定するのも面倒ですよね。

ということで、調べてもあまり記載が少なかったので、記載しておこうと思います。
※ある意味、自分用なので自分好みの設定ということをご了承ください。

ついでに、色々とある方法を記しておこうと思います

色々あるパスの設定場所

パス設定を共通化させたいと言いましても、色々と人それぞれに異なることを思い浮かべているかと思います。

・既にあるユーザの設定も含めて設定しよう
・これから作るユーザは全部統一
・一般ユーザが何をどこで設定されているのか分かるようにしておきたい。
・・・etc

で、大きく分けて2通り考えました。

①/etc/skelを活用する

こちらは、基本的に.bashrcや.bash_profileなどで設定を行うことになります。
既に存在するユーザには影響がなく、共通というよりは今後作成されるユーザに対し共通の設定を提供することになります。
将来的に編集が行われた場合、その編集結果は編集後に作成されるユーザにのみ提供されます。

よって、サーバ全体で環境変数の変更があった場合には、ここで対応を行う必要が生じます。

ユーザ毎の初期設定を共通化させたいという言い回しの方が適していますね。

②/etc/profileや/etc/bashrcで設定する

こちらの方法は、システムで共通の変更を行う際に有効です。
例えば、/etc/profileに環境変数を追加すると、そのタイミング以降にログインするユーザに対して環境変数が自動的に設定されます。

ここでは、/etc/profileにPATHを追加しようと思います。

2022年10月現在、私の使用しているRocky Linux 9では、以下のPATHが通っていませんでした。

・/sbin
・/usr/local/bin

なんでなんでしょうね?
CentOS 8をインストールした時には/sbinへのパスはデフォルトで通っていた様な気がするんですけどね。。。

まず、壊してしまうと後で大変なのでバックアップしておきます。

profileを編集します。
元の状態は以下になります。

変更後は以下になります。

これで終わりです。

開発するシステムで独自の設定を施す場合には、/etc/skelに.bashrcを作成するなどが良いと思いますが、今回の様に全体で共通化させるような場合には/etc/profileを検討するのも宜しいかと思います。

ベクトルタイルの作り方~メモ~

今更ですが、ベクトルタイルの作成方法について整理しておきます。
以前とやり方が違っているので、自分用メモです。

環境

OS:Rocky Linux 9
準備として必要なパッケージをインストールします。

適当な作業用ディレクトリを作成しそこへ移動します。
その後、以下のコマンドを実行して、必要なパッケージ類をインストールします。
足りないものは適宜追加してください。

ここからは、githubにインストール手順が記載されていますので、合わせて確認してください。
https://github.com/mapbox/tippecanoe#installation

次に、mvtを作成するためのプログラムソースであるtippecanoe(「ティペカヌー」と読むらしい)をgithubからダウンロードします。

gitコマンドで展開された作成されたtippecanoeディレクトリへ移動して、コンパイルとインストールを行います。
公式では、下記のmakeを行う際、「-j」オプションを指定してmakeの並列実行を指定していますが、私の試した環境では敢えて「-j」無しでmakeを行いました。理由については後述します。

makeの際にオプションで-jを指定するとコンパイルが速くなりますが、プアなマシンでやると固まってしまう場合があります。
また、オブジェクト作成時の依存関係が原因と思われるエラーが発生し、これもまた正常にコンパイル/リンクが出来ない場合があります。

今回、私の環境では、マシンが固まる現象が発生したため「-j」を外してmakeを実行しました。
時間は掛かりますが、正規の方法ですので問題はありません。

mvtを作成するにはそこそこのリソースを必要とするケースが多いと思われ、出来ればCPUやメモリなどのリソースに余裕がある環境で「-j」を付けてコンパイルをすることが望ましいです。

これで必要なパッケージとかはインストールされているのですが、パスを切っておかないとだめです。

Rocky 9 のデフォルト環境設定なのか、/usr/local/binへのパスが設定されていませんでした。必要な方は設定しておいてください。
ちなみに、デフォルト設定を変更したい人はこちらを参考にしてください。

mbtilesとpbfの作り方

mbtilesの作り方

-rg デフォルトでも構いませんが、データによって値を設定すると良さそうです。

pbfの作り方

コマンドは以下の通りです。

実際に、この方法で作成することは出来ますが、Mapbox GL JSではこの方法で作成したpbfは扱えないという記載が見受けられました。
tippecanoeは、pbfを作成する際にデフォルトで圧縮を行っている(後で重要になる)そうです。
そこで、圧縮を行わない設定を追加します。

① –no-tile-compression : 圧縮を行わない。
② –no-tile-compression :タイルが大きすぎる場合は、フィーチャ間の最小間隔を広げて 500K 未満に縮小しようとします。 検出された間隔は、ズーム レベル全体に適用されます。
③ –no-tile-size-limit : 作成するタイルサイズの制限を解除します。
④ -j ‘{“*”:[“all”,[“<“,”対象属性”,1000]]}’ :フィルタリング条件
⑤ -e output_dir :出力先ディレクトリ

なんか②と③が打ち消しあっている様な感じにも思えなくもないのですが、③は確実に機能している様でした。

④で対象となるフィーチャーをフィルタリングしています。
これを行わないと、ランダムにフィーチャーがドロップ(間引き)されます。

属性による対象地物の指定方法

-jオプションについて、もう少し説明します。
こんな感じで指定しています。

「*」 :対象のファイルを指定している。ここでは全てを意味します。
    対象ファイルを分けて条件を変更することも可能なのでしょう。
「all」:フィルター演算子。allは全ての条件を満たすことを意味する。
    他に、「in」「none」などがある。
「>=」:演算子の指定。
「比較対象」:フィーチャーの属性を指定。
「比較条件」が1000以上のデータを対象とする。

オプションの設定はたくさんあって理解するのが大変です。
気が向いたら、追記してみようと思います。

参考:https://github.com/mapbox/tippecanoe#cookbook

Web配信におけるデータ圧縮

先程の方法で作成したpbfファイルは、オプションを指定することで非圧縮ファイルになっています。
mapbox GL JSで扱う場合には、非圧縮が条件になるため仕方ありません。

でも、それは mapbox GL JSが扱う際に圧縮されていると不味いということで、通信中に圧縮されていることは特に関係ありません。

ということで、配信するサーバでApacheを利用している場合は、以下の方法を検討してみると良いでしょう。

Apacheの配信データを圧縮する。

/etc/httpd/conf.dに以下のファイルを作成する。

他にも必要に応じて設定を行う。
httpdの再起動もしくはリロードを行えばOK

Rocky Linux 8/9 に AWS S3をマウントする。

概要

Rock Linux 8で保存しているデータのバックアップを取るために、S3へデータ転送を行うことにしました。
マウントしてファイルの転送は可能です。
転送速度の問題が主になりますが、課題が無い訳ではありません。
取り敢えず、マウントしてファイル共有出来るという感じです。

手順リスト

  • Step-1:S3の準備
  • Step-2:ユーザ準備
  • Step-3:awscliのインストール
  • Step-4:goofysのインストール
  • Step-5:検証

Step-1:S3の準備

AWSのS3バケットを作成します。

バケット名とリージョンを指定して作成します。
その他の設定については、特に影響は無いみたいです。
当初、「このバケットのブロックパブリックアクセス設定」にある「パブリックアクセスをすべて ブロック」になっているので気になったのですが、ユーザのアクセス権限が優先されるらしく、設定次第で実質的にはパブリックでのアクセスも可能なのでしょう。(恐いなぁ~と思う人は、嘘だと思って試してみると良いでしょう。)

Step-2:ユーザ準備

S3へアクセスするためにIAMでユーザを登録します。
既存のユーザでも構いません。
ユーザに対し以下を設定します。

アクセス権限:AmazonS3FullAccess
アクセス権限タブ→アクセス権限の追加でAmazonS3FullAccessを追加します。

認証情報タブ→アクセスキーの作成でアクセスキーを新規に作成します。
アクセスキーIDとシークレットアクセスキーが発行されます。
シークレットアクセスキーは、このタイミングだけしか表示することが出来ませんので大切に保管してください。
CSVファイルとしてダウンロードすることも可能なので、ダウンロードしておいても良いでしょう。

Step-3:awscliのインストール

多分、CentOS 8/Rocky Linux 8から有効だと思いますが、以下の方法でawscliをインストールします。

これで行けるかと思ったのですが、タイミング悪くRocky 9ではdnfでインストールが出来ませんでした。
Pythonで対象モジュールのインストールが必要となるのですが、インストールしてもダメでした。単純なバグですが。。。面倒なので直接インストールする場合は下記を参考にインストールします。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html#getting-started-install-instructions

インストールの確認は以下のコマンドです。

awscliのインストールが完了したら、先に作成したS3へアクセスするための初期設定を行います。

AWSへのアクセスIDとシークレットキーを指定します。
出力フォーマットはjson形式を指定します。
出力形式を指定しないと、この後の動作が上手く動作しません。

Step-4:goofysのインストール

まずは、golangとfuseをインストールします。

次にgoofysをインストールするのですが、最新版は以下でインストールすることが出来ます。

以下のコマンドでインストール出来たことを確認します。

Step-5:マウントする。

まずはマウントポイントを作成します。

これで準備は完了です。

実際にマウントしてみます。
コマンド形式はmountコマンドと同じですね。

課題

/etc/fstabへ静的マウントの方法が分かっていません。
出来そうなんだけど、検証中です。
TBD

ApacheでCGI設定を追加する。対象は、PythonとPHPだけど応用すればなんでもOK!

AWS上でRocky LinuxにApacheを入れて設定しようとしていたのですが、なんかいつもの設定と違うので設定を行いました。
毎回やるのが面倒なんですけど、記録が無いとまた忘れるので備忘録です。
とか言いながら、実際下手なサイトの内容を参考にしたら結局ダメダメで、自分のサイトの過去記事を参考にしたら出来た!ということで、再度記録し直そうと思ったわけです(^^ゞ

対象と目的

今回の対象は以下の通りです。

OS:Rocky Linux 9(あんまりOSバージョンは関係ないけど)
Apache:2.4.51(これもあんまり関係ないけど)

目的は、/var/www/html/の下でCGIが付けるようにしてしまいたいということです。
その際、PHPとかPythonもCGIとして使えるようにしてしまいたい。

Apacheの設定

Apacheの設定を追加します。
元ファイルを弄る方が良いのかも知れませんが、記録も残しておきたいなぁ~という後のことを考えた不精な考えですが、今回は設定ファイルを追加することにしました。

取り敢えず、設定ファイルを新規で作成していきます。

ファイルに以下の内容を記載します。

これだけです。
ちなみに、FollowSymLinksもついでに突っ込んでおきました。

念のため、シンタックスを確認します。

Apacheを再起動します。

これで設定は反映されました。

コマンドによるSELinux対応の設定

当然、SELinuxを切るなんて真似は致しません!
面倒ではありますが、余程のことが無い限りSELinuxを切ることは避けています。セキュリティ確保するためなんです。

対象ディレクトリに対し、コンテキストを追加します。

以上です。

意外と簡単なんですけど、滅多にやらないことなので忘れてググるわけですわ。

そして、どこかのサイトの記載ミスやら間違った設定を叩いて「動かねぇ~( ゚Д゚)」って叫ぶわけよ。

で、自分でやって記録しておくと、いつかまた自分のサイトの記録がググったら出てくるんよ(^^♪

アフィリは全然儲かっていませんが、自分で書いたサイト記事は意外と役に立ってます。
備忘録万歳\(^o^)/

GeoServerにVector Tile Extensionをインストールします。

前回インストールしたGeoServerに、Vector Tile ExtensionをインストールしてVector Tileに対応させようと思います。

※全部英語で探すのが面倒なので、メモを残しているだけです。

GeoServerのバージョンを確認する。

GeoServerのバージョンを確認します。

メニューから「GeoServerについて」をクリックします。

こんな感じで表示されます。
「バージョン 2.22-SNAPSHOT」と表示されているのが判るかと思います。
ということで、この環境は2.22なんですね。
まあ、確認方法って普通にこれなんですけどね。
初めてだと気が付かないんですよね(^^ゞ

Vector Tile Extensionを追加

プラグインですね。
ダウンロードします。

下記URLからバージョンなどを元に探します。

https://build.geoserver.org/geoserver/

私の目的とする対象は下記にありました。
https://build.geoserver.org/geoserver/main/ext-latest/

ここで、「geoserver-2.22-SNAPSHOT-vectortiles-plugin.zip」をダウンロードします。

解凍して、以下のフォルダへインストールします。
/usr/share/geoserver/webapps/geoserver/WEB-INF/lib

ということがこちらに書かれています。

https://docs.geoserver.org/latest/en/user/extensions/vectortiles/install.html

GeoServerを再起動したら、Extensionが有効になっています。

再度ログインし直すことになりますが、これで終わりです。

他にもExtensionがたくさんあるみたいです。

https://docs.geoserver.org/latest/en/user/extensions/index.html

面白そうなのがあったら適当にインストールしてみると良さそうですね。

確認方法ですが。。。。
Data→Layers→<適当なレイヤ>→Tile Cachingを開いてみると、Tile cache configurationのThe Image Formatsに以下が追加されています。

これで確認になります。