isLandcenter 非番中

ブログトップ | ログイン

isLandcener.jp 非番中

2020/1/4 islandcenter.jp

インディペンデントコントラクター(IC)としてIT関連の仕事をしています。

このブログサイトは、私の仕事上のお付き合いがある方々をご支援するために開設しました。

どうせ技術的なメールを書いても、山のようなメールに埋もれてしまいます。HTML メールを読まない(私も使わない)し、ワープロ文書にしてもあまり整理つきませんし、リンク先や画像のスナップショットをお見せできる手段として良い方法はないものかなぁと思っていました。

せっかく作った自分の情報の山なので、思い切って公開しちゃえ、と思い、独立を機会に問題ない範囲で公開を始めました。公開するのは良いことで、仕事先でも電車の中でも、「あの手順何だっけ?」を確認できるのはいいものです。

-お仕事しませんか-

皆さまといい関係のお仕事を探しています。

私の公式ウェブサイトはこちらです。


詳細はウェブサイトでご確認ください。

--
このブログのトラックバックとコメントは承認制です。トラックバックスパムが多いので、トラックバックは受け付けていません。

 大手企業に対する批判に対して個人が名誉毀損で訴えられるケースがあります。いきなりこういう態度をとられてもこちらとしてはなすすべがありません。ブログの内容に不審な点、不愉快な表現がありましたら、まずはご連絡ください。適切に処理します。また製品担当者からのお励まし、ご意見などありましたら感謝します。

--
このブログを読んで、直接ご感想や、ご質問があれば、コメント欄にメールアドレスとコメントを書いて「非公開」チェックしていただければ私だけ皆さまのメールアドレスをチェックできます。のちほど非公開のメールアドレスからお返事します。

なお kenn*islandcenter.jp(@に置き換えてください)にメールを送っていただいても結構ですが、メールはジャンク処理していますので、必ず、サブジェクトにわかりやすいタイトルを書いてください。フリーメールやサブジェクトが空欄の場合、まず読まれることはないので、ご承知ください。詳細はウェブサイトをご参考ください。

My Home Web Site

Meil Form


- 2019/6/6 -
この6月から、広告を付けてみました。

見づらくなった。広告ウザい。などアンチのご意見もあるでしょう。コメントください。

このブログの価値を具体的な金額にするとどんなものか、書き手としてのモチベーションに繋がるだろうと思い試してみました。

一応、こちらを見る限り、アフリエイトは問題ないようです。

エキサイトブログ利用規約改定とライフログカテゴリの拡張について

有料プランの概要・支払い方法

PR- うちの大家さんもよろしく -PR




--
気が向いた時にしかコメントできなくて申し訳ありませんが、ブログの記事に関係なくご意見ご要望があれば、このトピックスにコメントください。

# by islandcenter | 2020-12-31 23:00 | Comments(4)

- はじめに -

MovaXterm で Mac の VNC 接続を始めたら、やめられなくてもう一度、 vncserver の事を、復習してみます。

参考ドキュメント

8 VNCによるリモートアクセス
https://documentation.suse.com/ja-jp/sles/15-SP1/html/SLES-all/cha-vnc.html



- vncserver のインストール -

tigervnc がインストールされているか。YaST > Software Manegement で確認して、なければチェックしてインストールします。

SUSE Linux 15 (openSUSE Leap 15)の vncserver,VNC接続をする。_a0056607_13282884.png


opensuse151:~ # vncserver --help

usage: vncserver [:<number>] [-name <desktop-name>] [-depth <depth>]
[-geometry <width>x<height>]
[-pixelformat rgbNNN|bgrNNN]
[-fp <font-path>]
[-fg]
[-autokill]
[-noxstartup]
[-xstartup <file>]
<Xvnc-options>...

vncserver -kill <X-display>

vncserver -list



上の SLE15 のマニュアルにはこんな簡単な説明がありました。

手順 8.2: vncserverを使用した永続的VNCセッションの開始 REPORT DOCUMENTATION BUG#

1. シェルを開き、VNCセッションを所有するユーザとしてログインしていることを確認します。

2. VNCセッションで使用されるネットワークインタフェースがファイアウォールで保護されている場合は、ファイアウォール内でセッションによって使用されるポートを手動で開く必要があります。複数のセッションを開始する場合は、一連のポートを開くことができます。ファイアウォールの設定方法の詳細については、Chapter 16, Masquerading and Firewallsを参照してください。
vncserverは、ディスプレイ:1にはポート5901、ディスプレイ:2にはポート5902という順序でポートを使用します。永続的セッションの場合、VNCディスプレイとXディスプレイは、通常、同じ番号です。

3. 1024x768ピクセルの解像度と16ビットの色数でセッションを開始するには、次のコマンドを入力します。

vncserver -alwaysshared -geometry 1024x768 -depth 16

vncserverコマンドは、何も指定されない場合、未使用のディスプレイ番号を選択し、その選択内容を出力します。追加オプションについては、man 1 vncserverを参照してください。



opensuse151:~ # vncserver :0

You will require a password to access your desktops.

Password:12345678
Verify:12345678
Would you like to enter a view-only password (y/n)? n

New 'opensuse151:0 (root)' desktop is opensuse151:0

Creating default startup script /root/.vnc/xstartup
Creating default config /root/.vnc/config
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/opensuse151:0.log

opensuse151:~ #


※ desktop is opensuse151:0":0" に注意

- 仮想ホストの制限 -

※ 因みに SLES11, 以降の XEN/KVN の仮想 HVM を使っている場合、 lib-virt が使っているので vncserver :0 などの低いディスプレー番号は使えないようです。二桁以上のディスプレイ番号を使うと上手く動きました。

あるいは、単にディスプレー番号を指定せず vncserver .... を実行すると、最初に空きがある番号に自動的に割り当てられます。


sle15:~ # vncserver :10 <-- 怒られた
A VNC server is already running as :10
sle15:~ # vncserver :11 <-- 11 番は使えた

New 'corsair:11 (knakaj)' desktop is corsair:11

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/corsair:11.log

sle15:~ #
sle15:~ # vncserver <-- 番号を指定しないで単純起動

New 'corsair:6 (root)' desktop is corsair:6 <-- :6 が割り当てられた

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/corsair:6.log

sle15:~ #



- MobaXtermにより接続 -

MobaXterm
https://mobaxterm.mobatek.net

Session > VNC (必要に応じて "network settings" タブで SSH gateway 経由をチェック) で VNC 接続できました。

SUSE Linux 15 (openSUSE Leap 15)の vncserver,VNC接続をする。_a0056607_13290893.png

接続を切ります。

opensuse151:~ # ps ax | grep vnc*
14306 pts/0 Sl 0:01 /usr/bin/Xvnc :0 -auth /root/.Xauthority -desktop opensuse151:0 (root) -fp /usr/share/fonts/misc,/usr/share/fonts/75dpi,/usr/share/fonts/100dpi,/usr/share/fonts/Type1 -geometry 1024x768 -pn -rfbauth /root/.vn /passwd -rfbport 5900 -rfbwait 30000
15198 pts/0 S+ 0:00 grep --color=auto vnc*
opensuse151:~ #
opensuse151:~ # vncserver -kill :0
Killing Xvnc process ID 14306
opensuse151:~ #



- MacOS から VNC 接続 -

Finder > 移動 > サーバーに接続 > URL に

vnc://IP_Address:590n

(n は vncserver を立ち上げた時に指定した :0 のディスプレイ番号のパラメータ)

SUSE Linux 15 (openSUSE Leap 15)の vncserver,VNC接続をする。_a0056607_13333603.png


- セキュリティ -

- デフォルトポートの変更

デフォルトでは 5900 番台のポートが使われるので、いたずら対策にこのポートを変えておく事です。

/usr/bin/vncserver スクリプトの

$vncPort = 5900 + $displayNumber;


の行を任意の違うポートに変えておくと良い。

SUSE Linux 15 (openSUSE Leap 15)の vncserver,VNC接続をする。_a0056607_13365237.png


あるいは "vncserver :1000" の様に、一桁多いディスプレイ番号を割り当てる。

- ファイアウォール

ファイアウォールはポート 5900 から開けておくこと。勿論、 vncserver のポートを変えた場合ほそのポートを開ける事になります。

- パスワード

接続するパスワードは vncpasswd コマンドで変更され。 ~: .vnc に保管される。もし動作が妖しければ、このディレクトリの中を削除すればリセットされる。vnc パスワードは最長8バイトであり脆弱である事に注意します。頻繁に変えるか、使う予定がなければ vncserver を立ち上げっぱなしにしない事をお勧めします。(そういう時に使いたくなるんですけど....)


opensuse151:~/.vnc # vncpasswd
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
opensuse151:~/.vnc # ls -l
total 64
-rw-r--r-- 1 root root 332 Feb 27 14:56 config
-rw------- 1 root root 8 Feb 28 13:24 passwd
-rwxr-xr-x 1 root root 639 Feb 27 14:56 xstartup
-rw-r--r-- 1 root root 34652 Feb 28 11:12 opensuse151:0.log
-rw-r--r-- 1 root root 6 Feb 28 11:09 opensuse151:0.pid
-rw-r--r-- 1 root root 8788 Feb 27 18:10 opensuse151:1.log


- 暗号化

vnc プロトコルは、telnet 同様、暗号化されない平文通信なので、デリケートなケースでは安易に使わない事。 SSH によるポート転送との組み合わせを勧めます。少なくとも MovaXterm には VNC 接続の中に SSH ゲートウェイの設定があるのは単純にすごい。

Mac の ”画面共有” は暗号化されないので注意。SSH トンネリングする方法があるので "mac vnc ssh トンネル" などで検索してください。


- まとめ -

一つしかないモニタに複数のホストを扱う事は、システム管理にとっては便利な機能です。しかし、vncserver を改めて研究してみると、そこには大きな脆弱性や欠陥が見えてきました。便利な反面、セキュリティホールでもあるんですね。

今回は Windows の RDP については説明はしませんが、やっぱり RDP 接続も脆弱性があるので、何だかなぁ、という気分です。事業所内のプライベートネットワークであればまだしも、「働き方改革」なんかで、自宅からリモート接続したい、などの要求は高まるばかり。利便さと脆弱性との両立って難しいのです。

ますますインフラ系の技術者にとっては厳しい要求があるのですね。









# by islandcenter | 2020-02-29 13:30 | SUSE | 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)

狭い机の上に、モニタ何台も置けないよ、という事で、Windows から、Mac をリモートデスクトップの様に接続して使う方法です。

あまり使わない Mac mini が、ほとんど iTunes マシンとなっているのですが、ライブラリを切り替えるのが面倒くさくて、つい同じライブラリを聞き続けています。

ライブラリ切り替える度にキーボード引っ張り出して、モニタをHDMIに切り換えて、ってやっていたのですが面倒です。Mac の画面キャプチャも、撮っては、NASに保存して、GIMP で加工してって面倒だし、いい方法がないかと考えていました。

という事で、MovaXterm を使って VNC 画面転送をしします。

- Mac 側の設定 -

Mac 側は「システム環境設定」から「共有」の画面共有を有効にします。

また、Mac 側の IP は固定するか、事前に ifconfig で、IP アドレスを調べておく必要があります。 ip a コマンドじゃないのね...

Windows から Mac へ MovaXterm で VNC デスクトップ共有接続_a0056607_11045223.png

「画面共有」を有効にするユーザに「アクセスを許可」させて、VNC接続するパスワードをセットします。

Windows から Mac へ MovaXterm で VNC デスクトップ共有接続_a0056607_11052356.png


         


- Windows側の操作 -

movaXterm はこちらからダウンロードしてインストールします。

openSUSE のアプリケーションをWindows からGUI操作する。MobaXterm

movaXterm がを起動したら、"Session" を開き、"VNC" 接続します。その時、Mac 側の「画面共有」パスワードをセットすると VNC 接続ができます。

- ちょっと感動した -

どーんと Mac のデスクトップが Windows 側の MovaXterm のウィンドウ内にフルサイズで表示されます。サイズの変更も簡単だし "Fullscreen" 表示にも切り替えられます。

Windows から Mac へ MovaXterm で VNC デスクトップ共有接続_a0056607_11055366.png

Dock が四角いのは、ご愛敬ですが、iTunes の操作程度では、何のストレスも感じません。iMovie とか Quick Time とかはさすがに VNC では無理がありますが、ちょっとした操作であれば、「大体使える」レベルです。

こらなら、普段使いは Windows のヒトでも、「Mac もたまには使う」ヒトにとっては作業スペースの節約にもなります。勿論、Macのための SSH のテキストターミナルも使えます。

普段、SUSE Linux を操作するために MovaXterm を使って Linux のための X サーバー(端末)、 SSH ターミナル便利だなと思って使っていました。色々ひっくり返して突きまわると、こんなに強力、多機能だったとは気が付きませんでした。すまぬ MovaXterm よ。これなら Pro 版買ってもいいくらいです。もうWSLもいらないくらいです。







# by islandcenter | 2020-02-26 11:44 | MacOS | 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)