isLandcenter 非番中

ブログトップ | ログイン

タグ:システム管理 ( 122 ) タグの人気記事

openSUSE 15.1 に入れた zabbix5 で、インターネットの疎通、サービス状態の確認をする方法です。

この春先から、どうもインターネット接続が遅かったり、切れたりする症状に悩まされています。その都度、google なんかに ping して、レスポンスを確認してたのですが、メンドクサイ。何しろ「リモートワーク」の時代。地方拠点から本社への出張なども憚れると、どうしても気になるのはインターネットトラフィックです。

その後の新型コロナウイルスのフレッツトラフィックへの影響


という事で openSUSE Leap 15.1 で動いている zabbix5 に、外部サービスの死活監視、ping の応答時間などをチェックさせてみました。

対象は

- Google などの海外の大手
- Google DNS の様な巨大インフラへの Ping 監視
- 契約先の経路の短い Web サイトの HTTP 監視
- 契約先の経路の短い NTP サーバーへの Ping 監視

などを、可視化できないものか試してみました。



- Zabbix5 で HTTP サービスと PINGの監視 -

左のメニューから、Configuration > Hosts > リストが出てきたら、 Create Host
zabbix5 でインターネットの疎通、監視、リモートワーク時代の「ネットが遅い」をチェック_a0056607_12213034.png

Host Name と group はとりあえず Google で Linux Servers、Interfacesは Zabbix Agent を remove して とりあえず IMPI、ホストのDNSを設定して Port は443 をセットして "Add" ボタンを押します。この辺りは適当でかまわないかも.....

次に左上の"Template" メニューを開きます。

zabbix5 でインターネットの疎通、監視、リモートワーク時代の「ネットが遅い」をチェック_a0056607_12215508.png

Link new templates から "select" ボタンで”Linux Server” > Template App http や https サービスをチェックします。

zabbix5 でインターネットの疎通、監視、リモートワーク時代の「ネットが遅い」をチェック_a0056607_12223668.png

ping もチェックしたいのなら Template ICMP Ping もチェックします。

zabbix5 でインターネットの疎通、監視、リモートワーク時代の「ネットが遅い」をチェック_a0056607_12230824.png


最後に "Add" ボタンを押します。

Hosts の上にある Applications, Items, Triggers を、それぞれ Enable ボタンを押して監視を開始しました。

zabbix5 でインターネットの疎通、監視、リモートワーク時代の「ネットが遅い」をチェック_a0056607_12233447.png

幾つかの HTTP サービスが Down State で見えない時があるのが分かります。

zabbix5 でインターネットの疎通、監視、リモートワーク時代の「ネットが遅い」をチェック_a0056607_12240321.png

サービスがアップしているかどうかは。1と0の値で評価されるので、グラフがV字化している時は繋がりにくかったことが分かります。

zabbix5 でインターネットの疎通、監視、リモートワーク時代の「ネットが遅い」をチェック_a0056607_12242658.png

ダウンしていた事が報告されていますね。

zabbix5 でインターネットの疎通、監視、リモートワーク時代の「ネットが遅い」をチェック_a0056607_12245202.png

Yahoo.co.jp と Google.com の状態です。ダウンしている時間帯がほぼリンクしているので、海外との通信より、ウチと契約先の ISP、あるいは契約回線の問題だと判ります。

zabbix5 でインターネットの疎通、監視、リモートワーク時代の「ネットが遅い」をチェック_a0056607_12252509.png
GoogleDNS と、契約先の ntp.bbtec.net (経路的には一番近いかな)を ping して値をみてみます。まず Ping 応答が無くなり、結果 HTTP サービスも動かないという事です。


拡大しました。全体的に google のサービスより Yahoo BB の ping 応答が遅い様な感じですね。Avarage も、Google DNS より ntp.bbtec.net の方がレスポンスが悪い様です。海外との回線よりISP内部の遅延がある様です。

zabbix5 でインターネットの疎通、監視、リモートワーク時代の「ネットが遅い」をチェック_a0056607_12260847.png

朝の3時は iOS のアップデートが始まります。このタイミングでも google のレスポンスは見事に遅延しています。

zabbix5 でインターネットの疎通、監視、リモートワーク時代の「ネットが遅い」をチェック_a0056607_12271394.png

ダメじゃん、ウチの契約回線が悪いのだ..... と判断しています。

SoftBank Air の様な容量無制限モバイル Wifi でも、共有 IP (シェアドIP)なので、グローバルIPが切り替わる都度に、遅延や切断は起こりそうです。まぁ、モバイル Wifi では明示的に速度制限の対象となる場合もあるので「ビデオ会議」などのライブストリーミングが制限されない事を確認すべきでしょう。

Softbank Air: Wifi ネットワークの暗い闇、シェアード IP


--
今回は外部の ICMP Ping とHTTP サービスを Zabbix5 でトレンドを見てみました。今までの Zabbix4 までのグラフ機能では、複数のデバイスのトレンドが見れなかったので、良くなったと思います。

例えばオンラインミーティングが始まる午前9時とか、午後13時とかにハッキリ遅延が起こるのであれば、これは、コロナ騒動でのリモートワークの影響だとキッパリ言えそうなんですが、冒頭の IIJ のブログにもあるように、リモートワークの影響ではなさそう。やっぱりウチの Yahoo BB のプアな回線状況が原因と考えられます。

さて、プアな自宅回線の強化、月々の利用料金はどう会社負担になるのでしょう、今後のリモートワークの課題ですね。

応用として、例えば支店に設置したインターネットVPNルータや管理用 HTTP などのサービスの状態のチェック。自社の提供するサービスの死活管理などに利用できます。Pingの応答速度は、折れ線グラフ化できるので、昼間と夜間の違いはないかを可視化できます。

拠点間ルータの snmp 管理機能や、リモート拠点間のサービス状況を調べる事で、拠点の「ネットが遅い」問題の原因を検討する事もやってみる事です。明かに、ISPのサービスレベルの問題であると判断できる要因が長期のトレンドで見つかるなら、契約ISPを変える為の稟議書を書く根拠にもなります。

Zabbix のように応用力の高いツールがあれば、「その時」ではなく、たとえ数時間でもトレンドが見える事はよいことです。








by islandcenter | 2020-05-31 13:27 | SUSE | Comments(0)

Windows10 タブレットは、もう終わった技術なのです


- インターネット端末の Microsoft のシェアは30%を切っている? -

いうまでもなく Windows はPC分野の80数%のシェアがあり。10数%が Apple 残りが Linux という事は、いろいろなリサーチにある訳ですよ。

じゃぁ、インターネットのサービスを受ける、あらゆるデバイスの何パーセントが Windows なのか。スマートフォン、タブレットを含めれば、恐らく50%もないんじゃないでしょうか。多分スマートフォンが過半数なので、実際の「インターネットにおける Windows のシェア」はPCだけで3割もあればいいほうでしょうね。

PR


- 高価すぎて重すぎ -

Windows10 で最低限欲しいと思うスペックを考えると Core i3m とか i3yと言った Core 3 系のモバイル向けCPU が欲しくなるところです。ディスコンになった Atom 系SoCでは人を馬鹿にしている。正統派 Celeron でやっと使える感じがします。

Windows Update を問題なくこなせて、安定して使うには、最低64Gbのストレージが欲しい。しかし、「Window が動くタブレット」として考えるなら、256Gbのストレージが欲しくなってしまうでしょう。
そう考えると、自動的に12~3万円程度は最低限予算が必要なんですよね。

しかし意外と Core i3 系のCPUは人気がない。というかメーカーもこのクラスより、より高価な Core i5/7 系を売りたがる。こうなると安くても15万円コースですね。

キーボードもマウスもない Windows に15万円も普通払いません。しかし、「Windows デバイスを快適に使う」なら、オプションのキーボードとマウス、あるいはデジタイザペンは必須です。

それなら普通のクラムシェルか 2 in 1 ラップトップを私なら選びます。

2Gbのメインメモリ、32Gbのストレージ、Atom系 SoC では、「一応 Windows が動くタブレット」でしかなく、実際に使い物になるとは思えません。それでもWindowsがとりあえず動く環境にするには5万円前後するわけで、この値段で Android や iPad などの他社製タブレットならすコスコつかえるわけですよ。


- 処理が重すぎ -

大体、 Windows はフットプリントが重すぎて、タブレットには向かないぞ、という事だ。

GIGAスクール構想の実現について

1人1台のPCで教育のICT化を推進――日本マイクロソフトが「GIGAスクールパッケージ」を提供開始

Google、管理などの無駄な時間を減らし4万5千円以下で提供可能な「Google GIGA School Package」を開始

この勝負、どうみても Google に分があるんだが、どんなものでしょう。GIGA スクールパッケージに Windows は勝ち目がない。3万円の Android や Chrome タブレットを子供の Youtube 端末として使わせている親が、わざわざその倍の値段もして、華奢で壊れやすく安っぽい筐体の7万円の Windows タブレットを買うわけにはいかない。

私が、中高で「情報C(情報社会)」を教える立場だったら、間違えなく Windows10 タブレットは「アウトオブ眼中」です。Chrome Book で安く済ませて、余った予算を別に使う事を考えるでしょう。




マイクロソフト Surface Pro 6
[サーフェス プロ 6 ノートパソコン]
Office Home and Business 2019 
 Windows 10 Home





iPad mini Wi-Fi 64GB
 (最新モデル)





HUAWEI MediaPad M5 lite 8
 タブレット 8.0インチ
 Wi-Fiモデル




- 最悪の Windows Update -

スリープ解除して、通信が開始されるといきなり始まる Windows アップデート、いざ使おうとすると半日は使えないモバイルデバイス。それが Windows10 タブレットの宿命。

毎月のアップデートだけで、格安SIM二月分のパケット料金と貴重な時間を使いたくない

そんなものに普通15マン近い大金払いませんって。よっぽど Apple の iPad がひどくてもこんなにひどくはない。それにもっとシンプルで堅牢なハードウェアだし、軽くて高性能、高機能なのです。4万円も出せば普通に使えるし、128Gb程度のストレージがあれば、スチルカメラやビデオカメラ並みに使える。

それに iOS や Android, Chrome タブレットは機能を絞っただけシンプルで長時間のモバイル運用ができる。

- Windows だから求められるデスクトップアプリという呪縛 -

街を歩いていて、ちょっと調べ事をしたいと思えば、スマートフォンより小型のタブレットは実にいい選択なのです。

だけどそれが Windows タブレットとなれば、たとえタブレットと言えども、そこに "Windows らしさ" を求めるユーザ需要があるのですね。たとえタブレットであろうとも Microsoft Office が使えないと嫌だという、ユーザの奇妙なわがままを満たす必要があります。 Office アプリが必要であれば、当然マウスとキーボードもいるよね。

「いざという時 MS Office が使える」という事は、その「いざと言う時」のために普段使わないキーボードもカバンに入れておく必要があるわけです。そして充電用のアダプタとケーブル。

もう、 Windows10 なんて、一般家庭では「年賀状の印刷に年に一度使う」ためにある、というのが実態じゃないでしょうか。

- 銀行取引、金融機関では蚊帳の外 Windows 10は信頼されていない -

最近の銀行取引では、大体 iOS か Android のタブレットで最適化されたアプリケーションが頒布されていまして、もし Windows タブレットで、銀行振り込みしようと思ったら、別に iOS か Android が必要と言う矛盾、無駄。そもそも、銀行振り込み用のアプリがない、どころかワンタイムパスワードアプリもない。携帯電話必須という不自然さ。

ちなみに、 Windows ストアから片っ端に、大手都市銀行の名前を入れて調べると良い。一体、どこの預金者が、Windows OS を信頼しているんだろうってくらいに、ストアアプリは、銀行から嫌われています。頼むから Windows 端末から、預貯金の操作してくれるな、という位の総スカン状態なのですね。

Windows PCのブラウザ経由で決算してくれるなって位の嫌われようなのです。専用の exe アプリケーションすら配布されない。 Windows は金融機関から唾棄され嫌われているのです。

- モバイルOSから撤退した Microsoft -

ご存知の通り、 Windows Mobile はディスコンになり、既にサポートも終わっているわけで、 Microsoft としては、「マイクロソフト部屋に最後に残った幕内力士:Windows10」 をモバイルデバイスの切り札に残しているわけです。徳俵にかろうじて親指が残った崖っぷち張り出し大関、小錦みたいな状態。とてもじゃないけど、こんな危なっかしいOSを、フットプリントの小さな x86 環境にインストールして使う事自体、燃えないゴミにお金を投資するようなもの。

Windows10 タブレットは、もはや大相撲の中日に全廃している張り出し大関のようなものです。とてもじゃないけど、私は「Windows10 タブレット」には、「引退という引導」を渡すべきだとおもいます。



- Intel はブランドを整理すべきだ -

これほど、顧客が混乱しているのは Intel のブランド戦略が破綻しているからなのですね。もっとブランドを整理すべきです。「Celeron に名前を変えた Atom」 があったり、ほとんど使われない Pentium があったり、低スペック、低電圧版の Core i3/i3m/i3y なんてモデルがあるのはいかがかと思います。

その未整理な Intel のブランディング戦略にただ乗りしている、タブレットベンダーも責任を取るべきでしょう。

「2コア4スレッド搭載タブレット」とか言っても、中途半端な Atom 系 Celeron だったりするわけで、ほとんど消費者騙しです。2コア4スレッド搭載「パーソナルコンピュータ」であれば、最低でも Core i3 程度を想像するのですが、よーく仕様を見ると Celeron でしかも Atom 系コアだったりします。

Nxxxxx Celeron というNで始まる Celeron は、バチモノ系だそうです。

つまり、もう生産中止になって在庫がごっちょりある Atom 系 CPU の悪く言えば生産余剰した、リマーク品なのですね。 これを消費者に 「Atom とは別物」と言う、リ・ブランドして売りさばくのが Intel の今のやり方なのです。Celerorn 選ぶくらいなら AMD の Ryzen 系、モバイル SoC 選んだ方がよっぽどウソがない気がします。


- 使えない Windows タブレットの使い道 -

それでも Windows10 タブレットのニーズは根強くあるでしょう。それは「組み込み用途」です。こないだガス屋の端末見たら、Windows タブレットでした。 Windows 7 だったけど。

しかし、企業でこういった外勤者に何百台と使わせるとなると、コスト、持ち運びの容易さ、堅牢性、電池の持ち、アプリケーション開発の容易さなどを考慮すると、別に、保険のオバちゃんが Windows タブレットを使わなければならない必然性はありません。ブラウザ経由のアプリケーションであれば、別に何でもいいんです。

- まとめ -

ということで、Windows10 タブレットの将来性のなさ、致命的な欠点、わざわざ選ぶ理由がない事などをズラズラとまとめてみました。

それでも Windows10 タブレット買いますか? それとも Android や Chrome, あるいはPC化する iOS 搭載 iPad ? もうタブレット戦争では、ほとんど Windows 10タブは「アウトオブ眼中」、タブレットOSシェアのパイチャートでは「その他」に分類されるようになるでしょう。







by islandcenter | 2020-04-08 14:58 | Windows | Comments(0)

- はじめに -

久しぶりに SUSE 11 の仮想マシンを起動したら、見事にコケました、仕方がないので、 fsck して起動しましたが、あまりいいものじゃありません。


SUSE Linux Enterprise 12 から採用され、以降 SUSE Linux 15(SLE/openSUSE15) で openSUSE Leap で使われている BtrFS は、やれ「修復のため起動時の fsck の必要がない」とか、fsck しないので起動が速いとか、起動中にファイルシステムのチェックができるとか、いいことばかり書かれています。実際、この記事を書く時にたどり着いた情報は「BtrFS にクソハマった話」ばかりなのですが、それほど情報が少ないのはやはり安心して使えるファイルシステムだからでしょう。

現実には、論理障害よりも、物理障害もあるわけですから、

「困った!」

時のために、BtrFS の、修復だとかチェック、メンテナンス、スナップショットの設定の方法について、ちゃんと勉強しておくことにします。

- 参考にしたドキュメント -

SDB:BTRFS


- btrfs の修復 -

btrfs scrub start [mount_point]

パーティションの論理障害を修復します。

opesuse151:~ # btrfs scrub start /
scrub started on /, fsid 8466aee4-2738-4b0a-924a-79edad4b4676 (pid=23058)
opesuse151:~ #

- 前回 scrub した結果の確認 -

brtfs scrub status [mount_point]

scrub した結果を確認します。

opesuse151:~ # btrfs scrub status /
scrub status for 8466aee4-2738-4b0a-924a-79edad4b4676
scrub started at Wed Feb 26 14:05:43 2020 and finished after 00:01:50
total bytes scrubbed: 7.54GiB with 0 errors
opesuse151:~ #

-dR オプションを付けると詳細な情報が分かります。

opesuse151:~ # btrfs scrub status -dR /
scrub status for 8466aee4-2738-4b0a-924a-79edad4b4676
scrub device /dev/vda2 (id 1) history
scrub started at Wed Feb 26 14:05:43 2020 and finished after 00:01:50
data_extents_scrubbed: 247304
tree_extents_scrubbed: 31902
data_bytes_scrubbed: 7577907200
tree_bytes_scrubbed: 522682368
read_errors: 0
csum_errors: 0
verify_errors: 0
no_csum: 5030
csum_discards: 0
super_errors: 0
malloc_errors: 0
uncorrectable_errors: 0
unverified_errors: 0
corrected_errors: 0
last_physical: 11178868736
opesuse151:~ #

- btrfs のファイルシステムのチェック -

btrfs check [/dev/partition]

ファイルシステムのパーティションチェックです。

※ --force を付けるとマウント中のファイルシステムをチェックできる。

opesuse151:~ # btrfs check --force /dev/vda2
Opening filesystem to check...
WARNING: filesystem mounted, continuing because of --force
Checking filesystem on /dev/vda2
UUID: 8466aee4-2738-4b0a-924a-79edad4b4676
[1/7] checking root items
[2/7] checking extents
[3/7] checking free space cache
[4/7] checking fs roots
[5/7] checking only csums items (without verifying data)
[6/7] checking root refs
[7/7] checking quota groups skipped (not enabled on this FS)
found 7839363072 bytes used, no error found
total csum bytes: 7380260
total tree bytes: 261373952
total fs tree bytes: 238518272
total extent tree bytes: 13942784
btree space waste bytes: 41699539
file data blocks allocated: 7779311616
referenced 7561506816
opesuse151:~ #

- btrfs での df (利用量)の確認 -

btrfs filesystem df [mount_point]

従来の df コマンドの代わりになるものです。

opesuse151:~ # btrfs filesystem df /
Data, single: total=8.01GiB, used=7.06GiB
System, DUP: total=32.00MiB, used=16.00KiB
Metadata, DUP: total=1.12GiB, used=249.25MiB
GlobalReserve, single: total=21.73MiB, used=0.00B
opesuse151:~ #

btrfs filesystem usage [mount_point]

opesuse151:~ # btrfs filesystem usage /
Overall:
Device size: 14.00GiB
Device allocated: 10.32GiB
Device unallocated: 3.68GiB
Device missing: 0.00B
Used: 7.54GiB
Free (estimated): 4.63GiB (min: 2.79GiB)
Data ratio: 1.00
Metadata ratio: 2.00
Global reserve: 21.73MiB (used: 0.00B)

Data,single: Size:8.01GiB, Used:7.06GiB
/dev/vda2 8.01GiB

Metadata,DUP: Size:1.12GiB, Used:249.25MiB
/dev/vda2 2.25GiB

System,DUP: Size:32.00MiB, Used:16.00KiB
/dev/vda2 64.00MiB

Unallocated:
/dev/vda2 3.68GiB
opesuse151:~ #

- デフォルトのメンテナンスは一週間ごと -

sysconfig の File systems の中に、自動メンテナンスの間隔を設定します。

"BTRFS_BALANCE_PERIOD" のキーに設定されます。デフォルトは weekly となっています。

SDB:Disable btrfsmaintenance

weekly から none にすると、無効となります。

SUSE Linux 15 BtrFS のファイルシステム自動修復、チェック、スナップショット_a0056607_13465207.png

- snappper の初期設定 -

snapper は初期設定では無効です。snapper コマンドでスナップショットを初期化します。

snapper -c create [YourSnapSotName] create-config [PathToYouNeedSpapShot]

ここではルートパーティション全体を取っていますが、例えば DB ファイルがあるところとか、 /srv/www/htdocs などを指定します。設定ファイルは /etc/snapper/configs/ の下に作られます。

opesuse151:~ # snapper -c mysnapconfig create-config /
opesuse151:~ #
opesuse151:~ # ls /etc/snapper/configs -l
total 4
-rw-r----- 1 root root 1169 Feb 27 10:37 mysnapconfig
opesuse151:~ #
opesuse151:~ # cat /etc/snapper/configs/mysnapconfig


# subvolume to snapshot
SUBVOLUME="/"

# filesystem type
FSTYPE="btrfs"


# btrfs qgroup for space aware cleanup algorithms
QGROUP=""


# fraction of the filesystems space the snapshots may use
SPACE_LIMIT="0.5"

# fraction of the filesystems space that should be free
FREE_LIMIT="0.2"


# users and groups allowed to work with config
ALLOW_USERS=""
ALLOW_GROUPS=""

# sync users and groups from ALLOW_USERS and ALLOW_GROUPS to .snapshots
# directory
SYNC_ACL="no"


# start comparing pre- and post-snapshot in background after creating
# post-snapshot
BACKGROUND_COMPARISON="yes"


# run daily number cleanup
NUMBER_CLEANUP="yes"

# limit for number cleanup
NUMBER_MIN_AGE="1800"
NUMBER_LIMIT="50"
NUMBER_LIMIT_IMPORTANT="10"


# create hourly snapshots
TIMELINE_CREATE="yes"

# cleanup hourly snapshots after some time
TIMELINE_CLEANUP="yes"

# limits for timeline cleanup
TIMELINE_MIN_AGE="1800"
TIMELINE_LIMIT_HOURLY="10"
TIMELINE_LIMIT_DAILY="10"
TIMELINE_LIMIT_WEEKLY="0"
TIMELINE_LIMIT_MONTHLY="10"
TIMELINE_LIMIT_YEARLY="10"


# cleanup empty pre-post-pairs
EMPTY_PRE_POST_CLEANUP="yes"

# limits for empty pre-post-pair cleanup
EMPTY_PRE_POST_MIN_AGE="1800"

詳細はこちらをご参考下さい。

4 Snapperによるスナップショットとロールバック

SLES12 の Snapper のチューニング

- snapper のスナップショットの設定 -

snapper を起動したら、YaST2 snapper で、スナップショットの設定をします。

opesuse151:~ # yast2 &

SUSE Linux 15 BtrFS のファイルシステム自動修復、チェック、スナップショット_a0056607_13430414.png

定義したパーティションルートに .snapshot ディレクトリが創られます。ここは snapshot の保管場所です。

opesuse151:~ # ls /.snapshots/1/snapshot/
.snapshots boot etc lib mnt proc run selinux sys usr
bin dev home lib64 opt root sbin srv tmp var
opesuse151:~ #


SUSE Linux 15 BtrFS のファイルシステム自動修復、チェック、スナップショット_a0056607_13480760.png

実際のスナップショットの取り方、ロールバックの方法はこちらの過去記事をご参考にしてください。

SLES12が採用した btrfs, snapper を使った Snap Shot
なるほど、SUSE Linux 12, 15 でルートパーティションは標準の BtrFS は COW (Copy On Write) なので、ファイルの論理障害には強いんだ、という事です。しかし物理障害には無力な事には変わりません。やっぱり必要なのはバックアップです。

一通りやってみて、Windows の起動直後の chkdisk や EXT3 の場合の fsck の待ち時間を考えると実に楽になったなと実感しています。








by islandcenter | 2020-02-27 14:20 | SUSE | Comments(0)

ファイル名とファイルパスの最大長について。

Samba にファイルを保存しようとしたら、「ファイル名が長すぎる」と怒られたので、ファイルサーバーで保存するファイル名の長さ、トータルのパスの長さを調べてみました。
ここでは Samba だけではなく、Windowsや macOS のファイル名、パスの長さ制限についても調べました。


- SUSE Linux(openSUSE Leap 15.1)-

SUSE に限らず多くの Linux ディストリビューションや UNIX 系では getconf コマンドで NAME_MAX を調べてみると良いでしょう。 255 バイトで、最後の一文字は NULL なので、実質 254 バイトになるはずです。誤っていたらコメントください。これは posix 準拠のためなんでしょうね。

sle15:~ # getconf -a | grep NAME
NAME_MAX                           255
_POSIX_NAME_MAX                    255
LOGNAME_MAX                        256
TTY_NAME_MAX                       32
TZNAME_MAX
_POSIX_TZNAME_MAX
CHARCLASS_NAME_MAX                 2048
HOST_NAME_MAX                      64
LOGIN_NAME_MAX                     256
sle15:~ #

IBM の資料ですが、getconf の詳細はこちらをご参考ください。
getconf — 構成値を取得する

Samba や NAS などでは 255 「バイト」、Windows では260「文字」。長いファイル名は Samba では使えないわけです。

長いファイル名を扱うことができない

ただし、これは「ファイル名の制限」で、limits.h によるとパスも含める 4096 バイトの様です。これはファイルシステムフォーマットの問題ではなくシステムAPIによる制限です。


最大パスサイズは「バイト」で日本語でパスを作成する場合、UTF8 では3~4バイト使うため、「日本語の文字数」に注意が必要です。

opensuse151:~ # cat /usr/include/linux/limits.h | grep PATH
#define PATH_MAX        4096    /* # chars in a path name including nul */

opensuse151:~ # getconf -a |grep PATH
PATH_MAX                           4096
_POSIX_PATH_MAX                    4096
PATH                               /bin:/usr/bin
CS_PATH                            /bin:/usr/bin
opensuse151:~ #


実際にプログラムを書いて試したヒトがいました。中々面白いプログラムです。

Check File Systems maximum path depth

Now run it:
$ time ./createDirectories

return code     : -1
Created sub-directories : 1018
length of pathname  : 4096

real    0m0.281s
user    0m0.004s
sys 0m0.180s


私の openSESE Leap 15.1 の環境では若干違いがありました。

opensuse151:~/test # ./ptest
return code             : -1
Created sub-directories : 1022
length of pathname      : 4098

1023 バイト説もありますが、その根拠が分かりませんでした。コメントいただけると幸いです。

- Novell NSS はパスも含めて 1023の Unicode 文字 - 

ファイルサーバー専用OSの Novell Open Enterprise Server (OES)では、ファイル名そのものは16ビット Unicode で 255 文字、フルパスは 1023 文字です。

6.4 Naming NSS Storage Objects

6.4.2 Number of Characters Allowed
For the NSS file system, the maximum length supported for a filename (the name and file extension) is 255 16-bit Unicode characters. The maximum length supported for the full path name (which includes the volume name, directories, filename, extension, and delimiters in the path) is 1023 16-bit Unicode characters.

However, different tools, applications, and file systems place different limits on filenames and path lengths, some of which can be more or less restrictive than these limits.

16bit Unicode でパスも含めて 1023 文字です。もっとも、それだけの長さを扱えるソフトウェアやアプリケーションがあるとは限らないのでマウントしたシステムによる、という事です。標準的なシステムより、長いパスを作ってマルチベンダー対応、という事なのですが、良くある話でマルチベンダー固有のトラブルも抱えます。

なお、上の記事は、OES2018 のNSSなので OES2 以前のバージョンや NetWare カーネルでは 255 文字という記述もありました。多分ファイル名だけの制限でしょう。

- Windows NTFS -

NTFS の概要

拡張パスのサポート: 多くの Windows API 関数には、MAX_PATH 設定で定義された 260 文字のパスの上限を超える約 32,767 文字の拡張パスを許可する Unicode バージョンがあります。
 
最大 32,767 文字が MAX_PATH 変数によって 260 文字(パスも含む)に制限されています。この数値は Win32 の制限によるもので、グループポリシーで変更できます。

> gpedit > コンピュータの構成 > 管理用テンプレート > システム > ファイルシステムに "Win32の長いパスを有効にする" を有効にして > gpupdate を実行します。

ファイル名とパスの最大長の色々_a0056607_13581623.png

例えば、サーバー上の "D:\(フルパス含めて全部で260文字).txt" をネットワーク共有で "\\server\my-long-share\(共有名を含めると260文字超えちゃった).txt" でアクセスする場合などにはこの制限を撤廃すべきでしょうか。やはり「255文字前後が一般的な壁」なので、濫用は要注意です。

バックアップからのリカバリなどでも、このファイル名の長さ制限でリストアできないファイルがある場合も考えられます。
Windows Server -> Samba でバックアップエラーが起こるとややこしい事になりそうですね。 

Linux側では、4096(NULL含) のパスの長さなので、 Unix 系OSや macOS とファイル共有すると、ファイル名の長さで Windows からアクセスできないケースも出てくるわけです。

- MacOS HFS+ -

Wikipedia によると

最大ファイル名長
255文字(UTF-16での文字数。Appleが改変したUnicode正規化形式Dに正規化される)
https://ja.wikipedia.org/wiki/HFS_Plus

残念ながら、パスを含んだ最大の数字は見つからなかった...ので getconf してみました。 

etesian-mini:etc uhoge$ uname -a
Darwin etesian-mini.local 19.0.0 Darwin Kernel Version 19.0.0: Thu Oct 17 16:17:15 PDT 2019; root:xnu-6153.41.3~29/RELEASE_X86_64 x86_64
etesian-mini:etc uhoge$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.1
BuildVersion: 19B88
etesian-mini:etc uhoge$ getconf NAME_MAX /
255
etesian-mini:etc uhoge$ getconf PATH_MAX /
1024
etesian-mini:etc uhoge$

ファイル名とパスの最大長の色々_a0056607_12410148.png

どうも macOS X 10.15.1 では、ファイル名の長さは 255(NULLを除いて254)バイト、最大パスは 1024 ということになりそうです。

古いHFSの場合は31文字です。また、AFP を使う時も 31 文字のよう。








- まとめ -

色々調べてわかったのは....

- 大体のシステムでは2020 年現在 255 文字前後のUTF16、またはバイトが、ファイル、ディレクトリ名で使える
- バイトの場合と UTF16 の場合がある。
- Unix 系システムでは、ディレクトリパスも含めて、4095(+null) で 全部で4096バイトのようだ
- Unix 系システムで Samba を使う場合、長いパスは Windows からアクセスできない場合がある。
- ただし OS が扱うファイル名の文字コードが UTF16 であるとは限らない。最近は大抵 UTF8 だったりする
- Windows10 系は 260 文字だが、「初期の Windows は 254" バイト"」だったりでバージョンによってはバラバラ。
- Windows10 系のパスの長さ制限は「拡張パス」という秘密の扉を開けると32,767 文字まで使える
- システムが使う文字コードが Shift-JIS だったり、Unicode だったり、UTF-8 だったり EUC だったりするとどうなるか不明
- 日本語コードに慣れたプログラマとはトモダチにになっておくべきだ。
- バイト数と UTF16、UTF8、の「文字数」とは違う事をエンドユーザに説明するのはインド人にウナギを食わせるくらい難しい
- 特に文字数とバイト数の違いに注意。chars が、いわゆる char 変数なのか、文字通りの「非アルファベット」の複数バイトの文字数(letter数)なのか
- 職場を辞めたヤツが、Mac からファイルサーバーの日本語フォルダの深さをチャレンジ、しかも読み込み専用のフラグを立てて退職したことを思い出した。頭にきた。
- 長くて深いディレクトリ名、ファイル名をユーザは使わないで欲しい。ってか、よくそんな面倒なことするなよ。
- ファイルシステムに制限がなくても(no limit) OS の API 制限に引っかかることが多い。Windows のエクスプローラは「アプリケーション」である。
- アプリケーションからアクセスできないファイルは夜作られる。
- ファイル名とパスの長さは、誰か Wikipedia に記事を書いてまとめて欲しいくらい、面倒である。





他にも文字コードの違いや機種依存文字、使えない記号符号特殊文字などもあります。これはまた別の機会に調べてみます。





by islandcenter | 2020-02-24 14:12 | SUSE | Comments(0)

SUSE Linux での fuser、ファイルを開いているプロセスを kill します。

マウント中のデバイスを umount しようとすると ”Device busy” なんてことがあります。あるいは、ファイルを開こうとしたら、ファイルがゾンビなプロセスなんかに、ロックされている。

そんな時に覚えておきたいコマンドが lsof と fuser です。

lsof はインストールされていないようなので、YaST か zypper を使ってインストールします。

SUSE Linux でパッケージインストールの色々な方法





- fuser のヘルプ -

まずは使い方から

opensuse151:~ # fuser
No process specification given
Usage: fuser [-fIMuvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE]
             [-k [-i] [-SIGNAL]] NAME...
       fuser -l
       fuser -V
Show which processes use the named files, sockets, or filesystems.

  -a,--all              display unused files too
  -i,--interactive      ask before killing (ignored without -k)
  -I,--inode            use always inodes to compare files
  -k,--kill             kill processes accessing the named file
  -l,--list-signals     list available signal names
  -m,--mount            show all processes using the named filesystems or
                        block device
  -M,--ismountpoint     fulfill request only if NAME is a mount point
  -n,--namespace SPACE  search in this name space (file, udp, or tcp)
  -s,--silent           silent operation
  -SIGNAL               send this signal instead of SIGKILL
  -u,--user             display user IDs
  -v,--verbose          verbose output
  -w,--writeonly        kill only processes with write access
  -V,--version          display version information
  -4,--ipv4             search IPv4 sockets only
  -6,--ipv6             search IPv6 sockets only
  -                     reset options

  udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]


- lsof でディレクトリ以下のオープンファイルを確認 -

opensuse151:~ #
opensuse151:~ # lsof /home/
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sftp-serv 21170 knakaj  cwd    DIR   0,47      404  258 /home/knakaj
bash      21204 knakaj  cwd    DIR   0,47      404  258 /home/knakaj
oosplash  23270 knakaj  cwd    DIR   0,47      404  258 /home/knakaj
soffice.b 23289 knakaj  cwd    DIR   0,47      404  258 /home/knakaj
soffice.b 23289 knakaj    3u   REG   0,47     8107  826 /home/knakaj/test/test.odt
soffice.b 23289 knakaj   24uW  REG   0,47       91  728 /home/knakaj/.config/libreoffice/4/user/uno_packages/cache/log.txt
soffice.b 23289 knakaj   26uW  REG   0,47      127  772 /home/knakaj/.config/libreoffice/4/user/extensions/bundled/extensions.pmap
dbus-daem 23304 knakaj  cwd    DIR   0,47      404  258 /home/knakaj
at-spi-bu 23305 knakaj  cwd    DIR   0,47      404  258 /home/knakaj
at-spi-bu 23305 knakaj  mem    REG   0,47      787  825 /home/knakaj/.config/dconf/user
dbus-daem 23310 knakaj  cwd    DIR   0,47      404  258 /home/knakaj
at-spi2-r 23312 knakaj  cwd    DIR   0,47      404  258 /home/knakaj
gvfsd     23318 knakaj  cwd    DIR   0,47      404  258 /home/knakaj
gvfsd-fus 23323 knakaj  cwd    DIR   0,47      404  258 /home/knakaj


- fuser でオープンファイル、プロセスID、ユーザを確認 -

-a 全部、-u ユーザID、-v 詳細モード

opensuse151:~ # fuser -avu /home/knakaj/test/test.odt
                     USER        PID ACCESS COMMAND
/home/knakaj/test/test.odt:
                     knakaj    23289 F.... (knakaj)soffice.bin


- fuser でオープンしているプロセスを kill -

-k で kill、 -i で kill の確認メッセージ

opensuse151:~ # fuser -avuki /home/knakaj/test/test.odt
                     USER        PID ACCESS COMMAND
/home/knakaj/test/test.odt:
                     knakaj    23289 F.... (knakaj)soffice.bin
Kill process 23289 ? (y/N) y
opensuse151:~ #


- マウント中のデバイスとユーザ、プロセスの確認 -

-m でマウントオプション

opensuse151:~ # fuser -mauv /mnt/sdc
                     USER        PID ACCESS COMMAND
/mnt/sdc:            root     kernel mount (root)/mnt/sdc
                     knakaj    22618 f.c.. (knakaj)smbd
opensuse151:~ #


-m と ki オプションでモンダイの smb プロセスを kill する。 

opensuse151:~ # fuser -mauvki /mnt/sdc
                     USER        PID ACCESS COMMAND
/mnt/sdc:            root     kernel mount (root)/mnt/sdc
                     knakaj    21867 f.c.. (knakaj)smbd
Kill process 21867 ? (y/N) y


セッションが kill され、開いているファイルがリセットされました。

ディレクトリに cd している場合は bash がディレクトリファイルをオープンしています。よくある話。

opensuse151:/home/knakaj # fuser -vau .
                     USER        PID ACCESS COMMAND
/home/knakaj:        root      22884 ..c.. (root)bash
                     root      22982 ..c.. (root)fuser
opensuse151:/home/knakaj #
opensuse151:/home/knakaj # fuser -vau /home/knakaj/
                     USER        PID ACCESS COMMAND
/home/knakaj:        root      22884 ..c.. (root)bash
                     root      23149 ..c.. (root)fuser
opensuse151:/home/knakaj # cd ..
opensuse151:/home # fuser -vau /home/knakaj/
                     USER        PID ACCESS COMMAND
/home/knakaj:
opensuse151:/home #

※ ちなみに bash のプロセスを kill するとそのターミナルは固まります......





by islandcenter | 2020-02-19 12:45 | SUSE | Comments(0)

Microfocus Open Enterprise Server (OES Linux)はファイルサーバーに特化したシステムです。セキュリティ面での柔軟性、高機能性には特筆するものがあります。

その一つが、ユーザがどの端末からログインしているかを確認。指定した端末以外からログインをブロックする機能、ケツを拭かないでトイレを使うユーザの多重ログインを防止する機能です。



1.OES Linux のファイルサーバーでゴォーンさんのログオンアドレスを調べたい。
2.OES Linux のファイルサーバーでゴォーンさんがログインできるIPアドレスを制限したい。
3.OES Linux のファイルサーバーでゴォーンさんが同時ログインできる台数を制限したい。

- ユーザはどのIPアドレスからログインしているかを調べる -

OES Linux の iManager > "ユーザー名" modify Object の General タブから、ユーザが現在ログインしているIPアドレスを調べる事ができます。

ユーザのどの端末のIPからログイン?許可されたIPアドレスでログイン制限_a0056607_11352495.png




ー ユーザがログインできるIPアドレスを制限したい ー

例えば、ゴーンさんのような、特殊な経営者や特許に関わるエンジニア、システム管理者やヘルプデスク、パートさん、総務、経理などのユーザには、特定のPC(IP アドレス)からのみ、アクセスさせたい場合があります。この人たちが許可なく、他所のフロアの他人のPCからデータの持ち出しをさせたくない場合などですね。固定したIPからはログインできるけど、DHCPのネットワークからはログインさせたくない。

その場合、固定IPをもった、特定のIPからしかログインできないようにする機能が Novell OES Linux にあります。

iManager >Modify Object > "ユーザ" > Restrictions タブ > Address Restriction に、ユーザが「ログイン許可」できるIPアドレスを記述します。

ユーザのどの端末のIPからログイン?許可されたIPアドレスでログイン制限_a0056607_11355688.png

IPアドレス制限をかけると、許可されていないアドレックスからアクセスすることはできなくなります。

ユーザのどの端末のIPからログイン?許可されたIPアドレスでログイン制限_a0056607_11365559.png

- 同時接続数を制限する -

よくある、「ケツも拭かずに片っ端からPCにログインしまくる」ヒトを取り締まり、セキュリティを確保するための方法として、同時ログインするユーザを制限する方法が、OES Linux には普通にあります。

iManager >Modify Object > "ユーザ" > Restrictions タブ > Login Restriction の Limit Concurrent connections をチェックして、同時接続数に”2”以上の数値を設定します。

※ ”1”だと eDirectory の仕様により、うまくログインできない場合がありました。今はよく分かりません。

ユーザのどの端末のIPからログイン?許可されたIPアドレスでログイン制限_a0056607_11375480.png

なお、このログイン制限は NCP (524ポート)プロトコルを使った場合にのみ有効で、SMB/CIFS,FTP,NFS など、違うプロトコルを使った場合は制御できません。

セキュリティ上、重要なサーバーには CIFS などをインストールせず、Microforcus Client for OES を使ってNCP のみの接続制限をすることをお勧めします。

User Restrictions: Some OES Limitations#

This is generally true, with two important exceptions:
* Maximum number of concurrent connections in login restrictions
* Address restrictions
These two specific restrictions are enforced only for users who are accessing the server through NCP. Connections through other access protocols (for example, HTTP or CIFS) have no concurrent connection or address restrictions imposed.
For this reason, you probably want to consider not enabling services such as SSH and FTP for LUM when setting up Linux User Management. For more information on SSH and LUM, see Section 9.4, SSH Services on OES.










by islandcenter | 2020-02-15 12:16 | SUSE | Comments(0)

SUSE Linux 15(openSUSE/SLE) にコンパイラをインストールする方法です。

SUSE Linux Enterprise 15(SLE) から、インストールの手順の中に gcc などの開発環境のインストール手順が見当たらなかったのでその補完です。

SUSE Linux でパッケージインストールの色々な方法
https://islandcnt.exblog.jp/240051518/

YaST (yast2) による SUSE Linux のパッケージ管理, インストールと削除
https://islandcnt.exblog.jp/23923745/

SUSE Linux 15 YaSTの基本 (openSUSE Leap, SLE)
https://islandcnt.exblog.jp/238758768/



- SLE15 の場合 -

yast より yast2 がいいでしょう。

yast2 の Software > "Add-on Packgage" か "Software Repositories" のどちらからか、レポジトリの追加をします。ソースとして、SLE15 の Package DVD1 を指定します。利用可能な Extension に "Development Tools...." がリストされるので、チェックを入れます。

SUSE Linux15(SLE/openSUSE) 開発環境をインストール_a0056607_15544489.png

この後、 Software Management の中から "View" をトグルして "Pattern" に変更して、”Development” の必要なパッケージをインストールします。

SUSE Linux15(SLE/openSUSE) 開発環境をインストール_a0056607_15555033.png


- opensuse15.1 の場合-

opensuse15.1の場合は、そのまま Software Management の中から "View" をトグルして "Pattern" に変更して、”Development” 以下の必要なパッケージをチェックします。

SUSE Linux15(SLE/openSUSE) 開発環境をインストール_a0056607_15583237.png







isLandcenter.jp

by islandcenter | 2020-02-10 15:53 | SUSE | Comments(0)

一般的に Linux のファイルアクセス監査ってどうするのか、ふと疑問が出てきました。そこで、SUSE Linux 15(openSUSE/SLE) でファイルアクセス監査ツール inotify-tools を使ったファイルアクセスのチェック方法を調べてみました。

inotify - get your file system supervised

inotify自体は、カーネルに組み込まれた API でそのAPIから、ファイルアクセス監視をするためのツールが inotofiwait と inotifywatch コマンドです。



- openSUSE 15 での inotify-tools インストール -

openSUSE 15.1 では標準リポジトリに inotify-tools パッケージが含まれているので、zypper か YaST の Software Management からインストールできます。

SUSE Linux でパッケージインストールの色々な方法
https://islandcnt.exblog.jp/240051518/

YaST (yast2) による SUSE Linux のパッケージ管理, インストールと削除
https://islandcnt.exblog.jp/23923745/

SUSE Linux 15 YaSTの基本 (openSUSE Leap, SLE)
https://islandcnt.exblog.jp/238758768/

SUSE Linux 15 inotify-tools でファイルアクセス監査_a0056607_12173895.png



- SLE15 の場合 inotify-tools のインストール -

SLE15 の標準パッケージや、リポジトリに含まれていません。2020の現時点では1 Click Install はできないようです。

そこで openSUSE の 1  Click インストールから、"Expart Download"を開いて、指示通り zypper install しました。SLE のユーザ登録したレポジトリではないので、エラーが出まくりました。エクスパートインストールでは、次のコマンドラインが提示されたので、そのまま実行してインストールできました。


# zpper addrepo https://download.opensuse.org/repositories/filesystems/SLE_15/filesystems.repo
# zypper refresh
# zypper install inotify-tools

インストールができたら、inotifywait, inotifywatch というコマンドがインストールされます。
opensuse151:~ # find / -name "inotify*"
/usr/share/man/man1/inotifywait.1.gz
/usr/share/man/man1/inotifywatch.1.gz
/usr/share/man/man7/inotify.7.gz
/usr/share/man/man2/inotify_add_watch.2.gz
/usr/share/man/man2/inotify_init.2.gz
/usr/share/man/man2/inotify_init1.2.gz
/usr/share/man/man2/inotify_rm_watch.2.gz
/usr/lib/perl5/vendor_perl/5.26.1/x86_64-linux-thread-multi/bits/inotify.ph
/usr/lib/perl5/vendor_perl/5.26.1/x86_64-linux-thread-multi/linux/inotify.ph
/usr/lib/perl5/vendor_perl/5.26.1/x86_64-linux-thread-multi/sys/inotify.ph
/usr/bin/inotifywait
/usr/bin/inotifywatch
/proc/sys/fs/inotify


- inotifywait のヘルプを見てみた -

opensuse151:~ # inotifywait --help
inotifywait 3.14
Wait for a particular event on a file or set of files.
Usage: inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ]
Options:
        -h|--help       Show this help text.
        @<file>         Exclude the specified file from being watched.
        --exclude <pattern>
                        Exclude all events on files matching the
                        extended regular expression <pattern>.
        --excludei <pattern>
                        Like --exclude but case insensitive.
        -m|--monitor    Keep listening for events forever.  Without
                        this option, inotifywait will exit after one
                        event is received.
        -d|--daemon     Same as --monitor, except run in the background
                        logging events to a file specified by --outfile.
                        Implies --syslog.
        -r|--recursive  Watch directories recursively.
        --fromfile <file>
                        Read files to watch from <file> or `-' for stdin.
        -o|--outfile <file>
                        Print events to <file> rather than stdout.
        -s|--syslog     Send errors to syslog rather than stderr.
        -q|--quiet      Print less (only print events).
        -qq             Print nothing (not even events).
        --format <fmt>  Print using a specified printf-like format
                        string; read the man page for more details.
        --timefmt <fmt> strftime-compatible format string for use with
                        %T in --format string.
        -c|--csv        Print events in CSV format.
        -t|--timeout <seconds>
                        When listening for a single event, time out after
                        waiting for an event for <seconds> seconds.
                        If <seconds> is 0, inotifywait will never time out.
        -e|--event <event1> [ -e|--event <event2> ... ]
                Listen for specific event(s).  If omitted, all events are
                listened for.

Exit status:
        0  -  An event you asked to watch for was received.
        1  -  An event you did not ask to watch for was received
              (usually delete_self or unmount), or some error occurred.
        2  -  The --timeout option was given and no events occurred
              in the specified interval of time.

Events:
        access          file or directory contents were read
        modify          file or directory contents were written
        attrib          file or directory attributes changed
        close_write     file or directory closed, after being opened in
                        writeable mode
        close_nowrite   file or directory closed, after being opened in
                        read-only mode
        close           file or directory closed, regardless of read/write mode
        open            file or directory opened
        moved_to        file or directory moved to watched directory
        moved_from      file or directory moved from watched directory
        move            file or directory moved to or from watched directory
        create          file or directory created within watched directory
        delete          file or directory deleted within watched directory
        delete_self     file or directory was deleted
        unmount         file system containing file or directory unmounted
opensuse151:~ #


- inotifywait の使用例 -

1. 一番単純な使い方

opensuse151:~ # inotifywait   /etc/hosts
Setting up watches.
Watches established.
/etc/hosts OPEN
opensuse151:~ #

ファイルオープンの後 access がありますが、一発目のイベント、”open” のみ記録されます。
今度は -e イベント access を付けて、「ファイルが読みだされた」イベントを監視します。

opensuse151:~ # inotifywait   -e access  /etc/hosts
Setting up watches.
Watches established.
/etc/hosts ACCESS
opensuse151:~ #

2. 指定した /etc/passwd ファイルに -e vent に access 一発アクセスがあれば log.txt に時刻を記録してそのまま終了する。

常駐したら /etc/passwd ファイルを読み込んでみます。

opensuse151:~ # inotifywait  -e access  --outfile=log.txt -q  --format \
'%T %w%f (%e)' --timefmt '%F %T'  /etc/passwd 
opensuse151:~ # cat log.txt
2020-02-08 13:42:55 /etc/passwd (ACCESS)
opensuse151:~ # ps ax | grep inotify
18129 pts/0    S+     0:00 grep --color=auto inotify
opensuse151:~ #


一発アクセスで終了した。

3. -r オプションで /etc/ の下の何かのファイルに -e イベント Access があれば記録する。-m は常駐モニタモード、 -r で指定したディレクトリ以下を全部再帰的に監査。
コマンドの末尾に "&" を付けてデーモン化させる。 --outputfile でログファイルに記録する。


opensuse151:~ # inotifywait -m -r -e access  \
--outfile=log.txt -q /etc/ &
[2] 17390
opensuse151:~ # cat log.txt
/etc/ ACCESS passwd
/etc/ ACCESS passwd
/etc/ ACCESS hosts
opensuse151:~ # ps ax | grep inoti
17390 pts/0    S      0:00 inotifywait -m -r -e access --outfile=log.txt -q /etc/
17410 pts/0    S+     0:00 grep --color=auto inoti

opensuse151:~ # kill 17390 ログがあふれるのでkillする


常駐しているので kill しました。
常駐しているので複数のイベントが記録されます。

4. 3.にもう少し色を付けてアクセス時刻をログに書きます。& を付けてデーモン化させます。
opensuse151:~ # inotifywait -m -r -e access  --outfile=log.txt \
q --format '%T %w%f (%e)' --timefmt '%F %T' /etc/ &
[2] 17743
opensuse151:~ # ps ax | grep inoti
17743 pts/0    S      0:00 inotifywait -m -r -e access --outfile=log.txt -q --format %T %w%f (%e) --timefmt %F %T /etc/
17753 pts/0    R+     0:00 grep --color=auto inoti
opensuse151:~ # kill 17743
opensuse151:~ # cat log.txt
2020-02-08 13:37:40 /etc/passwd (ACCESS)
2020-02-08 13:37:50 /etc/hosts (ACCESS)
opensuse151:~ #


ファイルアクセスのイベントが記録できますが、低水準ファイルシステムの API なので、誰がアクセスしたのかの監視はできないようです。

- inotifywatch も見てみる -

こちらは、ファイルアクセスのイベントの統計を取るために利用します。
まず inotifywatch のヘルプから

opensuse151:~ # inotifywatch --help
inotifywatch 3.14
Gather filesystem usage statistics using inotify.
Usage: inotifywatch [ options ] file1 [ file2 ] [ ... ]
Options:
        -h|--help       Show this help text.
        -v|--verbose    Be verbose.
        @<file>         Exclude the specified file from being watched.
        --fromfile <file>
                Read files to watch from <file> or `-' for stdin.
        --exclude <pattern>
                Exclude all events on files matching the extended regular
                expression <pattern>.
        --excludei <pattern>
                Like --exclude but case insensitive.
        -z|--zero
                In the final table of results, output rows and columns even
                if they consist only of zeros (the default is to not output
                these rows and columns).
        -r|--recursive  Watch directories recursively.
        -t|--timeout <seconds>
                Listen only for specified amount of time in seconds; if
                omitted or 0, inotifywatch will execute until receiving an
                interrupt signal.
        -e|--event <event1> [ -e|--event <event2> ... ]
                Listen for specific event(s).  If omitted, all events are
                listened for.
        -a|--ascending <event>
                Sort ascending by a particular event, or `total'.
        -d|--descending <event>
                Sort descending by a particular event, or `total'.

Exit status:
        0  -  Exited normally.
        1  -  Some error occurred.

Events:
        access          file or directory contents were read
        modify          file or directory contents were written
        attrib          file or directory attributes changed
        close_write     file or directory closed, after being opened in
                        writeable mode
        close_nowrite   file or directory closed, after being opened in
                        read-only mode
        close           file or directory closed, regardless of read/write mode
        open            file or directory opened
        moved_to        file or directory moved to watched directory
        moved_from      file or directory moved from watched directory
        move            file or directory moved to or from watched directory
        create          file or directory created within watched directory
        delete          file or directory deleted within watched directory
        delete_self     file or directory was deleted
        unmount         file system containing file or directory unmounted
opensuse151:~ #


-e でイベント access, open を -r で /etc の下全部 -t 20 秒間、 -v verbose モードで統計を取ってみる。 
opensuse151:~ # inotifywatch -r -e access -e open -t 20 -v /etc
Establishing watches...
Setting up watch(es) on /etc
OK, /etc is now being watched.
Total of 394 watches.
Finished establishing watches, now collecting statistics.
Will listen for events for 20 seconds.
total  access  open  filename
6      0       6     /etc/zabbix/web/
6      2       4     /etc/
opensuse151:~ #




- まとめ -

実際には、スクリプトを書いて、特定のファイルにイベントが発生したらログに残すとかメールするとかに使えるようです。

また、incron と言う cron の様なツールで、イベントが発生したら処理を実行するという地味に資料が少ないツールも別にありました。試してみるのもいいでしょう。

inotify - get your file system supervised

inotify

また audit コマンドが openSUSE 15 には標準で入っているようなので、これもまた方法。それに AppArmor もあったなぁ。それぞれ目的も用途も違います。
と、あまり突っ込むとハマりそうで深いのがファイルアクセス監査のツールなのだな、と感じました。





by islandcenter | 2020-02-10 13:21 | SUSE | Comments(0)

SUSE Linux でパッケージインストール、色々な方法

このブログにたどり着いた方には、どうも SUSE Linux のパッケージのインストール方法が分からずに来てしまった方が多い様です。お気の毒です。こんなに内容のない記事しか頼りにならないのも何とかしたいものです。

パッケージのインストール方法は幾つかの方法があります。

  • コンパイルしてインストール
  • rpm のインストール
  • zypper ツールによるインストール
  • YaST によるインストール
  • ブラウザから1クリックインストール

という事で、SUSE Linux 15(openSUSE/SLE) でのパッケージのインストール方法を幾つかご紹介します。

- よくある間違え -

パッケージ管理のコマンドを実行中は、パッケージDBがロックされ、他のパッケージ管理コマンドはエラーになってしまいます。

例えば

# zypper update

実行中は YaST のソフトウェア管理は使えません。また、Software Management のアイコンをダブルクリックしてしまう。よくやっちゃう間違えです。

- こだわるヒトは make する -

もう、ソースコードしかない場合や、プロプラエタリなデバイスドライバのバイナリパッケージをインストールする場合ですね。

デバイスドライバなどを make install する場合、なるべくカーネルパッチなど当たっていない、「素の状態」でインストールする事をお勧めします。ドライバ屋さんも、最新パッチが当たった状態で make することは考えていないようなので、カーネルがマイナーバージョンアップした状態で、見事にコンパイルエラーとなった事がありました。


- お馴染みの rpm -

単体の依存性が少ない rpm パッケージは rpm コマンドでインストールするか、nautilus ファイルマネージャなどで右ボタンから開くとそのまま yast2 が起動してインストールができます。

SUSE Linux でパッケージインストールの色々な方法_a0056607_12154329.png

公式リポジトリになかったり、どこかに「落ちていた」パッケージをインストールするにはこの方法でしょうか。

後にも説明しますが、software.opensuse.org にあるパッケージから1クリックインストールできない場合も、rpm をダウンロードしてインストールします。

他には rpm -qa でパッケージのバージョンを確認する時に使います。

- バッチ処理向けの zypper -

他のディストリビューションでは yum や apt に相当するコマンドです。

例えば、inotify-tools パッケージをインストールする場合は次の様に実行します。

opensuse151:~ # zypper in inotify-tools
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 2 NEW packages are going to be installed:
inotify-tools libinotifytools0

2 new packages to install.
Overall download size: 57.9 KiB. Already cached: 0 B. After the operation, additional 111.7
KiB will be used.
Continue? [y/n/v/...? shows all options] (y): y
Retrieving package libinotifytools0-3.14-lp151.2.3.x86_64

: 略

opensuse151:~ #

SUSE Linux でパッケージインストールの色々な方法_a0056607_12161153.png


恐らく次に説明する、yast/yast2 のパッケージ管理を使い始めると、面倒くさくてやってられないよ、という事になりそうです。

一番使いそうなのが # zypper update と zypper patch でしょう。インストールが終わって、おおよそのサービスやデバイスドライバが問題なくうごいたら、 zypper update を使って全てのインストール済のパッケージをアップデートできます。YaST Online Update (YOU) だと一つ一つアップデートするため、非常に面倒くさい。 YOU はピンポイントでパッケージをアップデートする作業に向いています。

zypper update は時間がかかります。

opensuse151:~ # zypper update
Loading repository data...
Reading installed packages...

The following 11 package updates will NOT be installed:
cdda2wav cdrecord libnuma1 libscg1_0 libssh4 lsof mkisofs numactl prctl urlscan urlview

The following 15 NEW packages are going to be installed:
firebird gnome-shell-classic-session kernel-default-4.12.14-lp151.28.36.1 libfbclient2
libfreebl3-hmac libib_util libidn2-lang libixion-0_15-0 libmediacheck5 liborcus-0_15-0
libprocps7 libreoffice-base-drivers-firebird librevenge-stream-0_0-0 libsoftokn3-hmac
libtommath1

The following package is going to be REMOVED:
libwicked-0-6

The following 517 packages are going to be upgraded:

: 略

全体ではなくセキュリティパッチなどを適用するなら

# zypper patch

でも十分でしょう。

Zypperの使用

ただし zypper はシェルに組み込んで、インストールや設定をバッチ化できるので、沢山 SUSE Linux に付き合うヒトには向いているかもしれません。



- 綴りが分からなくてもインストールできる yast/yast2 -

パッケージの正しい綴りもバージョンも分からないけど、パッケージを操作したい。その場合の強力なツールが YaST です。


# yast コマンドはテキストコンソールで、カーソルキーや Tab キーなどでサクッ使い。 GUI 環境では複雑なパッケージを調整したり、じっくりリポジトリを変更するには GUI のコピーペーストが簡単な # yast2 コマンドの二つがあります。

SUSE Linux が他のディストリビューションとは段違いに使いやすいと思ってしまう最大の特徴があるYaSTの機能です。

テキストコンソールでは

# yast

GUIでは YaST アイコンを開くか、xterm などから

# yast2 &

でGUIが開きます。

YaST (yast2) による SUSE Linux のパッケージ管理, インストールと削除

yast と yast2 は見てわかる通り、メニューの階層構造やタブの位置、執行するための Accept ボタンもほとんど同じ場所にあります。

YaSTでパッケージをインストールするには、YaST > Software > Software management から、インストールしたいパッケージやキーワードを適当に "Search" します。リポジトリにあれば、綴りが分からなくても、キーワードに一致するパッケージのリストから、チェックマークを付けてインストールするだけです。

ここでは "ino...." というキーワードで探して "inotify-tools" というパッケージをインストールしようとしています。

SUSE Linux でパッケージインストールの色々な方法_a0056607_12170722.png

SUSE Linux でパッケージインストールの色々な方法_a0056607_12173895.png

YaST ツールは、エンジニアから「タッチタイピング」というエンジニアの秘儀を忘れさせてしまうキラーツールです。頼りすぎると、私の様に他のディストリビューションに戻れないダメ人間製造機、危険なツールかもしれません。

また、YaST のパッケージ管理は YaST の機能の一部です。インストールから、サービスの初期設定、チューニングまで YaST で完結できる強力なツールです。

- 1 Click Install -

公式リポジトリにない、あるいは公式リポジトリにあっても古いパッケージなので、最新版をインストールしたい場合は、ブラウザを使って software.opensuse.org の1クリックインストールを使うと良いでしょう。1クリックインストールのメタファイルを開くと、YaST が起動して自動的にリポジトリの追加から、必要なパッケージのダウンロード、インストールまで、ウィザード形式でやってくれます。

software.opensuse.org は、基本 openSUSE のタメのものですが、SLE 用の1クリックインストールもあるので、SLE でも使えます。ただし SLE のサブスクリプションを購入しているなら、自己責任です。openSUSE のリポジトリが追加されます。

テクニカルサポートの指示に従って正しく利用すべきでしょう。SLE ではうまくインストールできなかったり、不安定なケースがあります。出来るだけシステム依存の少ないパッケージをインストールしたい場合は便利です。1クリックインストールが上手くいかない場合は、”Expart Download” から、手動でインストールすると上手くいく場合があります。

openSUSE では問題が少ないのですが、SLE の場合と時折トラブります。まぁ依存性の少ないパッケージなら、ほとんど問題には出会わないンですけどね。時々 opensuse のサイトが不安定なのがガンです。

SUSE Linux でパッケージインストールの色々な方法_a0056607_12181015.png

- まとめ -

SUSE Linux(openSUSE/SLE) のパッケージ管理ツールの全体をまとめると

- YaST は初心者からベテランまでパッケージ管理に使えるツール
- コマンドライン命で YaST が使いにくいケースでは zypper を使う。スクリプト化にも便利、中上級者向け
- rpm や make install は他に手段が無い場合につかう。

と言ったところです。


SUSE Linux でよく使う忘れやすい使えるコマンド




by islandcenter | 2020-02-07 12:45 | SUSE | Comments(0)

dstat は vmstat, iostat, netstat などの stat 系管理ツールをまとめた、多用途管理ツールです。

SESE Linux(SLE/openSUSE)15 ではデフォルトでインストールされていないので、 yast > software > Software Manegement から検索するか、 software.opensuse.org から検索して、1クリックインストールします。

SUSE Linux の stat 系管理ツール多用途ツールdstat を使ってみる_a0056607_14164159.png



Seagate BarraCuda 3.5" 2TB 内蔵ハードディスク HDD 2年保証 6Gb/s 256MB 7200rpm 正規代理店品 ST2000DM008

新品価格
¥6,566から
(2020/1/19 14:36時点)



Anker PowerCore 10000 (モバイルバッテリー 10000mAh 最小最軽量 大容量)【PSE認証済/PowerIQ搭載】 iPhone&Android対応 *2019年12月時点 (ブラック)

新品価格
¥2,799から
(2020/1/20 12:36時点)

- まずは動かしてみる -

まず使ってみます。デフォルトで1秒間隔でステータスを返してくれます。

sle15:~ # dstat
You did not select any stats, using -cdngy by default.
--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
5 1 89 5 0| 52k 996k| 0 0 | 13B 298B|1335 3784
4 1 92 3 0|4096B 520k| 85k 86k| 0 0 |1373 3876
6 1 89 4 0|4096B 348k| 109k 112k| 0 0 |1500 4161
5 1 91 4 0|4096B 524k| 65k 66k| 0 0 |1312 3726
5 1 91 3 0|8192B 413k| 109k 112k| 0 0 |1412 4268
11 1 85 2 0|4096B 156k| 158k 162k| 0 0 |1517 3951
5 2 80 13 0| 0 1224k| 105k 106k| 0 0 |1498 4045
4 1 90 5 0| 0 3384k| 72k 72k| 0 0 |1327 3942
5 1 92 2 0| 0 224k| 112k 113k| 0 0 |1405 4070
5 1 91 3 0|8192B 780k| 90k 90k| 0 0 |1342 3978 ^C
sle15:~ #

ー help を見てみる ー

Help で使い方を調べてみます。

sle15:~ # dstat --help
Usage: dstat [-afv] [options..] [delay [count]]
Versatile tool for generating system resource statistics

Dstat options:
-c, --cpu enable cpu stats
-C 0,3,total include cpu0, cpu3 and total
-d, --disk enable disk stats
-D total,hda include hda and total
-g, --page enable page stats
-i, --int enable interrupt stats
-I 5,eth2 include int5 and interrupt used by eth2
-l, --load enable load stats
-m, --mem enable memory stats
-n, --net enable network stats
-N eth1,total include eth1 and total
-p, --proc enable process stats
-r, --io enable io stats (I/O requests completed)
-s, --swap enable swap stats
-S swap1,total include swap1 and total
-t, --time enable time/date output
-T, --epoch enable time counter (seconds since epoch)
-y, --sys enable system stats

--aio enable aio stats
--fs, --filesystem enable fs stats
--ipc enable ipc stats
--lock enable lock stats
--raw enable raw stats
--socket enable socket stats
--tcp enable tcp stats
--udp enable udp stats
--unix enable unix stats
--vm enable vm stats
--vm-adv enable advanced vm stats
--zones enable zoneinfo stats

--list list all available plugins
--<plugin-name> enable external plugin by name (see --list)

-a, --all equals -cdngy (default)
-f, --full automatically expand -C, -D, -I, -N and -S lists
-v, --vmstat equals -pmgdsc -D total

--bits force bits for values expressed in bytes
--float force float values on screen
--integer force integer values on screen

--bw, --black-on-white change colors for white background terminal
--color force colors
--nocolor disable colors
--noheaders disable repetitive headers
--noupdate disable intermediate updates
-o, --output file write CSV output to file
--profile show profiling statistics when exiting dstat
-V, --version show version and system info
--debug 1,2,3 debug mode

delay is the delay in seconds between each update (default: 1)
count is the number of updates to display before exiting (default: unlimited)

sle15:~ #


- とりあえず全部見る dstat -af -

-af オプションですべてのステータスを見てみます。ディスクの数が多いと、画面に収まり切りません。

sle15:~ # dstat -af
--total-cpu-usage-- --dsk/sr0-----dsk/vda-- --net/eth0- ---paging-- ---system--
usr sys idl wai stl| read writ: read writ| recv send| in out | int csw
1 0 93 5 0| 1B 0 :7910B 535k| 0 0 | 3B 22B| 192 411
1 0 91 7 0| 0 0 : 0 190k| 560B 270B| 0 0 | 212 337
1 0 89 10 0| 0 0 : 0 692k|3206B 716B| 0 0 | 236 520
1 1 72 25 1| 0 0 : 0 2500k| 518B 1756B| 0 0 | 176 495
0 0 98 2 0| 0 0 : 0 873k| 728B 784B| 0 0 | 193 383
6 2 84 8 0| 0 0 : 112k 1010k| 660B 566B| 0 0 | 290 773 ^C
sle15:~ #


- インターバルを指定する n -

デフォルトインターバルを3秒に設定してみました。

sle15:~ # dstat 3
You did not select any stats, using -cdngy by default.
--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
5 1 89 5 0| 52k 996k| 0 0 | 13B 298B|1335 3784
5 2 91 3 0|2731B 391k| 51k 51k| 0 0 |1331 3851
5 1 90 4 0|1365B 504k| 76k 76k| 0 0 |1349 4053
5 1 86 7 0|5461B 639k| 75k 75k| 0 0 |1475 3987
5 1 89 5 0|4096B 358k| 93k 93k| 0 0 |1380 4637 ^C
sle15:~ #

- vmstat の互換モードで表示する -v -

-v を付けると vmstat と同じフォーマットで出てきます。

sle15:~ # dstat -v
---procs--- ------memory-usage----- ---paging-- -dsk/total- ---system-- --total-cpu-usage--
run blk new| used free buff cach| in out | read writ| int csw |usr sys idl wai stl
0 1.0 0.5|9332M 161M 1080k 5185M| 13B 298B| 52k 996k|1335 3784 | 5 1 89 5 0
3.0 1.0 0|9332M 161M 1080k 5185M| 0 0 |4096B 1804k|1227 3773 | 4 1 91 3 0
0 2.0 0|9332M 161M 1080k 5185M| 0 0 |4096B 1260k|1423 3547 | 4 1 80 15 0
1.0 0 0|9332M 161M 1080k 5185M| 0 0 | 0 1220k|1535 3744 | 5 1 70 24 0
2.0 1.0 0|9332M 161M 1080k 5185M| 0 0 | 0 364k|1213 3266 | 4 1 92 3 0
1.0 0 0|9332M 161M 1080k 5185M| 0 0 | 0 184k|1264 3916 | 5 2 90 4 0
0 1.0 0|9332M 161M 1080k 5185M| 0 0 | 0 412k|1276 3595 | 5 1 90 4 0^C
sle15:~ #

ー cpu, disk, network のみ表示する ー

-cdn オプションは、それぞれ cpu, Network, Disk のステータスを返してきます。

sle15:~ # dstat -cdn
--total-cpu-usage-- -dsk/total- -net/total-
usr sys idl wai stl| read writ| recv send
5 1 89 5 0| 52k 996k| 0 0
5 1 92 2 0|4096B 212k| 170k 174k
6 4 90 0 0|4096B 180k| 60k 60k
12 2 84 2 0|4096B 196k| 87k 87k
5 1 92 2 0|4096B 284k| 87k 88k
5 1 92 2 0|4096B 188k| 73k 73k
4 1 92 2 0|4096B 196k| 67k 67k
5 1 93 2 0|4096B 212k| 74k 74k^C
sle15:~ #

ー 表示結果に時刻を付ける ー

-t オプションで、収集した時刻を付けてくれます。


sle15:~ # dstat -tcdn
----system---- --total-cpu-usage-- -dsk/total- -net/total-
time |usr sys idl wai stl| read writ| recv send
17-01 14:12:39| 5 1 89 5 0| 52k 996k| 0 0
17-01 14:12:40| 4 1 93 2 0| 0 176k| 266B 420B
17-01 14:12:41| 5 0 91 4 0| 0 412k|2432B 6838B
17-01 14:12:42| 4 1 91 4 0| 0 968k|2127B 2163B
17-01 14:12:43| 5 1 87 7 0|4096B 780k| 106B 228B
17-01 14:12:44| 5 1 91 3 0| 0 256k|1326B 2622B
17-01 14:12:45| 4 1 91 4 0| 0 280k| 408B 784B
17-01 14:12:46| 5 1 92 2 0| 0 188k| 638B 1096B^C

ー 結果を csv ファイルに書き出す ー

--output FileName で結果をテキスト化してくれます。これはこれで便利そう。

sle15:~ # dstat -v --output dstat.csv
---procs--- ------memory-usage----- ---paging-- -dsk/total- ---system-- --total-cpu-usage--
run blk new| used free buff cach| in out | read writ| int csw |usr sys idl wai stl
0 1.0 0.5|9326M 155M 1080k 5198M| 13B 301B| 52k 996k|1335 3784 | 5 1 89 5 0
1.0 0 0|9326M 155M 1080k 5198M| 0 0 |4096B 396k|1460 4840 | 7 5 86 2 0
0 1.0 0|9326M 155M 1080k 5198M| 0 0 |4096B 460k|1454 3902 | 11 3 82 3 0
0 0 0|9326M 155M 1080k 5198M| 0 0 | 12k 188k|1521 4287 | 12 1 84 2 0
0 1.0 0|9326M 155M 1080k 5198M| 0 0 |4096B 3052k|1809 3747 | 5 1 88 5 0
1.0 1.0 0|9326M 155M 1080k 5198M| 0 0 |4096B 424k|1346 3628 | 5 1 90 4 0
0 1.0 0|9326M 155M 1080k 5198M| 0 0 |4096B 260k|1249 3593 | 5 1 92 2 0
0 0 0|9326M 155M 1080k 5198M| 0 0 |4096B 288k|1229 3657 | 4 2 89 5 0
2.0 0 0|9326M 155M 1080k 5198M| 0 0 |8192B 268k|1236 3578 | 5 1 90 4 0
0 0 0|9326M 155M 1080k 5198M| 0 0 |4096B 284k|1247 3440 | 5 1 91 2 0
0 0 0|9326M 155M 1080k 5198M| 0 0 |4096B 345k|1414 3987 | 7 2 88 4 0^C
sle15:~ #









by islandcenter | 2020-01-19 14:37 | SUSE | Comments(0)