Fedora Spin Xfceの設定

Contents


389 Directory Server (fc31)

パッケージのインストール

以下のコマンドを実行して、386-ds-base パッケージをインストールする。

# dnf install 386-ds-base
参考文献

7-zip zip unar (fc41) - zip/unzip japanese file name archive

パッケージのインストール

  • zip / unzip
    # dnf install zip unzip [convmv]

    zipファイルに格納されるファイル名のエンコーディングに UTF-8 以外のもの (Shift JIS など)を指定する場合は、convmv パッケージもインストールする。

  • 7z
    # dnf install p7zip-plugins
  • unzr
    # dnf install unar

ファイルの zip アーカイブ作成

アーカイブするファイルまたはディレクトリが存在するディレクトリに移動して、 以下のコマンドを実行する。

  • zip コマンド
    $ zip [-r] [-P <password>] <archive-file> {<file-name>|<dir-name>} [...]
    • オプション/パラメータ
      • -r: ディレクトリを再帰的に圧縮する
      • -P password : 解凍時に指定するパスワードを設定する
      • archive-file : アーカイブファイルを指定する
      • {file-name|dir-name} : アーカイブするファイルまたはディレクトリ を指定する。複数のファイルやディレクトリを指定可能
    • ファイル名のエンコーディング

      zip ファイルに設定されるファイル名のエンコーディングは、アーカイブする ファイルのものがそのまま使用される(Linuxでは UTF-8 である場合が多い)。 ファイル名のエンコーディングに Shift JIS を使用する場合は、convmv コマンド でファイル名のエンコーディングを Shift JIS に変更した後に、zip コマンドで ファイルをアーカイブする。

      以下のコマンドは、files ディレクトリ配下のファイル名を Shift JIS に 変換してから zip 圧縮する場合の例である。

      $ convmv --notest -r -f UTF-8 -t Shift_JIS files
      $ zip -r ≪zipファイル名≫ files
  • 7z コマンド

    アーカイブするファイルまたはディレクトリが存在するディレクトリに移動するか、 -w オプションでアーカイブ対象のファイルまたはディレクトリが存在する ディレクトリを指定して、以下のコマンドを実行する。

    $ 7z a [-p<password>] [-scs<charset>] <archive-file>.zip \
      {<file-name>|<dir-name>} [...]
    • オプション/パラメータ
      • a : アーカイブファイルにファイル/ディレクトリを追加する
      • -ppassword : 解凍時に指定するパスワードを設定する
      • -scscharset : ファイル名/ディレクトリ名のエンコードを指定する。 設定可能なエンコードは、UTF-8、UTF-16LE、UTF-16BE、WIN、DOS である
      • archive-file.zip : アーカイブファイルを指定する。ファイル名の拡張子に 「.zip」を指定すること。
      • {file-name|dir-name} : アーカイブするファイル、ディレクトリを 指定する。複数のファイルやディレクトリを指定可能

ファイルの解凍/一覧表示

  • unzip コマンド
    $ unzip [-l] [-d <output-dir>] [-P <password>] [-O <charset>] <archive-file> \
      [{<file-name>}|<dir-name>} ...]
    • オプション/パラメータ
      • -l : アーカイブファイルの内容を表示し、解凍はしない
      • [-d output-dir : 解凍先のディレクトリを指定する
      • -P password : アーカイブ作成時に設定したパスワードを指定する
      • -O charset : ファイル名のエンコーディング(HTMLのcharsetで指定する 名前)を指定する
      • archive-file : アーカイブファイルを指定する
      • {file-name}|dir-name} : 解凍/一覧表示の対象となるファイル/ ディレクトリの名前を指定する。複数のファイル/ディレクトリを指定可能
  • 7z コマンド
    $ 7z {l|x} [-o<output-dir>] [-p<password>] [-scs<charset>] <archive-file>.zip \
      [{<file-name>|<dir-name>} ...]
    • オプション/パラメータ
      • l : アーカイブファイルの内容を表示する
      • x : アーカイブファイルを解凍する
      • -ooutput-dir : 解凍したファイルの出力先ディレクトリを指定する
      • -ppassword : アーカイブ作成時に設定したパスワードを指定する
      • -scscharset : ファイル名/ディレクトリ名のエンコードを指定する。 設定可能なエンコードは、UTF-8、UTF-16LE、UTF-16BE、WIN、DOS である
      • archive-file.zip : アーカイブファイルを指定する。ファイル名の拡張子に 「.zip」を指定すること。
      • {file-name|dir-name} : 解凍/一覧表示の対象となるファイル/ ディレクトリの名前を指定する。複数のファイル/ディレクトリを指定可能
  • unzr コマンド(解凍のみ)
    $ unar [-o <output-dir>] [-p <password>] [-e <charset> <archive-file>] \
      [{<file-name>}|<dir-name>} ...]
    • オプション/パラメータ
      • -o output-dir : 解凍したファイルの出力先ディレクトリを指定する
      • -p password : アーカイブ作成時に設定したパスワードを指定する
      • -e charset : ファイル名のエンコーディング(HTMLのcharsetで指定する 名前)を指定する。このオプションの省略時は自動判別されたエンコーディング が使用される
      • archive-file : アーカイブファイルを指定する
      • {file-name}|dir-name} : 解凍/一覧表示対象のファイルまたは ディレクトリを指定する。複数のファイル、ディレクトリを指定可能

Apache HTTP Server (fc42)

パッケージのインストール

以下のコマンドを実行して、パッケージをインストールする。

# dnf install httpd

全般的な設定

httpd.conf で指定する設定項目のうち主なものを示す。

  • Listen

    待ち受けるアドレスとポート番号を「アドレス:ポート番号」、または 「ポート番号」の形式で指定する。この項目は複数指定できるので、待ち受ける アドレス、ポートが複数ある場合は、それぞれを指定する。

  • ServerName

    リダイレクトするときにURLに使用するサーバ名とポート番号を 「サーバ名:ポート番号」の形式で設定する。指定を省略するとIPアドレス からの逆引きでサーバ名を取得する。サーバ名のみを指定した場合はリクエストの ポート番号をそのまま使用する。

  • ServerAdmin

    エラー表示などで問い合わせ先(のメールアドレス)の表示内容を設定する。

  • ServerTokens

    応答ヘッダに設定するサーバ情報を指定する。セキュリティの観点から詳細な 情報の設定は推奨されないので、「ProductOnly」を指定した方が良い。

Apache httpd SSL/TLS configuration

  1. パッケージのインストール

    SSL/TLSの接続をサポートする場合は、以下のコマンドを実行してパッケージを インストールする。

    # dnf install mod_ssl
  2. サーバ証明書の準備

    openssl コマンドやkeytool コマンドを使用して、以下のファイルを準備する。

    • private key (秘密鍵)

      サーバ証明書の署名要求ファイルを作成するために必要な private key を作成 する。

    • サーバ証明書(署名要求応答ファイル)
    • 自己認証局の証明書

      自己認証局でサーバ証明書の署名を行った場合は、署名に使用した自己認証局の 証明書を取得しておく。

  3. ssl.conf の設定

    mod_ssl パケージをインストールすると、/etc/httpd/conf.d ディレクトリの下に ssl.conf ファイルが作成され、ポート番号443の<VirtualHost>ディレクティブが 作成されるので、そこに以下の項目を設定する。

    • SSLEngine

      「on」(既定値)を設定する。

    • SSLCertificateFile

      サーバ証明書のファイルの絶対パスを指定する。サーバ証明書は、 /etc/pki/tls/certs/ ディレクトリの下に配置する。

    • SSLCertificateKeyFile

      サーバ証明書の署名要求ファイル作成時に使用した private key の絶対パスを 指定する。暗号化された private key を指定すると、サービス起動時に パスワード入力を要求されるので、httpd を自動起動する場合は、暗号化なしの private key のファイルを設定すること。private key は、 /etc/pki/tls/private/ ディレクトリの下に配置する。

    • SSLCACertificateFile

      自己認証局で署名した場合は、自己認証局の署名ファイルの絶対パスを指定する。 証明書は、/etc/pki/tls/certs/ ディレクトリの下に配置する。

    • ssl.conf の設定例
      Listen 443 https
      ....
      <VirtualHost _default_:443>
      SSLEngine on
      SSLCertificateFile /etc/pki/tls/certs/《server-name》.crt
      SSLCertificateKeyFile /etc/pki/tls/private/《server-name》.key
      SSLCACertificateFile /etc/pki/tls/certs/《CA-name》.crt
      ...
      </VirtualHost>
    • 同一ホストに複数のサーバ名でアクセスする場合

      一つの IP アドレスでいくつかの名前ベースの ウェブサイトを実行する に従って、サーバ名毎に<VirtualHost>ディレクティブを設定する。 同一ホストに「www.example.com」、「www.example.org」の2つのサーバ名で アクセスする場合の設定例を以下に示す。

      Listen 443 https
      NameVirtualHost *:443
      ...
      <VirtualHost *:443>
      #DocumentRoot /www/example1
      ServerName www.example.com
      SSLEngine on
      SLCertificateFile /etc/pki/tls/certs/www.example.com.crt
      SSLCertificateKeyFile /etc/pki/tls/private/www.example.com.key
      ...
      </VirtualHost>
      
      <VirtualHost *:443>
      #DocumentRoot /www/example2
      ServerName www.example.org
      SSLEngine on
      SLCertificateFile /etc/pki/tls/certs/www.example.org.crt
      SSLCertificateKeyFile /etc/pki/tls/private/www.example.org.key
      ...
      </VirtualHost> 

      設定の注意点は以下のとおり。

      • NameVirtualHostと<VirtualHost>に設定するアドレス、ポートは同じものを 設定する
      • 上記の例では、DocumentRoot ディレクティブをコメントアウトしているので、 「www.example.com」、「www.example.org」のどちらでアクセスしても コンテンツは同じ(httpd.conf などで設定された DocumentRoot)になる。 サーバ名毎に別のコンテンツを用意する場合は、それぞれの<VirtulaHost> ディレクティブの中で DocumentRoot ディレクティブで別々のコンテンツの パスを設定する

Apache httpd Reverse Proxy

Reverse Proxy の主な用途は、インターネットからファイアウォール内部のサーバに アクセスする場合に、そのサーバへのリクエストを中継するためにインターネット からアクセス可能なサーバを設置することである。

 ----------      -----------------       -----------
 | Client | ---> | Reverse Proxy | --->  | Backend |
 |        |      |    (Proxy)    |       | Server  |
 ----------      -----------------       -----------

Reverse Proxyの設定手順は以下のとおり。

  1. SELinuxの設定

    以下のコマンドを実行して、SELinuxへ httpd プロセスの権限を設定する。

    # setsebool -P httpd_can_network_connect 1
  2. httpd の設定

    httpdの設定ファイル(/etc/httpd/conf.d/mod_proxy.conf など)を作成して、 以下のディレクティブを設定する。

    • ProxyRequests ディレクティブ

      リバース・プロキシの場合は、Proxy Requestsを Off に設定して、Foward Proxy の機能を無効にする。

    • ProxyPass ディレクティブ

      「ProxyPass path backend-url」を設定して、Reverse Proxy のリクエスト URLのパスが path から始まった場合に、リクエストURLのパスの path 部分を backend-url の後ろに付加して転送する。

    • ProxyPassReverse ディレクティブ

      Backend Server からリダイレクト応答が帰ってきた場合に、Location ヘッダの 内容を調整して Local Server が Client に応答を返すようにする。 「ProxyPassReverse path backend-url」(pathbackend-urlは ProxyPassと 同じもの)を設定して、Background Server からの Location 応答 ヘッダの値の「backend-url」の部分を「path」に置換して Reverse Proxy が Client に応答を返すようにする。

      注 意
      • 「ProxyPreserveHost On」を設定した場合、ProxyPassReserve の挙動が 変わるので、「参考文献」の「Apache Module mod_proxy」のマニュアルを 確認すること。
      • Reverse Proxy のリクエストURLのパスと Backend Server のリクエストURL のパスが異なる場合は、Backend Server のコンテンツの同一ホストへの リンクは、相対パスにする必要がある。Backend Server のコンテンツの 同一ホストへのリンクが絶対パス(「/」で始まるURL)を返す場合は、 下記の「Rewrite links」の項を参照して Apache の設定をすること。
    • ProxyPassReverseCookieDomain ディレクティブ

      「ProxyPassReverseCookieDomain backend-domain proxy-domain」 (backend-domain は Backend Server のドメイン(ホスト名)、 proxy-domain は Reverse Proxy のドメイン(ホスト名))を設定して、 Backend Server から返された Set-Cookie 応答ヘッダーの「Domain=」の 設定値が backend-path である場合は proxy-domain に置換する。

      備 考

      ProxyPassReverseCookieDomain ディレクティブ、ProxyPassReverseCookiePath ディレクティブの設定例は、 ProxyPassReverse ディレクティブのマニュアルを参照のこと。

    • ProxyPassReverseCookiePath ディレクティブ

      「ProxyPassReverseCookiePath backend-path path」(backend-path は Backend Server の URL のパス、path は Reverse Proxy のリクエストURL のパス)を設定して、Backend Server から返された Set-Cookie 応答ヘッダーの 「Path=」の設定値の先頭が「backend-server」と一致する場合は、その部分を 「path」に置換する。

    • 設定例
      <IFModule mod_proxy.c>
        ProxyRequests Off
      
        <Proxy *>
          Order deny,allow
          Allow from all
        </Proxy>
      
        ProxyPass /foo http://example.com/bar
        ProxyPassReverse /foo http://example.com/bar
        ProxyPassReverseCookieDomain example.com <proxy-domain>
        ProxyPassReverseCookiePath /bar /foo
      </IFModule>

      [/etc/httpd/conf.d/mod_proxy.conf]

      上記の設定により、以下のことが行われる。

      • 外部からのクライアントのリクエスト「http://reverse-proxy/foo/...」 (reverse-proxy はReverse Proxyのホスト名)を 「http://example.com/bar/...」 に転送する。
      • 転送先の example.com から Location 応答ヘッダに 「http://example.com/bar/...」が設定された場合は、応答ヘッダの値を 「http://reverse-proxy/foo/...」に変換して外部クライアントに応答を 返す。
      • 転送先の example.com からの応答ヘッダに「Domain=example.com」が設定 されていた場合は、外部クライアントの応答ヘッダに「Domain=proxy-domain」 を設定する。
      • 転送先の example.com からの Set-Cockie 応答ヘッダに「Path=/bar/...」が いた場合は、外部クライアントの Set-Cookie 応答ヘッダに「Path=/foo/...」 を設定する。
    備 考
    • ProxyPass 及び ProxyPassReverse は、複数回の設定が可能である。
    • ProxyPassには、Backend Server のURLの後ろに「key=value」の形式で Backend Server への接続にプールされた接続(load balancing 等)の パラメータを設定することができる。詳細は、 ProxyPass ディレクティブ を参照のこと。
参考文献
Rewrite links

リバースプロキシの構成で Reverse Proxy のパスと Backend Server のリクエストURL のパスが異なる場合は、mod_proxy_html モジュールまたは mod_substitute モジュールのディレクティブを設定して、Backend Server のコンテンツの絶対パス (/から始まるURL)のリンクを書き換える必要がある。

  • mod_proxy_html モジュールによるコンテンツの書き換え

    mod_proxy_html モジュールのディレクティブを設定して、Backend Serverから 返された HTML のリンクの書き換えを設定する。設定手順は以下のとおり。

    1. パッケージのインストール
      # dnf install mod_proxy_html
    2. 以下のディレクティブを設定する。
      • ProxyHTMLEnable

        ディレクティブの値に「On」を設定して、HTML の書き変えを有効にする。

      • xml2EncDefault

        ディレクティブの値に、XML(xhtmlを含む)の文字エンコーディングが未定義の 場合に使用する既定値を設定する。

      • ProxyHTMLCharsetOut

        ディレクティブの値に「*」をして書き換え後の Charset に書き換え前と同じ ものを設定する。

      • RequestHeader

        ディレクティブの値に「unset Accept-Encoding」を設定して、Backend Server が gzip などの圧縮エンコードでコンテンツを返さないようにする。

      • ProxyHTMLLinks

        リンク書き換え対象の HTML タグと属性を設定する。モジュール ドキュメント の「Examples from proxy-html.conf」の内容を設定する。

      • ProxyHTMLURLMap

        ディレクティブの値に「from-pattern to-pattern」を設定して、Backend Server からの応答のHTMLのリンクを「from-pattern」に一致する部分を 「to-pattern」に書き換える。 「ProxyPass "/foo" "http://example.com/bar"」を設定した場合の ProxyHTMLURLMap の設定例を以下に示す。

        ProxyHTMLURLMap "http://example.com/bar" "/foo"
        <Location "/foo">
          ProxyPass "http://example.com/bar"
          ProxyPassReverse "http://example.com/bar"
          ...
          ProxyHTMLURLMap "/bar" "/foo"
        </Location>
    • 設定例

      「ProxyPass "/foo" "http://example.com/bar"」を設定した場合の mod_proxy_html モジュールの設定例を以下に示す。

      #LoadModule proxy_module      modules/mod_proxy.so
      #LoadModule proxy_http_module modules/mod_proxy_http.so
      #LoadFile                     /usr/lib/libxml2.so
      #LoadModule proxy_html_module modules/mod_proxy_html.so
      #LoadModule xml2enc_module    modules/mod_xml2enc.so
      
      ProxyRequests Off
      
      <Proxy *>
        Order deny,allow
        Allow from all
      </Proxy>
      
      # begin mod_proxy_html settings
      <IfModule mod_proxy_html.c>
        ProxyHTMLLinks  a          href
        ProxyHTMLLinks  area       href
        ProxyHTMLLinks  link       href
        ProxyHTMLLinks  img        src longdesc usemap
        ProxyHTMLLinks  object     classid codebase data usemap
        ProxyHTMLLinks  q          cite
        ProxyHTMLLinks  blockquote cite
        ProxyHTMLLinks  ins        cite
        ProxyHTMLLinks  del        cite
        ProxyHTMLLinks  form       action
        ProxyHTMLLinks  input      src usemap
        ProxyHTMLLinks  head       profile
        ProxyHTMLLinks  base       href
        ProxyHTMLLinks  script     src for
        ProxyHTMLURLMap "http://example.com/bar/" "/foo/"
      </IfModule>
      # end mod_proxy_html settings
      
      <Location "/foo/">
        ProxyPass "http://example.com/bar/"
        ProxyPassReverse "http://example.com/bar/"
        ProxyPassReverseCookieDomain "example.com" "<local-domain>"
        ProxyPassReverseCookiePath "/bar" "/foo"
      # begin mod_proxy_html settings
        <IfModule mod_proxy_html.c>
          ProxyHTMLEnable On
          xml2EncDefault UTF-8
          ProxyHTMLCharsetOut *
          RequestHeader unset Accept-Encoding
          ProxyHTMLURLMap "/bar/" "/foo/"
        </IfModule>
      # end mod_proxy_html settings
      </Location>
    参考文献
  • mod_substitute によるコンテンツの書き換え

    mod_proxy_html モジュールでは、HTMLに埋め込まれた javascript の関数呼び出し の引数などは、書き換えることはできない。このような場合は、mod_substitute モジュールを使用して、コンテンツの書き変えを行なう。

    • ディレクティブの設定
      • AddOutputFilterByType

        ディレクティブの値に「SUBSTITUTE media-type [media-type ...]」を 指定して、コンテンツの書き換え対象となる media-type を指定する。

      • Substitute
        • ディレクティブの値に 「s/置換対象の正規表現/置換する値/[flag[flag...]」を設定して、 コンテンツの書き変えルールを設定する
        • flugに「i」を設定すると、置換対象の簎表現は、大文字小文字を区別 しなくなる。
        • 置換対象の正規表現置換する値に「/」が含まれる場合は、 「s|置換対象の正規表現|置換する値|」と設定する。
    • 設定例

      「ProxyPass "/foo" "http://example.com/bar"」を設定した場合に、 Backend Server からの応答の HTML 及び JavaScript を以下のように書き換え たいとする。

      • 「("/bar/」 => 「("/foo/」

      この場合の設定例を以下に示す。

      #LoadModule proxy_module      modules/mod_proxy.so
      #LoadModule proxy_http_module modules/mod_proxy_http.so
      #LoadModule filter_module     modules/mod_filter.so
      #LoadModule substitute_module modules/mod_substitute.so
      
      ProxyRequests Off
      
      <Proxy *>
        Order deny,allow
        Allow from all
      </Proxy>
      
      <Location "/foo/">
        ProxyPass "http://example.com/bar/"
        ProxyPassReverse "http://example.com/bar/"
      # begin mod_substitute settings
        AddOutputFilterByType SUBSTITUTE text/html text/javascript application/javascript
        Substitute s|(\(['"])/bar/|$1/foo/|
      # end mod_substitute settings
      </Location>
    参考文献
load balancing

Load Balancer は自身が受け取ったリクエストを Balancer Member に振り分けて 転送する。

                 [Reverse Proxy]          [Backend Servers/Balancing Group]
 ----------      -----------------        -------------------
 | Client | ---> | Load Balancer | -----> | Balancer Member |
 |        |      |    (Proxy)    |   |    | 192.168.1.50:80 |
 ----------      -----------------   |    -------------------
                                     |    -------------------
                                      `-> | Balancer Member |
                                          | 192.168.1.51:80 |
                                          -------------------
  • httpd の設定

    httpdの設定ファイル(/etc/httpd/conf.d/mod_proxy_balancer.conf など)を 作成して、以下のディレクティブを設定する。

    • <Proxy> ディレクティブ

      「<Proxy "balancer://balancer-name">」を設定して、このセクションの 中に Balancer Member を設定して、Balancing Group(Load Balancer の リクエスト転送先のグループ)を定義する。

      • BalancerMember ディレクティブ

        「BalancerMember backend-url [key=value [key=value ...]]」を 設定して Load Balancer が受信したリクエストを backend-url のURLに 転送する。backend-url の後ろに key=value を設定して、 BalancerMember パラメーターを設定することができる。BalancerMember パラメーターについては、 ProxyPass ディレクティブの「Worker|BalancerMember parameters」の項を参照のこと。

        備 考
        • lbmethod Balancer パラメータ

          これは負荷分散の方式を指定する Balancer パラメータである。設定を 省略すると、mod_lbmethod_byrequests モジュールで提供される 「byrequests」(リクエスト単位で Backend Serverを振り分ける)が 設定される。

    • <Location> ディレクティブ

      「<Location "path">」を設定して、このセクションの中で ProxyPass、 ProxyPassReverse ディレクティブを設定する。path には Load Balancer の リクエスト振り分け対象となるリクエストURLのパスを設定する。

      • ProxySet ディレクティブ

        Balancer パラメーターまたは BalancerMember パラメーターを設定する。

      • ProxyPass ディレクティブ

        「ProxyPass "balancer://balancer-name" key=value [key=value ...]」 を指定して、Load Balancer が受信したリクエストURL のパスが <Location "path"> で指定した path で始まる場合に、リクエストURLの パスの path 以降の部分を Balancer Member の URL の後ろに追加して Balancer Member にリクエストを転送する。key=value には Balancer パラメーターを指定する。

      • ProxyPassReverse ディレクティブ

        「ProxyPassReverse "balancer://balancer-name"」を指定して、Balancer Member からの応答ヘッダ(Location ヘッダ等)のURLを調整する。 key=value には Balancer パラメータを指定する。

    [設定例]

    #LoadModule proxy_module               modules/mod_proxy.so
    #LoadModule proxy_http_module          modules/mod_proxy_http.so
    #LoadModule proxy_balancer_module      modules/mod_proxy_balancer.so
    #LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
    
    <Proxy "balancer://mycluster">
      BalancerMember "http://192.168.1.50:80"
      BalancerMember "http://192.168.1.51:80"
    </Proxy>
    
    <Location "/foo">
      ProxyPass        "balancer://mycluster"
      ProxyPassReverse "balancer://mycluster"
    </Location>
  • ヘルスチェックの設定

    mod_proxy_hcheck モジュールが提供する BalancerMember パラメーターを使用して、Backend Server のヘルスチェックを設定することができる。

    Backend Server に「/status.php」のURLをGETメソッドで10秒間隔でリクエストし、 応答ステータスが2xx、3xx の場合にヘルスチェックを成功とする場合の設定例を 以下に示す。

    #LoadModule watchdog_module     modules/mod_watchdog.so
    #LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
    ...
    
    <Proxy "balancer://mycluster">
      BalancerMember ...
      ...
      ProxySet hcmethod=GET hcuri=/status.php hcinterval=10
    #          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    </Proxy>
    
    <Location "/foo">
      ProxyPass        "balancer://mycluster"
      ...
    </Location>
  • stickyness の設定

    Webアプリケーションのセッションごとに Backend Server を固定して load balancing するためには、stickysession Balancer パラメーター、route BalamcerMember パラメーター等を設定する。

    • Balancer parameter
      • stickysession - sticky session の Cockie の名前を設定
      • scolonpathdelim - On を設定すると「;」を Cockie の name=value の 区切り文字とみなす。J2EE (Tomcatなど)の場合は「On」を設定すること。
    • BalancerMember parameter
      • route - Backend Server を識別するための名前を設定する。

    [設定例]

    <Proxy "balancer://mycluster">
      BalancerMember "http://192.168.1.50:80" route=node1
      BalancerMember "http://192.168.1.51:80" route=node2
      ProxySet stickysession=JSESSIONID|jsessionid scolonpathdelim=On
    </Proxy>
    <Location "/foo">
      ProxyPass        "balancer://mycluster"
      ProxyPassReverse "balancer://mycluster"
    </Location>

Forward Proxy

mod_proxy.conf ファイルを作成して、/etc/httpd/conf.d ディレクトリの下に 配置し、以下のように記述する。

<IFModule mod_proxy.c>
  ProxyRequests On
  ProxyVia On

  <Proxy 《proxy-url》>
    Order deny,allow
    Deny from all
    Allow from [hostname or network address]
  </Proxy>

  <ProxyMatch 《regex-url》>
    ...
  </ProxyMatch>
</IFModule>
  • マニュアル:mod_proxy
  • <Proxy>ディレクティブの《proxy-url》の設定

    Proxyの対象となるURL。URLの後ろにワイルドカード「*」を使用して、ディレクトリ 配下のURLを対象にできる。

    <Proxy http://example.com/foo/*>
        ...
    </Proxy>
  • <ProxyMatch>ディレクティブのURLの設定

    <ProxyMatch>ディレクティブに設定するURLは正規表現で指定する。 ディレクティブの中の設定は、<Proxy>ディレクティブと同じである。

    <ProxyMatch https?://example.com/foo/.*>
        ...
    </ProxyMatch>
最小限のURLの設定方法

httpdのエラーログ(/var/log/httpd/error_log)を開き、以下のように出力されて いる行を探す。

AH01797: client denied by server configuration: proxy:xxxxxxxxxx

この行の「proxy:」以降の出力結果(例は以下のとおり)で、必要と思われるものを <Proxy>ディレクティブまたは<ProxyMatch>ディレクティブに指定する。

  • http://ctldl.windowsupdate.com/msdownload/...
  • fe2cr.update.microsoft.com:443
  • Allow from の設定

    Allow from には、Proxyの送信を許可するホスト名またはネットワークアドレスを 指定する。

  • [hostname or network address]の設定

    ホスト名、またはネットワークアドレスを指定する。記述の書式は、 http://httpd.apache.org/docs/2.4/mod/mod_proxy.html#access を参照の こと。以下に設定例を示す。

    • ホスト名
      • example.org - ホスト名ののFQDN
      • .net.example.edu - ホストのドメイン名。FQDNの後ろが指定されたものと一致 すれば対象になる。
    • ネットワークアドレス
      • 10.1.2.3 : 完全なIPアドレス
      • 192.168.1.104 192.168.1.205 : 完全なIPアドレスのリスト
      • 10.1 : 部分的なIPアドレス。この例ではアドレスの先頭2バイトが「10.1」で あるものがすべて対象になる。
      • 10.1.0.0/255.255.0.0 : ネットワークアドレスとネットワークマスク
      • 10.1.0.0/16 : ネットワークアドレスとマスクのビット数(CIDR表記)
    設定例
    • http://example.com/foo/ とその配下のURLに対する設定

      以下のクライアントは、http://example.com/foo/* へのproxyを許可する。

      • 192.168.56.*
      • 10.0.*.*
      • *.net.example.edu
        <Proxy http://example.com/foo/*>
          Order deny, allow
          Deny from all
          Allow from 192.168.56 10.1 .net.example.edu
        </Proxy>
  • アクセス先を絞って許可する設定の例
    • Windows Update を許可する設定

      192.168.56.0/24 からの Windows Update へのproxy接続を許可する。

        <Proxy http*://*.microsoft.com/*>
          Order deny,allow
          Deny from all
          Allow from 192.168.56.0/24
        </Proxy>
      
        <Proxy http*://*.windowsupdate.com/*>
          Order deny,allow
          Deny from all
          Allow from 192.168.56.0/24
        </Proxy>

      ※ Windows 10の場合は、以下のコマンドを実行してproxyサーバの設定をすること

      > netsh winhttp set proxy <proxyサーバ名>:<ポート番号>
    • Notton Internet Security を許可する設定

      192.168.56.0/24 からの Norton Inernet Security へのproxy接続を許可する。

        <ProxyMatch https?://.*\.symantec\.com/.*>
          Order deny,allow
          Deny from all
          Allow from 192.168.56.0/24
        </ProxyMatch>
      
        <ProxyMatch https?://.*\.symantecliveupdate\.com/.*>
          Order deny,allow
          Deny from all
          Allow from 192.168.56.0/24
        </ProxyMatch>
      
        <ProxyMatch https?://.*\.norton\.com/.*>
          Order deny,allow
          Deny from all
          Allow from 192.168.56.0/24
        </ProxyMatch>

Server Side Includes

Server Side Includes (略称:SSI) は、CGI や動的なコンテンツ生成技術を使用 せずに、HTML にディレクティブを配置することで HTML に動的に生成された コンテンツを追加するものである。

SSIの理容手順は、 Apache チュートリアル: Server Side Includes 入門 を参照すること。以下では、SSI を有効にする手順とSSIを使用して Apache の サーバー変数を表示する例とHTTPリクエストヘッダを表示する例を示す。

  • SSI の有効化

    Apache の設定ファイル(/etc/httpd/conf/httpd.conf、 /var/www/html 配下の .htaccess、/etc/httpd/conf.d/xxx.conf の何れか)に下記の設定を追加して、 拡張子が「.shtml」のファイルに対して SSI を有効化する。

    <Location /foo>
      Options +Includes
      AddType text/html .shtml
      AddOutputFilter INCLUDES .shtml
    </Location>
  • サーバー変数の表示

    .shtml ファイルに以下記述を行い、Apacheのサーバー変数の値を表示する。

     <!--#echo var="<<サーバー変数名>>" --> 

    [server-variables.shtml]

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
    <html>
      <head>
        <title>Server Variables</title>
        <meta charset="utf-8"/>
      </head>
      <body>
        <h2>Server Variables</h2>
        <table border="1" cellspacing="0">
        <tr>
          <td>Name</td><td>Value</td>
        </tr>
        <tr>
          <td>REQUEST_METHOD</td>
          <td><!--#echo var="REQUEST_METHOD" --></td>
        </tr>
        <tr>
          <td>REQUEST_SCHEME</td>
          <td><!--#echo var="REQUEST_SCHEME" --></td>
        </tr>
        <tr>
          <td>SERVER_NAME</td>
          <td><!--#echo var="SERVER_NAME" --></td>
        </tr>
        <tr>
          <td>SERVER_PORT</td>
          <td><!--#echo var="SERVER_PORT" --></td>
        </tr>
        <tr>
          <td>REQUEST_URI</td>
          <td><!--#echo var="REQUEST_URI" --></td>
        </tr>
        <tr>
          <td>DOCUMENT_URI</td>
          <td><!--#echo var="DOCUMENT_URI" --></td>
        </tr>
        <tr>
          <td>QUERY_STRING</td>
          <td><!--#echo var="QUERY_STRING" --></td>
        </tr>
        <tr>
          <td>DOCUMENT_ROOT</td>
          <td><!--#echo var="DOCUMENT_ROOT" --></td>
        </tr>
        <tr>
          <td>REMOTE_ADDR</td>
          <td><!--#echo var="REMOTE_ADDR" --></td>
        </tr>
        </table>
      </body>
    </html>
  • リクエストヘッダの表示

    .shtml ファイルに以下記述を行い、リクエストヘッダの値を表示する。

     <!--#echo var="<<リクエストヘッダ変数名>>" --> 

    リクエストヘッダ変数名は、「HTTP_」に続けて、リクエストヘッダ名の 文字列の「-」を「_」に変換したものを追加したものである。例えば、 「User-Agent」ヘッダの値を表示する場合は、以下のように記述する。

     <!--#echo var="HTTP_User_Agent" --> 

    [request-header.shtml]

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
    <html>
      <head>
        <title>Server Variables</title>
        <meta charset="utf-8"/>
      </head>
      <body>
        <h2>Request Headers</h2>
        <table border="1" cellspacing="0">
        <tr>
          <td>Name</td><td>Value</td>
        </tr>
        <tr>
          <td>Accept-Encoding</td>
          <td><!--#echo var="HTTP_Accept_Encoding" --></td>
        </tr>
        <tr>
          <td>Accept-Language</td>
          <td><!--#echo var="HTTP_Accept_Language" --></td>
        </tr>
        <tr>
          <td>Authorization</td>
          <td><!--#echo var="HTTP_Authorization" --></td>
        </tr>
        <tr>
          <td>Cookie</td>
          <td><!--#echo var="HTTP_Cookie" --></td>
        </tr>
        <tr>
          <td>Host</td>
          <td><!--#echo var="HTTP_Host" --></td>
        </tr>
        <tr>
          <td>Referer</td>
          <td><!--#echo var="HTTP_Referer" --></td>
        </tr>
        <tr>
          <td>User-Agent</td>
          <td><!--#echo var="HTTP_User_Agent" --></td>
        </tr>
        </table>
      </body>
    </html>
参考文献

Apache Tomcat Service (fc31)

Apache Tomcatのサイトからバイナリを取得して、サービスとして設定する手順を示す。

バイナリファイルの取得

http://tomcat.apache.org/ の「Download」ページから「Binary Distributions」 の zip 形式の Core ファイル(apache-tomcat-<version>.zip)を取得する。

インストール

  • Apache Tomcatのインストール

    取得したバイナリファイルをインストール先のディレクトリ(例:/opt)の下で 解凍する。バージョンアップ時にUnitファイルの書き換えを抑止するために /opt ディレクトリの下で「ln -sf tomcat-install-dir tomcat」コマンドを実行する。

  • JREのインストール

    JRE (Java Runtime Environment)をインストールする。以下のコマンドは、 OpenJDK 11の headless版(GUI機能を持たないもの)のインストール例である。

    # dnf install java-11-openjdk-headless

Unitファイル

/usr/lib/systemd/system ディレクトリの下に tomcat.service ファイルを作成し、 以下の内容を記述する。

[Unit]
Description=Apache Tomcat Service
After=syslog.target network.target

[Service]
Type=forking
EnvironmentFile=-/etc/tomcat/conf/tomcat.conf
Environment="CATALINA_OPTS=-Xms<size> -Xmx<size>"
ExecStart=<tomcat-install-dir>/bin/startup.sh
ExecStop=<tomcat-install-dir>/bin/shutdown.sh
SuccessExitStatus=143
User=tomcat

[Install]
WantedBy=multi-user.target

[/uar/lib/systemd/system/tomcat.service]

  • EnvironmentFile=[-]config-file-path

    CATALINA_OPTS などTomcat実行時に設定する環境変数が長くなる場合は、 config-file-path で指定したファイルに環境変数を設定する。ファイル・パスの 前に「-」を付けると、指定したファイルが存在しない場合でもエラーとはしない。

  • Environment="CATALINA_OPTS=..."

    CATALINA_OPTS 環境変数を設定する。CATALINA_OPTS 環境変数は、Tomcat開始時 (ExecStart実行時)にJVM に渡される引数を指定する。上記の例では、Heep領域の 初期値と最大値を指定している。指定するメモリのサイズは、1Mバイト(1024バイト) の倍数で、単位k/m/gを付けて指定することができる。

    Tomcat停止時(ExecStop実行時)はCATALINA_OPTSに設定された引数はJVNに 渡されない。Tomcat開始時/停止時共にJVNに引数を渡す場合は、JAVA_OPTS 環境変数にJVMに渡す引数を設定すること。

  • Uesr=tomcat

    tomcatユーザでTomcatのサービスを実行する。この設定をした場合は、以下の 設定をして、tomcatグループでTomcatが実行可能となるようにする。

    1. tomcatユーザ、グループの作成

      以下のコマンドを実行してtomcatユーザ及びグループは作成する。groupadd、 および useradd コマンドに -r オプションを付けて システムアカウント (IDが 999 以下のアカウント)を作成する。

      # groupadd -r tomcat
      # useradd -d /opt/tomcat -g tomcat -s /sbin/nologin -r tomcat
    2. tomcatグループのアクセス権設定

      以下のコマンドを実行して、Tomcatインストールディレクトリ、及びその配下の ファイル、ディレクトリに対してグループに tomcat を指定する。また、tomcat グループに対してディレクトリ、ファイルの読み取り権限を設定する。

      # chgrp -R tomcat <tomcat-install-dir>
      # chmod -R g+r <tomcat-install-dir>
      # chmod g+x <tomcat-install-dir>/conf
    3. tomcatグループの書き込み権限設定

      以下のコマンドを実行して、tomcat-install-dir配下の logs、temp、webapps、 work ディレクトリに対し tomcat グループの書き込み権限を設定する。

      # chmod -R g+w logs temp webapps work

    この設定を省略すると、root権限でTomcatサービスを実行する。

Apache httpd との連携

Apache httpd でリクエストを受け付け、それを Tomcatに転送する場合は、Apache httpd の Remote Proxy の設定を行って実現する。

Apache httpd で SSL/TLS 接続を受け付け、コンテンツの復号を行った後に Tomcat に転送するための設定を以下に示す。

  1. SELinuxの設定

    以下のコマンドを実行して、SELinuxへ httpd プロセスの権限を設定する。

    # setsebool -P httpd_can_network_connect 1
  2. Apache httpd の設定
    • ssl.conf の設定

      SSL/TLS の要求を Tomcatに転送するための設定をする。

      /etc/httpd/conf.d/ssl.conf ファイルの<Virtual Host>ディレクティブに 以下の設定をする。

      • Apache httpd SSL/TLS configuration の設定をする。
      • Apache httpd Reverse Proxyの設定をする。
        • ProxyPreserveHost

          On を指定すると、proxy先のホスト(Tomcat service)に送る host ヘッダ の内容を ProxyPass のURLに指定したホスト名の代わりに受信したリクエスト の host ヘッダの内容(ブラウザで指定したURLのホスト名)に設定する。 通常は Off(既定値) にすることが推奨されている。

        • ProxyPass

          「ProxyPass / http://localhost:8080/」を指定して、Apache httpd が が受信したリクエスト全てを Tomcat が待ち受けているポート番号8080に 転送する。

        • ProxyPassReverse

          「ProxyPassReverse / http://localhost:8080/」を指定して、 リモート・サーバのリダイレクト要求を必ずクライアントが処理するように する。

      • ssl.conf の設定例
        Listen 443 https
        ...
        <VirtualHost _default_:443>
        SSLEngine on
        SLCertificateFile /etc/pki/tls/certs/《server-name》.pem
        SSLCertificateKeyFile /etc/pki/tls/private/《server-name》.key
        ...
        #  Reverse Proxy to tomcat service
        <IFModule mod_proxy.c>
          ProxyRequests Off
          #ProxyPreserveHost On
          ProxyPass / http://localhost:8080/
          ProxyPassReverse / http://localhost:8080/
        </IFModule>
        </VirtualHost>
    • httpd.conf の設定

      ポート番号 80 の VirtualHost ディレクティブの中で、http の 要求を https にリダイレクト(サーバ名、リクエストURIはそのままで)する設定を記述する。

      <VirtualHost _default_:80>
        RewriteEngine on
        RewriteCond %{HTTPS} off
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
      </VirtualHost>

Serverの設定

  1. 設定ファイルの種類と場所
    • ${CATALINA_HOME}/conf/server.xml

      tomcatサービスで動く Web Application 全体に適用される設定を記述する。

    • ${CATALINA_HOME}/webapps/webapp-name/META-INF/context.xml

      Web Application個別に適用される設定を記述する。

  2. SSLの設定

    Tomcat が直接 SSL を処理する場合は、server.xml の Connector タグを設定する。

    <Connector
        protocol="org.apache.coyote.http11.Http11NioProtocol"
        port="8443" maxThreads="200"
        scheme="https" secure="true" SSLEnabled="true"
      <SSLHostConfig protocols="TLSv1.2">
        <Certificate
            certificateFile="/path/to/certificate.crt"
            certificateKeyFile="/path/to/private-key.key" />
      </SSLHostConfig>
    />

    [設定例]

    参考文献

Context の設定

  1. JDBC Data Sourceの設定

    Tomcatは Apache Commons DBCP (Database connection pooling service) を サポートしている。以下に、Apache Tomcat User Guideの JNDI Resources How-To の要約を記載する。

    1. JDBC Driverのインストール

      接続対象のDBMSのJDBCドライバーを $CATALINA_HOME/lib ディレクトリの下に 配置する。

    2. Resource Requirements の設定

      ${CATALINA_HOME}/webapps/webapp-name/WEB-INF/web.xml に以下の記述を する。

      <resource-ref>
        <description>接続するData Srouceの説明</description>
        <res-ref-name>jdbc/《data-source-name》</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
      </resource-ref>
    3. context.xml の設定

      ${CATALINA_HOME}/webapps/webapp-name/META-INF/context.xml に以下の 記述をする。以下はHyperSQL(HSQLDB)の例である。

      <Context ...>
        ...
        <Resource name="jdbc/《data-source-name》"
                  auth="Container"
                  type="javax.sql.DataSource"
                  username="《db-username》"
                  password="《db-password》"
                  driverClassName="org.hsql.jdbcDriver"
                  url="jdbc:HypersonicSQL:database"
                  maxTotal="8"
                  maxIdle="4"/>
        ...
      </Context>
      補 足

      <Resource>タグの各属性の説明については、 JNDI Resources How-To を参照すること。

    4. DBMSごとの設定例

      代表的なDBMSの設定礼については、 Database Connection Pool (DBCP 2) Configurations を参照のこと。

セキュリティ対策


Audacious (fc27) - audio player

パッケージのインストール

# dnf install audacious

オーディオの設定

メニューから「ファイル」→「設定」を選択して「Audaciousの設定」画面を開いて 設定をする。

  • オーディオ
    • 出力プラグインを「ALSA出力」にする
  • プラグイン
    • 「エフェクト」タブを選択し、「サンプリング周波数コンバーター」にチェックを 付けて以下の「設定」をクリックし、以下の設定をする。
      • 「レートマッピング」にチェックを付けて、周波数毎にアップサンプリングする 周波数を設定する。

Audio Configuration (fc35)

最小構成でインストールした場合などで、Audioが有効になっていない場合にAudioを 有効にする手順を以下に示す。

  1. 以下のコマンドを実行して、パッケージをインストールする。
    # dnf install alsa-plugins-pulseaudio pavucontrol alsa-firmware
    備 考
    • CmetOS 7/8 の場合でもインストールするパッケージ名は同じである。
    • CentOS 7 は、この手順だけではサウンドカードを認識しない。原因は不明。
  2. 以下のコマンドを実行して、ログインユーザーを audio グループに入れる。
    # usermod -aG audio <login-user>
  3. システムを再起動する。
参考文献

Autofs (fc40)

AutoFS はリムーバブルメディアやネットワーク共有などが接続されたりアクセス されたときに自動でマウントするパッケージです。

  1. パッケージのインストール
    # dnf install autofs
参考文献

bash (fc35)

シェル組み込みコマンドを含めた Unix シェルの情報を記載する。

getopts 組み込みコマンド

getops はシェルの組み込みコマンドで、シェル引数のチェックと引数値の取得を する機能を提供する。

  • getops コマンドの書式

    getops flag_a[:][flag_b[:]] name

    • flag_aflag_b:コマンドに指定するフラグの名前(アルファベット 1文字)。フラグ名の後ろに「:」を付けるとそのフラグは引数を持つことを 示す。
    • name: getopsコマンドが取得したフラグ名を格納する変数名。フラグが引数を 持つ場合は、変数「OPTARG」に格納される。
  • 使用例
    #!/bin/sh
    ...
    while getopts a:bh OPT
    do
        case $OPT in
        a)
            A_VAL=$OPTARG
            ;;
        b)
            B_VAL=yes
            ;;
        ...
        h|*)
            echo "Usage `basename $0` ..."
            exit
            ;;
        esac
    done

    説明

    • この例では、フラグ -a は引数を持ち、-b、-h は引数を持たない。
    • コマンドの引数に「-a value_a」が指定されると、環境変数「A_VAL」に value_a が設定される。
    • コマンドの引数に「-b」が指定されると、環境変数「B_VAL」に「yes」が設定 される。
    • コマンドの引数に「-h」が指定された場合、または「-a」「-b」「-h」以外の フラグが指定された場合に「Usage ...」のメッセージを出力する。
    • コマンドの引数に -a、-b、-h 以外が指定されると、引数エラーのメッセージが 表示される。
    参考文献

BVE 5.7 (fc33) - Train Simulator

BVE 5.7 on wine

BVE (Train Simulator)は、dotnet 3.5で実装されたWindowsゲームアプリケーション だが、これをwine上で動かすための手順を以下に示す。

  1. wineの設定
    1. wineのインストール

      以下のコマンドを実行して、wine及びwinetricksをインストールする。

      # dnf install wine winetricks

      インストールが終わったら、以下のコマンドを実行して、「Wine 設定」画面が 表示されたら画面を閉じる。

      $ WINEPREFIX=<wine-data-dir> WINEARCH=win32 winecfg

      wine-data-dir は、Wine のデータを格納するディレクトリのパスを 指定する。

    2. winetricks のインストール

      Wine topicsの「winetricks及び関連パッケージのインストール」を 参照して、winetricks(winetricksパッケージが使用できない場合) と書庫展開 ツールをインストールする。

    3. 依存ライブラリのインストール

      winetricks コマンドを実行して、以下のライブラリをインストールする。

      • msxml3
      • dotnet35sp1 (.NET Framework 3.5 SP1)
      • d3dx9_43 (Bveのシナリオ読み込み時のエラー回避用)
      • fakejapanese_ipamona (日本語フォント)

      実行するコマンドは、以下のとおり。

      $ WINEPREFIX=<wine-data-dir> WINEARCH=win32 winetricks -q msxml3 dotnet35sp1 \
        d3dx9_43 fakejapanese_ipamona
  2. BVE 5.7のインストール

    以下のURLから「古いバージョンのダウンロード ⇒Bve trainsim 5.7 (インストーラーなし)」と「京成千葉線シナリオデータ」を ダウンロードする。

    • http://bvets.net/jp/download/

      ダウンロードしたら、それぞれのZIPファイルを解凍して、適切なディレクトリに 配置する。

  3. Master Controller IIの設定
    1. Master Controller IIの電源を入れ、シリアルポート→USB変換アダプターを 介してUSBをPCに接続する。
    2. 「ls /dev | grep -i usb」を実行して、USBのデバイスを確認する。 ここではUSBデバイスが「/dev/ttyUSB0」として以降の説明を進める。
    3. wine-data-dir/dosdevices ディレクトリに移り、以下のコマンドを 実行して、「/dev/ttyUSB0」へのシンボリックリンクを「com0」の名前で 作成する。
      $ ln -s /dev/ttyUSB0 com0
    4. 以下のコマンドを実行して、Master Controller IIを使用するユーザーを dialoutグループに追加する。
      # usermod -a -G dialout <ログインユーザー>

      追加したら、そのユーザーでログインし直す。

    5. wineを使用してBveを開き、右クリックメニューの「設定」を選択して 「設定」画面を開いて、「入力デバイス」タブを選択し、「追加のデバイス」に 表示されている「TS Master Controller」にチェックを付ける。
出 典

路線データ、車両データのインストール

  1. データの取得

    以下URLから路線データ、車両データのダウンロードページを取得する。

  2. 路線データ、車両データのインストール
    • BVE本体
      ダウンロードURL http://bvets.net/jp/download/zip.html
      インストール 本体は、bvets5-7.zip を解凍する。 京成線の路線データと車両データは、keisei5-7.zipを解凍し、 BveTsフォルダの下にある Scenarios ディレクトリを適切な 位置に配置する。BVEからシナリオを最初に読み込むときは、 このディレクトリを指定する。
    • 中央東線
      シナリオURL http://kaisyunn.wixsite.com/convincing/-2
      シナリオ インストール Scenarios.zipをunarで解凍、作成されたScenariosディレクトリ 配下のファイル、ディレクトリをシナリオディレクトリの下に移動 する。
      車両URL https://bitbucket.org/mikangogo/jrtrainpack/wiki/Home
      車両 インストール TrainPack.zipを解凍し、作成されたScenariosディレクトリ配下 のファイル、ディレクトリをシナリオディレクトリの下に移動 する。
    • 武蔵野線
      シナリオURL http://kashiwa.mokuren.ne.jp/download/
      シナリオ インストール 「unzip -d <シナリオディレクトリ> <ZIPファイル>」 コマンドを実行する。
      車両URL http://kashiwa.mokuren.ne.jp/download/ (旅客用)
      車両 インストール 車両データを全てダウンロードし、ダウンロードしたZIPファイルを 「unzip -d <シナリオディレクトリ> <ZIPファイル>」 コマンドを実行する。
      車両URL http://waisroom.sakura.ne.jp/ (貨物用)
      車両 インストール 目的の車両データ(例:EF65)をダウンロードし、ダウンロードした 書庫ファイル(例:EF65.7z)をunarコマンドで解凍する。解凍された ディレクトリ(例:EF65/EF65)をシナリオディレクトリの下に移動 する。シナリオディレクトリ配下のmaihime_musashinno_8071.txt ファイルを開き、「Vehicle=」に車両データ (例:EF65\vehicle\65_vehicle1.txt)を設定する。
    • 東急東横線・みなとみらい線
      シナリオURL http://csp2206.exblog.jp/22573868/
      シナリオ インストール BVE5TYMM線.zipをunarで解凍し、作成されたVBE5TYMM/Scenarios ディレクトリ配下のファイル、ディレクトリをシナリオ ディレクトリの下に移動する。 bve5TYMM線サウンド.zipをunarで解凍し、作成された bve5TYMM線サウンド/Scenariosディレクトリ配下のファイル、 ディレクトリをシナリオディレクトリの下に移動する。
      車両URL http://www.nozomi.vc/02_toyoko/130316/TOQ5050cs10_10.zip
      車両 インストール TOQ5050cs10_10.zipを解凍し、作成されたTOQ5050cs10_10 ディレクトリをシナリオディレクトリ配下のUsao ディレクトリの下に移動する。
      車両URL http://csp2206.exblog.jp/22573868/
      車両 インストール 東急5050系8両.zipをunarで解凍し、東急5050系8両/Scenarios ディレクトリ配下のファイル、ディレクトリをシナリオ ディレクトリの下に移動する。
    • 阪急 神宝京3線
      シナリオURL http://yahoo.jp/box/_6jqQP
      車両 インストール ダウンロードしたHankyu*.zipファイルを解凍し、解凍された Hankyu*/Scenarios ディレクトリ配下のディレクトリを シナリオディレクトリの下にコピーする
      車両URL http://fwchbve.html.xdomain.jp/Subhtml/BVEdata.html
      車両 インストール ダウンロードしたHankyu*.zipファイルを解凍し、解凍された Hankyu*/Scenarios ディレクトリ配下のディレクトリを シナリオディレクトリの下にコピーする
      車両URL http://kty-bvememo.hatenablog.jp/entry/hq9300
      車両 インストール ダウンロードした HQ9300_BVE5_ntfiv_1.2.exe ファイルをwineで 実行し、解凍された HQ9300_BVE5_ntfiv_1.2/Scenarios 配下の ディレクトリをシナリオディレクトリの下に移動する
      車両URL http://blogs.yahoo.co.jp/kei_r2313
      車両 インストール ダウンロードしたZIPファイルを解凍し、解凍された 「Hankyu5300  kei/Hankyu5300/Scenarios/」配下のディレクトリ をシナリオディレクトリの下に移動する
      車両URL https://protot-number1train.wixsite.com/mysite/bve5-3300
      車両 インストール ダウンロードしたZIPファイルを解凍し、解凍された scenarios 配下のディレクトリをシナリオディレクトリの下に移動する

Live USB の作成

BVE の実行環境をUSBから起動するための Live USB 作成手順を以下に示す。 なお、Live USB の作成手順の詳細は、 livecd-tools を参照すること。

  1. Kickstart ファイルの編集
    1. Kickstart ファイルのコピー

      /usr/share/spin-kickstarts ディレクトリから以下のファイルを作業 ディレクトリにコピーする。

      • fedora-live-base.ks
      • fedora-live-minimization.ks
      • fedora-lxde-common.ks
      • fedora-repo.ks
      • fedora-repo-not-rawhide.ks
    2. fedora-live-lxde.ks ファイルの編集

      fedora-live-lxde.ks 編集して、ファイル名を fedora-live-bvets.ks に変更 する。変更点は以下のとおり。

      --- fedora-live-lxde.ks 2021-02-24 22:10:45.013418393 +0900
      +++ fedora-live-bvets.ks        2021-02-24 02:16:25.912198955 +0900
      @@ -1 +1 @@
      -# fedora-livecd-lxde.ks
      +# fedora-livecd-bvets.ks
      @@ -4,4 +4 @@
      -# - Fedora Live Spin with the light-weight LXDE Desktop Environment
      -#
      -# Maintainer(s):
      -# - Christoph Wickert <cwickert@fedoraproject.org>
      +# - BVE Train Simulator  LXDE Desktop Environment
      @@ -11,0 +9,13 @@
      +
      +# Create root and game parthitions.
      +part / --size 20480 --asprimary --fstype ext4
      +part /game --size 10240 --asprimary --fstype ext4
      +
      +%packages
      +-@lxde-media
      +-@lxde-office
      +pavucontrol
      +wine
      +winetricks
      +cabextract
      +%end
    3. fedora-repo.ks ファイルの編集
      • 「%include fedora-repo-rawhide.ks」をコメントアウトする。
      • 「# %include fedora-repo-not-rawhide.ks」のコメントを外す。
  2. ISO イメージの作成

    以下のコマンドを実行して、ISO イメージファイル(Fedora-Live-Bvets.iso) 作成する。

    # livecd-creator --verbose --config=fedora-live-bvets.ks \
      --fslabel=Fedora-Live-Bvets
  3. USB メモリへの書き込み
    1. GPT パーティションとファイルシステムの作成

      以下のように、EFI System と Linux filesystem の2つのパーティションを 作成し、それぞれのファイルシステムでフォーマットする。

      番号 サイズ タイプ 起動許可 パーティション名 ファイルシステム
      1 20 GiB 1 EFI System 許可 EFI System Partition vfat (FAT32)
      2 10 GiB 20 Linux filesystem ext4

      具体的な手順は、livecd-tools の「livecd-iso-to-disk の使い方」を参照 すること。

    2. ISOイメージの書き込み

      USB メモリが /dev/sdb で認識されている場合、以下のコマンドを実行して、 ISOイメージ(Fedora-Live-Bvets.iso)を USB メモリに書き込む。

      # livecd-iso-to-disk --efi --overlay-size-mb 4095 Fedora-Live-Bvets.iso /dev/sdb1

ca-certificates (fc25) - The Mozilla CA root certificate bundle

ca-certificatesパッケージについて

ca-certificates パッケージは、認証局の証明書のインストールを行うための update-ca-trust コマンドを提供するパッケージである。このパッケージは OSインストール時にインストールされている。

認証局の証明書のインストール

  1. /etc/pki/ca-trust/source/anchors/ ディレクトリの下に認証局の証明書を 配置する
  2. コマンドラインで「update-ca-trust extract」を実行する

認証局の証明書のアンインストール

  1. /etc/pki/ca-trust/source/anchors/ ディレクトリの下にある アンインストール対象の認証局の証明書を削除する
  2. コマンドラインで「update-ca-trust extract」を実行する

Canon printer driver MG7530 (fc25)

ドライバーのダウンロード

Canonのサポートページ IJ Printer Driver Ver. 5.00 for Linux から、rpmの「HTTPダウンロード」ボタンを押して cnijfilter2-5.00-1-rpm.tar.gz をダウンロードする。ファイルをダウンロードした ディレクトリに移動して、以下のコマンドでファイルを解凍する。

$ tar xvfz cnijfilter2-5.00-1-rpm.tar.gz

ドライバーのrpmパッケージは以下の場所に存在している。

  • cnijfilter2-5.00-1-rpm/packages/cnijfilter2-5.00-1.x86_64.rpm

ドライバーのインストール

  1. rpmパッケージのインストール

    ドライバーのrpmファイルが配置されているディレクトリに移動して、以下の コマンドを実行する。

    # dnf install cnijfilter2-5.00-1.x86_64.rpm
  2. CUPSデーモンの再起動

    以下のコマンドを実行して、CUPSデーモンを再起動する。

    # systemctl restart cups.service
  3. プリンターのスプーラーへの登録

    プリンタ本体のメニューでプリンターのMACアドレスを調べ、以下のコマンドを 実行して、プリンター登録名を「MG7530LAN」に指定して、プリンターを スプーラーに登録する。MACアドレスは、「00-00-85-AB-C1-23」の形式で 指定する。

    # /usr/sbin/lpadmin -p MG7530LAN -P /usr/share/cups/model/canonmg7500.ppd \
      -v "cnijbe2://Canon/?port=net&serial=<MACアドレス>" -E
  4. デフォルトプリンターの設定

    以下のコマンドを指定して、登録名「MG7530LAN」のプリンターをデフォルト プリンターに設定する。

    # /usr/sbin/lpadmin -d MG7530LAN
注 意

システムインストール時は、cupsサービスがdisableになっているので、root権限の ユーザで「systemctl staus cups」コマンドを実行し、statusがdisableとなって いる場合は「systemctl enable cups」コマンドを実行してcupsサービスを有効に すること。


cdparanoia (fc25) - clipping audio CD

パッケージのインストール

# dnf install cdparanoia

audio CDからのファイルの取得

「man cdparanoia」でマニュアルを表示すると、最後の方にコマンドの例が 示されている。

  • ディスク全てのファイルを取得する
    $ cdparanoia -B
  • トラックを指定してファイルを取得する
    $ cdparanoia "<開始トラック番号>-<終了トラック番号>"
  • 指定トラック番号以降のファイルを取得する
    $ cdparanoia "<開始トラック番号>-"

CentOS Stream 9 (fc36) - CentOS Stream 9 toppics

CentOS Stream は、Read Hat Enterprise Linux のアップストリーム ディストリビューションで、Fedora をベースにしている。詳細は Red Hat Enterprise Linux Compatibleを参照のこと。

インストール

https://www.centos.org/centos-stream/#download から「x86_64」の リンクをクリックして、インストールイメージを取得する。

最小構成のGUI環境

epel-release パッケージをインストールして EPEL リポジトリを有効にした後、 Fedora Server Core Installation に準じてパッケージをインストールする。

  • GNOME

    インストールできないパッケージ

    • xscreensaver-base
    • notification-daemon
  • Xfce4

    追加してインストールするパッケージ

    • python36 (CentOS 8 以前の場合)

CentOS 8 から代替ディストリビューションへの移行

CentOS 8 のサポート期限変更について

CentOS 8は、当初 RedHat Enterprise Linuxと同じ 2029年12月までサポートされる 予定であったが、サポート期限が 2021年12月までに変更された。CentOSのホーム ページでは、CentOS Stream に移行するようにアナウンスされている。

CentOS 8 から CentOS 8 Stream の移行

CentOS 8 Stream への移行を決定する前に、以下のことについて検討すること。

  • サポート起源は RedHat Enterprise Linux より大幅に短い 2024年5月 までで ある。
  • CentOS 8 はダウンストリーム(RedHat Enterprise Linuxに追従してパッチが 適用される)であったが、CentOS 8 Stream はアップストリーム(RedHat Enterprise Linuxより前にパッチが適用される)に変更されている。

CentOS 8 Stream へ移行する場合は、以下のコマンドを実行する。

# dnf swap centos-linux-repos centos-stream-repos
# dnf distro-sync
CentOS 8 から Rocky Linux への移行
  • Rocky Linux の特徴

    Rocky Linuxを参照のこと。

  • CentOS 8 から Rocky Linux への移行手順
    1. CentOS 8 で以下のコマンドを実行してパッケージを最新にする
      # dnf upgrade -y
    2. migrate2rocky.sh の取得

      https://github.com/rocky-linux/rocky-tools にアクセスして「Code」 の右側矢印をクリック
      ⇒ 「Download ZIP」をクリック
      ⇒ rocky-tools-main.zip をダウンロード
      ⇒ zip を解凍して migrate2rocky.sh を取得

    3. migrate2rocky.sh の実行

      migrate2rocky.sh を配置したディレクトリに移動して、シェルスクリプト ファイルに実行権限を付与してシェルスクリプトを実行する。

      # chmod +x migrate2rocky.sh
      # ./migrate2rocky.sh -r
  • 参考文献

CentOS トピックス

  • Enabling PowerTools repository

    「*-devel」パッケージをインストールできるようにするために、以下のコマンドを 実行して、「PowerTools」リポジトリを有効にする。

    # dnf config-manager --set-enabled PowerTools

    上記の方法でうまくいかない場合は、以下の方法でリポジトリの設定ファイルを 直接編集する。

    • 編集対象のファイル

      /etc/yum.repos.d/CentOS-Linux-PowerTools.repo

      • CentOS 互換ディストリビューションの場合は、「CentOS-Linux」の部分を 適切に読み替えること
    • 編集内容

      enabled=1


Cheese (fc32) - GNOME Web cammera application

パッケージのインストール

# dnf install cheese

chrony (fc40) - default NTP client

パッケージのインストール

# dnf install chrony

Chrony概要

  • 用語
    用語 説明
    システムクロック Linuxカーネルが保持しているクロック
    ローカルクロック NTPサーバー/クライアントが推定する正しい時刻。 NTPクライアントが接続されると、ローカルクロックの時刻を クライアントに報告する。
    ローカル リファレンスモード NTPサーバーから取得した時刻を基にローカルクロックを設定 するのではなく、chronyc コマンドによりマニュアルで ローカルクロックを設定するモードのこと。
  • 時刻同期の方式
    • slew

      Chronyの既定の方式で、システムクロックの時刻調整を、システムクロックを わずかに早めたり遅らせたりしながら徐々にシステムクロックの時刻をローカル クロックの時刻に合わせる

    • step

      システムクロックの時刻をすぐにローカルクロックの時刻に合わせる

  • ローカルクロックの時刻推定手順

    NTPサーバーより定期的に時刻を受け取り、線形補間により正しい時刻を推定する。 複数のNTPサーバーに接続している場合は、重みを付けて推定値を計算する。

  • マスターサーバーとしての運用

    自身はNTPサーバーに接続することなく、ローカルクロックを手動で管理して運用 する。インターネットから閉じた環境での最上位サーバーとして運用することを 想定している。マスターサーバーとして運用する場合は、/etc/chrony.conf に local ディレクティブを設定すること。

  • 中継サーバーとしての運用

    自身はNTPクライアントとして他のNTPサーバーの時刻と同期しながら、接続された NTPクライアントにNTPサーバーとしてローカルクロックの時刻を知らせる。

  • NTPクライアントとしての運用

    NTPサーバーに接続し、そこから返された時刻で自身のホストの時刻を同期する。

NTPクライアントの最小設定

/etc/chrony.conf を以下のように設定する。

  • pool | server
    pool <poolホスト名> iburst

    または

    server <NTPサーバ名> iburst
    ... ※複数のserverを指定可能
    • pool を指定する場合

      poolホスト名 にプールサーバー(使用可能なNTPサーバーのIPアドレスを取得 するためのサーバー)のホスト名を指定する。

    • server を指定する場合

      NTPサーバ名 にNTPサーバのホスト名またはIPアドレスを指定する。複数の サーバーを指定して冗長構成とすることも可能である。

    • iburst オプションについて

      このオプションを指定すると、システム起動時(chronydデーモン起動時)に素早く NTPサーバと時刻同期をする。

  • driftfile
    driftfile /var/lib/chrony/drift

    システム・クロックを補正するための統計情報を /var/lib/chrony/drift(既定値) に記録する。chrony デーモンが再起動すると、再起動前の統計情報をここから取得 して、統計情報を更新することが可能になる。ファイルが存在しない場合は、空の ファイルをオーナー/グループ「chrony:chrony」で作成しておくこと。

    記録される統計情報は以下のとおり。

    • Frequency

      推定残差周波数。システムクロックが1秒経過する間に、ローカルクロックと 比較してどれだけ時刻が進んだ/遅れたかを100万分の1秒(マイクロ秒)単位で 表示する

    • Skew

      推定誤差範囲。システムクロックとローカルクロックとの周波数の推定誤差の 範囲(1秒当たりのシステムクロックの進み/遅れ)をppm(100万分の1、 10の-6乗)の単位で表示する。

  • makestep ※オプション
    makestep <seconds> <limit-times>

    chrony デーモン起動後に、システムクロックとローカルクロックと差が seconds 秒(小数点の指定が可能)を越えている場合、chrony デーモン起動後、最初の limit-times 回までの時刻同期のについては、step モードでシステムクロックを 時刻同期する。

    この設定がない場合は、chrony デーモンは、slew モードで時刻同期を行うため、 システムクロックの時間が大幅にずれている場合は、時刻同期に大幅な時間を要する ことになる。システムクロックが大幅にずれている場合は、makestep ディレクティブを指定して素早く時刻を同期することが可能になる。

    • 設定例
      makestep 1.0 3

NTPサーバーの最小設定

ファイアウォールでUDP ポート番号 123 の受信を許可し、/etc/chrony.conf を 以下のように設定する。

マスターサーバーの最小設定

インターネットにアクセスできないネットワークで、NTPサーバーのマスターサーバー を設置する場合の /etc/chrony.conf の最小構成の設定は以下のとおり。

  • local
    local [stratum <ホップ数>]

    このサーバーのホップ数が指定されたホップ数以下の場合は、正常処理として ローカルクロックの時刻をそのままNTPクライアントに返す。これは、この サーバーが直接的/間接的に他のNTPサーバーに接続された場合でもローカル リファレンスモードとして動作させるための設定である。

    なお、ホップ数は最上位のサーバーを1として、その下に接続するNTPサーバーの 階層が増す度に1つずつ増える。

  • manual
    manual

    「chronyc settime yyyy-mm-dd hh:mm:ss」コマンドでローカルクロックを手動で 設定して、システムクロックの時刻同期を可能にする。

  • allow
    allow <network-addr>/<mask>

    このNTPサーバーに接続を許可するNTPサーバー/クライアントのネットワーク アドレスを指定する。ネットワークのマスクは上位ビット数かサブネットマスクで 指定可能である。allow ディレクティブには、ネットワークアドレスの他に以下の ものも設定可能である。

    • IPアドレス
    • all: すべてのホストからの接続を許可
中継サーバーの最小構成

「NTPクライアントの最小設定」に allow ディレクティブでこのNTPサーバーに接続 する NTPクライアントのネットワークアドレスを追加すれば、中継サーバーの最小 構成となる。

NTPサーバーの設定詳細

ここでは、孤立したネットワークでマスターサーバーとして運用(他のNTPサーバーと 時刻の同期をせずにマスターのNTPサーバーとして他のNTPサーバー/クライアントに 時刻を提供する)場合についての設定例 (17.4. 異なる環境での chrony の設定 - Red Hat Customer Portal) の詳細を説明する。

  1. マスターサーバーの設定

    下記の設定は、server1、server2、server3 の3台をOrphanモード(1台をマスター サーバー、それ以外をマスターサーバーに接続する中継サーバーとして自動構成する モード。詳細は下記の local ディレクティブの説明を参照)でマスターサーバーを 構成する場合のserver1の設定例である。

    server server2 key 2
    server server3 key 3
    driftfile /var/lib/chrony/drift
    keyfile /etc/chrony.keys
    initstepslew 10 server2 server3
    local stratum 8 orphan
    manual
    allow <server2-ipaddr>
    allow <server3-ipaddr>
    allow <network-addr>/<mask>

    設定するディレクティブの説明は以下のとおり。

    • server server2 key 2

      ホスト名「server2」のNTPサーバーに keyfile /etc/chrony.keys の ID 2 に 設定されたキーを使用して接続する。server ディレクティブには、自身以外の マスターサーバー(server2、server3)を指定した設定をすること。

    • driftfile /var/lib/chrony/drift

      システクロックとローカルクロックとの時間のずれの測定情報を保存するファイル のパスを設定する。

    • keyfile /etc/chrony.keys

      NTPサーバー接続時に認証に使用するキーのIDとのペアを格納するファイルの パスを指定する。この設定を行うと、他のNTPサーバー/クライアントがこの サーバーに接続する際に、IDとキーのペアによる認証が必要になる。keyfileには このサーバーに接続するNTPサーバー/クライアントの認証に使用するIDとキーの ペア、及びこのサーバーが他のNTPサーバーに接続する際に認証に使用するIDと キーのペアを設定する。

      • keyfile の設定例
        10 tulip
        11 hyacinth
        20 MD5 ASCII:crocus
        25 SHA1 HEX:933F62BE1D604E68A81B557F18CFA200483F5B70
        30 AES128 HEX:7EA62AE64D190114D46D5A082F948EC1
      • 注意点
        • keyfile の設定内容は、参考文献の「chrony.conf(5) Manual Page」を参照の こと。
        • 接続先のIDとキーのペア、接続元のIDとキーのペアは、同じものを双方の keyfile に設定しておくこと。
        • このサーバーが NTPサーバーに接続する際はキー認証を必要とするが、この サーバーに接続するNTPサーバー/クライアントにはキー認証を必要としない 場合は、ID のみを記述した行を定義すれば良い。
    • initstepslew 10 server2 server3

      システム起動時に、自身以外のNTPサーバー(server2、server3)から正しい ローカルクロックを推定し、システムクロックの時刻との差が 10 秒以内であれば slew モードで時刻同期を行う。システムクロックの誤差が 10 秒を越えた 場合は、step モード ですぐにシステムクロックの時刻をローカルクロックの時刻 に同期する。何れの場合でもchrony デーモンの時刻の同期が終わってから、 起動時のブートシーケンスが実行されるので、時刻同期が行われる前にブート シーケンスの中でプログラムが時刻を参照することを防ぐことが可能になる。

    • local stratum 8 orphan

      local ディレクティブのオプションの説明は以下のとおり。

      • stratum 8

        このサーバーのホップ数が8以下の場合は、ローカルリファレンスモードで 動作しする。万が一自身または直接/間接的に外部のNTPサーバーに接続 されても、確実にマスターサーバーとして機能させたい場合は、stratum オプションに大きなホップ数を指定すること。

      • orphan

        複数のローカルリファレンスモードのNTPサーバーをOrphan モードで動かす。 serverディレクティブで複数のNTPサーバーを相互に接続すると、以下の ロジックで1台がマスターサーバー、それ以外はマスターサーバーに接続する NTPクライアントとして動作する。

        1. 相互に接続しているサーバーの中で最小の参照ID(参照IDはChorynによって 自動的に設定される)がマスターサーバーとなり、それ以外のサーバーは NTPクライアントとしてマスターサーバーから報告された時刻と同期する
        2. マスターサーバーと通信できなくなったら、残りのサーバーの中で最小の 参照IDを持つサーバーがマスターサーバーとなる
    • manual

      chronyc (chronyデーモンのクライアント)から settime コマンドでシステム時刻を 手動で設定できるようにする。この設定がないと、chronyc で settime コマンドを 実行するとエラーになる。

    • allow

      このNTPサーバーに接続可能なNTPクライアントのIPアドレス、またはネットワーク アドレスを指定する。

      この例では、自身以外のマスターサーバー server2、server3 のIPアドレスと、 接続を許可するNTPクライアントのネットワークアドレスを指定している。

  2. マスターサーバーに直接接続する中継サーバーの設定

    上記のOrphanモードで運用しているNTPサーバー(server1、server2、server3)に 直接接続する中継サーバーの設定例は以下のとおりである。

    server server1 iburst key 90
    server server2 iburst key 90
    server server3 iburst key 90
    driftfile /var/lib/chrony/drift
    keyfile /etc/chrony.keys
    initstepslew 20 server1 server2 server3
    local stratum 10
    allow <network-addr>/<mask>
    logdir /var/log/chrony
    log measurements statistics tracking
    • server server1 iburst key 90

      サーバー名「server1」のNTPサーバーに速やかに接続し、keyfile の ID 90 で 設定された認証キーで認証する。Orpah モードで構成される他のサーバー (server2、server3)についても同様に server ディレクティブをする。

    • driftfile、keyfile、local

      「マスターサーバーの設定」と同じ

    • initstepslew 20 server1 server2 server3

      chrony デーモン起動時にシステムクロックの誤差が20秒を越えていた場合は、 マスターサーバー(server1、server2、server3)から取得した時刻で step モードで時刻同期する。

    • allow network-addr/mask

      このサーバーに接続可能なNTPクライアントのネットワークアドレスを設定する。

    • logdir /var/log/chrony

      ログファイルを /var/log/chrony ディレクトリに配置する。

    • log measurements statistics tracking

      measurements(NTPの測定結果)、statistics(回帰処理の統計場法)、 tracking(システム時刻の遅れ・進みの予測情報)の3種類のログファイルを 出力する。

chronyc コマンド

  • chronyc sources コマンド

    このコマンドは、接続先のNTPサーバーとの同期の状況を表示する。コマンドの 出力例は以下のとおり。

    $ chronyc sources
    MS Name/IP address         Stratum Poll Reach LastRx Last sample               
    ===============================================================================
    ^- ap-northeast-1.clearnet.>     2  10   377   45m  +2035us[+2534us] +/-   23ms
    ^- y.ns.gin.ntt.net              2  10   377   28m  -1796us[-1245us] +/-   91ms
    ^- time.cloudflare.com           3  10   375   483  +2984us[+2984us] +/-   68ms
    ^* v160-16-113-133.ntp.tky2>     3  10   367   552   +788us[+1399us] +/- 8730us
    • 先頭の「^」に続く記号の意味は以下のとおり。
      • * 現在時刻同期で使用しているNTPサーバー
      • + 時刻同期のために接続しているNTPサーバー
      • - 時刻同期のために接続可能なサーバーであるが、接続されていない
    • Last sample

      「+-時間[+-時間」で示される時間は、接続先のNTPサーバーの時刻と ローカルクロックの時刻との差である。時間の単位は以下のとおり。

      • ns: ナノ秒
      • us: マイクロ秒
      • ms: ミリ秒
      • s: 秒

      []の左側はローカルクロックの推定時刻計算のために適用された値、[]の中の 値は実際に計測された値を示す。

    これ以外の項目については、参考資料の「chronyc(1) Manual Page」を参照のこと。

  • chronyc sourcestats コマンド

    このコマンドは、接続先のNTPサーバーと自身のシステムクロックとの誤差情報を 表示する。コマンドの出力例は以下のとおり。

    $ chronyc sourcestats
    Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
    ==============================================================================
    202.182.111.234.vultruse>  34  19  133m     +0.023      0.057    -21us   203us
    v4.cloud.ntp.admtan.jp     33  15  143m     -0.013      0.044   +150us   152us
    time.cloudflare.com        34  17  146m     -0.079      0.128   +173us   505us
    y.ns.gin.ntt.net           34  17  137m     -0.096      0.129  -4137us   427us
    • Span

      接続先NTPサーバーとの時刻受信間隔

    • Frequency

      接続先NTPサーバーと自身のサーバーとの推定残差周波数(ppm、マイクロ秒単位) を表示する。推定残差周波数については、「NTPクライアントの最小設定」の driftfile ディレクティブの「Frequency」項目を参照のこと。

    • Freq Skew

      接続先NTPサーバーと自身のサーバーとの推定誤差範囲(ppm、マイクロ秒単位) を表示する。推定誤差範囲については、「NTPクライアントの最小設定」の driftfile ディレクティブの「Skew」項目を参照のこと。

    • Offset

      接続先NTPサーバーと自身のサーバーのシステムクロックとの時刻の進み/遅れ

    これ以外の項目については、参考資料の「chronyc(1) Manual Page」を参照のこと。

  • chronyc tracking コマンド

    このコマンドは、システムクロックの性能情報を出力する。コマンドの出力例は 以下のとおり。

    $ chronyc tracking
    Reference ID    : CAB66FEA (202.182.111.234.vultrusercontent.com)
    Stratum         : 3
    Ref time (UTC)  : Mon Sep 16 17:17:27 2024
    System time     : 0.000007025 seconds fast of NTP time
    Last offset     : -0.000032336 seconds
    RMS offset      : 0.000186213 seconds
    Frequency       : 5.066 ppm slow
    Residual freq   : -0.001 ppm
    Skew            : 0.044 ppm
    Root delay      : 0.010932298 seconds
    Root dispersion : 0.001066840 seconds
    Update interval : 1034.2 seconds
    Leap status     : Normal
    • Reference ID

      現在このサーバーが接続しているNTPサーバー(参照サーバー)

    • Stratum

      最上位サーバーを1としたこのサーバーのホップ数

    • Ref time

      最後に参照サーバーからの時刻を基にこのサーバーの時刻の誤差を測定した時刻

    • System time

      システムクロックとローカルクロックとの時刻の差

    • Last offset

      最後にシステムクロックを修正した時点の参照サーバーとローカルクロックの 時刻との差

    • Frequency

      推定残差周波数。この値が driftfile に記録される。

    • Residual freq

      現在選択されている参照サーバーの推定残差周波数(参照サーバーの時刻に対する このサーバーのシステムクロックの進み/遅れ具合)

    • Skew

      推定誤差範囲。この値が driftfile に記録される。

    これ以外の項目については、参考資料の「chronyc(1) Manual Page」を参照のこと。

  • chronyc settime yyyy-mm-dd hh:mm:ss コマンド

    /etc/chronyd.conf ファイルに「manual」が設定されている場合は、このコマンドで NTPサーバーに settime の引数で指定した時刻を設定することができる。

参考文献


ClamAV - clamav (fc34)

ClamAVの概要

ClamAV(Clam AntiVirus)はOpen Sourceのウィルススキャナーである。ClamAVは複数の パッケージに分けて機能を提供している

  • clamav パッケージ

    ウィスルスキャンのコマンドや、clamd (ClamAV Daemon)のフロントエンドの機能を 提供する。

  • clamav-update パッケージ

    ウィルス定義を更新するコマンドを提供する。

  • clamav-scanner パッケージ

    clamd(ClamAV Daomon)を提供する。clamav-scanner自体は、clamdが使用する設定 ファイルを提供するパッケージで、clamd自体はこの依存パッケージである 「clamsv-server」が提供する。

clamavパッケージが提供する主なコマンドは、以下のとおり。

  • clamscan

    ファイルやディレクトリを指定して、ファイルをスキャンする。

  • clamdscan

    clamd (clamAVのデーモン)のフロントエンドで、clamdにファイルのスキャンの 実行を指示する。

  • clamdtop

    clamdをモニタリング(clamdscanによるスキャンの状況など)する。

clamav パッケージのインストール

以下のコマンドを実行して、clamavパッケージをインストールする。

# dnf install clamav

clamscan

  1. コマンドの実行

    ディレクトリを再帰的にアクセスしてファイルのウィルススキャンを実行し、 感染ファイルが見つかったら退避先ディレクトリに移動するためのコマンドは 以下のとおり。

    # clamscan -i --exclude=<スキャン除外dir> --move=<隔離先dir> -r <スキャン対象dir>
    • --exclude-dir は複数回設定可能。スキャン対象ディレクトリの中に退避先の ディレクトリが含まれる場合は、「--exclude=<スキャン対象dir>」を指定 すること
    • 感染ファイルが見つかったら削除する場合は、--move オプションの代わりに 「--remove」を指定する

clamdscan

  1. clamdscanを実行するための設定

    clamdscan は clamav パッケージで提供されるが、実行するためには clamd が実行 できるようになっている必要がある。clamdのインストールと設定手順は、 「ClamAV - clamd」を参照すること。

  2. コマンドの実行

    ディレクトリを再帰的に検索して、感染ファイルが見つかったら退避先 ディレクトリに移動するためのコマンドは以下のとおり。

    # clamdscan [--config-file=<設定ファイルのパス>] [--log=<ログファイルのパス>] \
      [--move=<隔離先dir>] [--fdpass  [--multiscan]] <スキャン対象dir>

    パラメータについて

    • --config-file=設定ファイルのパス

      設定ファイルのパスを指定する。省略すると /etc/clamd.conf (/etc/clamd.d/scan.conf へのリンク) から設定を読み込む。

    • --log=ログファイルのパス

      ログファイルのパスを指定する。

    • --move=隔離先dir

      このパラメータを指定すると、感染ファイルを指定したディレクトリに移動する。

      • 感染ファイルを削除する場合は、--move オプションの代わりに「--remove」を 指定する
      • 設定ファイルで「OnAccressPrevention」が有効になっている場合は、 感染ファイルにアクセスできないので移動ができない
      • 「OnAccessPrevention」が無効な場合は、感染ファイルを読み取った結果が ユーザプロセスに返された後にファイルの移動が行われることに注意
    • --fdpass

      スキャン対象のファイルのアクセス権をclamdに渡す。clamonacc と clamd が 異なるユーザーで実行されている場合、clamd が clamonacc と同じアクセス権 でスキャン対象のファイルにアクセスすることが可能になる。

    • --multiscan

      --fdpass と一緒に指定可能なオプション。ディレクトリの内容を利用可能な スレッドを使用して並行してスキャンする。

    注 意

    コマンドからは検索除外ディレクトリは指定できない。除外ディレクトリは /etc/clamd.conf (のリンク先である /etc/clamd.d/scan.conf)に設定すること

  3. ログファイルのローテーション

    /etc/logrotate.d/clamav ファイルに以下の内容を記述して、ログファイルの ローテーションを行い、ログファイルの肥大化を防ぐ。

    var/log/clamdscan.log /var/log/clamonacc.log {
        rotate 10
        size 1M
        missingok
        nocompress
    }

clamonacc

ClamAV v0.102.0 より、On-Access Scanningは clamd デーモンではなく、clamonacc コマンド(clamdのクライアント)から実行することになった。

  1. コマンドの実行
    # clamonacc [--config-file=<設定ファイルのパス>] [--log=<ログファイルのパス>] \
      [--move=<隔離先dir>] [--fdpass [--multiscan]]

    パラメータの意味は、clamdscan コマンドと同様である。

  2. systemdによる On-Access Scanning 自動起動の設定

    clamav パッケージのインストールにより作成される /usr/lib/systemd/system/clanav-clamonacc.service ファイルの設定変更例を 以下に示す。

    [/etc/systemd/system/clamav-clamonacc.service.d/override.conf]

    [Service]
    ExecStart=
    ExecStart=/usr/sbin/clamonacc -F --config-file=/etc/clamd.d/scan.conf --log=/var/log/clamonacc.log [--fdpass [--multiscan]]
    • ExecStart

      clamonacc コマンドに「--log」オプションを追加する。また、clamd が local socket で待ち受けする場合は、--fdpass オプションを指定する。

    次に、以下のコマンドを実行して、clamdサービスを自動起動するように設定する。

    # systemctl enable clamonacc
  3. On-Access Scanningの設定

    ClamAV - clamd の「scan.conf ファイルの編集」を参照のこと。

  4. ログファイルのローテーション

    「clamdscan」を参照のこと。

clamdtop

  1. コマンドの実行

    以下のコマンドを実行すると、画面にclamdの状況が表示される。

    # clamdtop [<ホスト名> ...]
    補 足
    • 引数を指定せずに clamdtop コマンドを実行すると、localhost の clamd の 状況を表示する。
    • 引数にホスト名、又は IPアドレスを指定すると、指定したホストで実行して いる clamd の状況を表示する。ただし、リモートのホスト側で /etc/clamd.d/scan.conf に以下の設定をする必要がある。
      • TCPSocket 3310

        待ち受けるポート番号を指定する。規定のポート番号 3310 を設定する。

      • TCPAddr <IPアドレス>

        待ち受ける IPアドレスを指定する。ネットワークカードに設定された IPアドレスを設定する。繰り返して複数の IPアドレスの指定が可能。

  2. clamdtop で表示される情報
    • clamdが使用しているメモリ
    • clamdscan の指示により clamd が現在スキャンしているファイル

スキャンの自動実行

ACアダプターが接続されている状態でシステムが起動し、5分後に以下の何れかの条件

  • ログファイル(/var/log/clamscan.log、または /var/log/clamdscan.log)が 存在していない
  • ログファイルの日付けより7日以上経過している

に当てはまる場合にウィルスのスキャンを実行ための crontab の設定を以下に示す。

  • clamscan コマンドを実行する場合

    システム起動後1分経過してから上記の条件に当てはまった場合に clamscan コマンドを実行する(改行せずに1行で設定すること)。

    @reboot sleep 1m; if [ ! -f /var/log/clamscan.log -o `find /var/log -name
     'clamscan.log' -mtime +10 | wc -l` -gt 0 -a x`upower -i <ACアダプターのobject path>
     | grep 'online:' | sed 's/.* //g'` = xyes ]; then /usr/bin/clamscan -v -i
     -l /var/log/clamscan.log --exclude=/proc/ --exclude=/sys/
     --exclude=/var/spool/quarantine --move=/var/spool/quarantine -r /; fi
  • clamdscan コマンドを実行する場合

    以下のスクリプト(改行せずにcrontbに設定すること)は、次のことをおこなって いる。

    • clamdscan.log のタイプスタンプを確認し、日付けが10日以上前の場合に clamdscan を実行する
    • ACアダプターが接続されている場合に限り clamdscan を実行する
    • clamdscan を実行する前に、notify-send を使用してすべてのユーザーに clamdscan の実行を通知する
    • clamdscan を実行する。ただし、clamav-clamonacc サービスが有効となって いる場合は、そのサービスを停止してから clamdscan を実行し、その後 clamav-clamonacc サービスを開始する
    @reboot sleep 10m; if [ ! -f /var/log/clamdscan.log -o `find /var/log -name
     'clamdscan.log' -mtime +10 | wc -l` -gt 0 -a x`upower -i <ACアダプターのobject path>
     | grep 'online:' | sed 's/.* //g'` = xyes ]; then if [ `ps h -C dnf | wc -l` -eq 0 ];
     then for address in /run/user/*; do userid=${address#/run/user/};
     sudo -u "#$userid" DBUS_SESSION_BUS_ADDRESS=unix:path=$address/bus PATH=/usr/bin
     /usr/bin/notify-send -i dialog-warning -t 300000 'Clam-AV scanning started.'; done
     if [ `systemcl status clamav-clamonacc | grep '; enabled;' | wc -l` -gt 0 ]; then
     systemctl stop clamav-clamonacc; fi;
     /usr/bin/clamdscan -v --config-file=/etc/clamd.conf --log=/var/log/clamdscan.log
     --fdpass --multiscan --move=/var/spool/quarantine /;
     if [ `systemcl status clamav-clamonacc | grep '; enabled;' | wc -l` -gt 0 ]; then
     systemctl start clamav-clamonacc; fi;
     fi; fi
コマンドの説明
  • <ACアダプターのobject path>

    「upower -e」の出力結果の中で、ACアダプターを示す文字列 (例:/org/freedesktop/UPower/devices/line_power_AC)のことである。

  • スキャンコマンドの指定について

    上記に示した clamscan、clamdscan コマンドが実行する内容は以下のとおり。

    • [clamdscan] --stream オプションを指定して、スキャン対象のファイルを clamdscan コマンドで行い、clamd には読み込んだ内容を stream で渡す。 これは、clmad が root ユーザーで実行されていないことを前提とした場合の 対処である。
    • --config-file オプションの指定により、/etc/clamd.conf ファイルから 設定を読み込む
    • --log オプションの指定によりログを /var/log/clamdscan.log に出力する
    • ルートディレクトリ (/) を再帰的にスキャンする
    • 感染ファイルが見つかったら、<隔離先dir>にそのファイルを移動する
    • /proc、/sys、<隔離先dir> ディレクトリはスキャンの対象から除外する。 clamdscanコマンドの場合は、設定ファイル (/etc/clamd.conf) に除外 ディレクトリの設定がされているものとする
注 意

upwer コマンドを実行するためには、upower パッケージが必要なので、以下の コマンドによりパッケージをインストールしておくこと。

# dnf install upower

ClamAV - clamav-update (fc40)

clamav-update パッケージのインストール

以下のコマンドを実行して、clamav-updateパッケージをインストールする。

# dnf install clamav-update

freshclamの設定

  1. /etc/freshclam.conf の編集

    /etc/freshclam.conf ファイルをテキスト・エディタで開き、以下のように 編集する。

    1. Exsample行のコメントアウト
      # Comment or remove the line below.
      Example

      の「Example」の前に「#」を付けてコメントアウトする。

    2. UpdateLogFile行のコメント解除
      # Path to the log file (make sure it has proper permissions)
      # Default: disabled
      #UpdateLogFile /var/log/freshclam.log

      の「#UpdateLogFile」の先頭文字「#」を削除する。

    3. DatabaseOwner 行のコメント解除
      # By default when started freshclam drops privileges and switches to the
      # "clamav" user. This directive allows you to change the database owner.
      # Default: clamav (may depend on installation options)
      #DatabaseOwner clamupdate

      の「#DatabaseOwner」の先頭文字「#」を削除する。

    4. proxyの設定

      以下の部分のコメントを外して、proxy serverのホスト名、ポート番号、 必要であれば認証のためのユーザ名とパスワードを設定する。

      #HTTPProxyServer https://proxy.example.com
      #HTTPProxyPort 1234
      #HTTPProxyUsername myusername
      #HTTPProxyPassword mypass
      HTTPProxyServerの設定について

      コメントにあるとおり、サーバー名の指定は、scheme://server-nameの 形式で行うこと。サーバー名のみを指定した場合は、「http://server-name」 (HTTP Proxy)を指定したことになる。

  2. ログファイルの作成

    ※最近のバージョンでは、初期設定としてのログファイルの作成は不要 ※むしろログファイル(freshclam.log)を事前に作成して clamav-freshclam サービスを起動すると、ログファイルのアクセス権違反のエラーが発生する

    以下のコマンドを実行して、ログファイルを作成してファイルのアクセス権を 設定する。

    # touch /var/log/freshclam.log
    # chmod 640 /var/log/freshclam.log
    # chown clamupdate:clamupdate /var/log/freshclam.log
  3. freshclamの自動起動設定
    1. Unitファイルについて

      以前のバージョンはパッケージに Unit ファイルが含まれていなかったが、 最近のバージョンでは、/usr/lib/systemd/system/clamav-freshclam.service ファイルがインストールされるようになった。

    2. clamav-freshclamサービスの有効化

      以下のコマンドを実行して、clamav-freshclam サービスを有効にする。

      # systemctl enable clamav-freshclam
    3. Wi-Fi接続時の設定

      Wi-Fiに接続された状態でシステムを起動する場合は、Wi-Fi接続の設定で 「全てのユーザがこのネットワークに接続可能とする」を有効にすること。

Hosting a Private Database Mirror

ClamAV の CVD/CID データベースは、同一パブリックIPアドレスからのアクセスが 大量に発生するとアクセスを制限する。これを回避するためには、CVD/CID データベースのミラーサーバーを立てて、freshclam のクライアントは、この ミラーサーバーにアクセスするようにする。

参 考
ミラーサーバーの設定手順
  1. httpd の設定
    1. httpd パッケージをインストールして、Apache HTTP Server を インストールして、必要な設定をする。
    2. 以下のコマンドを実行して、httpd のロケーション「/clamav」から ClamAV のデータベースが参照できるようにする。
      # ln -sf /var/lib/clamav /var/www/html/clamav
  2. freshclam.conf の設定

    /etc/freshclam.conf ファイルに以下の設定をする。

    CompressLocalDatabase yes
  3. firewalld の設定

    以下のコマンドを実行して、httpd の受信ポートを許可する。

    # firewall-cmd --permanent --add-port <server-port>/tcp
    # firewall-cmd --reload
freshclam クライアントの設定手順
  1. freshclam.conf の設定

    /etc/freshclam.conf ファイルに以下の設定をする。

    PrivateMirror http://<mirror-host>:<host-port>/clamav
    ScriptedUpdates no
  2. SELinxuの設定

    サービスから freshclam を実行すると、SELinux の権限エラーが発生するので、 以下のローカルポリシーを作成して適用する。

    1. TEファイルの作成

      [my-freshclam-service.te]

      module my-freshclam-service 1.0;
      require {
        attribute antivirus_t;
        attribute soundd_port_t;
        class tcp_socket {name_connect};
      }
      #============= antivirus_t ==============
      allow antivirus_t soundd_port_t:tcp_socket name_connect;
    2. モジュールの作成とパッケージのインストール

      以下のコマンドを実行して、TE ファイルからモジュール及びパッケージを 作成し、作成したパッケージをインストールする。

      $ checkmodule -m -o my-freshclam-service.mod my-freshclam-service.te
      $ semodule_package -o my-freshclam-service.pp -m my-freshclam-service.mod
      $ sudo semodule -i my-freshclam-service.pp

ClamAV - clamd (fc43)

clamd の機能概要

clamd (Clam AntiVirus Daemon) は、local socket、またはTCPポートを待ち受けて、 ディレクトリまたはファイルのスキャンを実行するデーモンである。デーモンの フロントエンドは、以下のものがある。

  • clamdscan

    clamscanと同様にディレクトリやファイルのスキャンの実行、感染ファイルの 削除や移動を実行する。clamscanと同等の機能だが、スキャンの対象/除外の 設定は、/etc/clamd.conf で行う。ローカルのclamdのみアクセス可能。

  • clamdtop

    ローカル、またはリモートのclmadに接続して、clamdの状況をモニターする。 複数のclamdに接続可能。

  • clamonacc

    v0.102.0 から導入されたもので、以前は clamd デーモンで実行していた On-Access Scanning を実行するフロントエンドである。

  • telnet

    telentコマンドで接続した後、「SCAN <ファイル/ディレクトリ>」、 「SHUTDOWN」 などのコマンドを入力して clamd のコマンドを直接実行する。 clamd のコマンドは、「man clamd」を参照のこと。

clamdのインストール

以下のコマンドを実行して、clamdパッケージをインストールする。

# dnf install clamd

scan.conf ファイルの編集

/etc/clamd.d/scan.conf ファイルを以下のように設定する(OnAccessPreventを 有効にした設定)。ExcludePath 及び OnAccessExcludePath で除外するファイル・ ディレクトリは以下の基準で決める。

  • /usr/share/doc/lua-socket/lua05.ppt は必ず外す ⇒ 0.100.0 からは大丈夫
  • clamdscan や clamscan でウィルスを検知したファイルの隔離先ディレクトリは 除外する
  • ルート直下でシンボリック・リンクとなっているディレクトリは除外する
  • clamd、clamdscan、clamscan に関連する実行ファイル、設定ファイル、 ログファイルは除外する
  • SELinuxに関連する実行ファイル、設定ファイル、ログファイルは除外する
  • ロックファイルが配置されるディレクトリ、temporary領域のディレクトリは 除外する
  • clamdscan を実行して、ログに出力された内容が以下にに該当するものは除外する
    • Not supported file type: xxxxx
    • stat() failed on: xxxxx
  • その他 OnAccessPrevention の障害回避
    • /home/<ユーザー名>/.cache ⇒ /home 配下の監視ができなくなる場合があるので、OnAccessExcludePathで 除外する ⇒ 0.100.0 から大丈夫かも
    • /etc/ ⇒ キーボード、マウスの入力が受け付けられなくなるので、 OnAccessIncludePathの設定から除外する
  • /var ディレクトリの OnAccessIncludePath の設定

    /var ディレクトリのサブディレクトリごとに OnAccessIncludePath を設定する。 「OnAccessIncludePath /var/」と指定すると、「Could not watch path '/var/'」 のエラーが発生する。

[scan.confの設定例]

################################################################################
# Settings for clamd daemon and font ends.
################################################################################
LogFile /var/log/clamd.scan
LogTime yes
LogSyslog yes
ExtendedDetectionInfo yes

# LocalSocket connection
LocalSocket /run/clamd.scan/clamd.sock
LocalSocketGroup virusgroup
LocalSocketMode 660
# TCPSocket connection
#TCPSocket 3310
#TCPAddr 127.0.0.1

ExitOnOOM yes
User clamscan
HeuristicAlerts yes

# Setting for hight performance
# MaxThreads*MaxRecursion + (MaxQueue - MaxThreads) + 6< RLIMIT_NOFILE (usual
# max is 1024).
MaxQueue 200
MaxThreads 20

MaxDirectoryRecursion 30

################################################################################
# Virus Event definition
################################################################################
#MaxDirectoryRecursion 20
# If OnAccessPrevention is enable, disable VirusEvent.
VirusEvent if [ ! $(pgrep -x clamonacc) ]; then for address in /run/user/*; do userid=${address#/run/user/}; /usr/bin/sudo -u "#$userid" DBUS_SESSION_BUS_ADDRESS="unix:path=$address/bus" PATH=${PATH} /usr/bin/notify-send -i dialog-warning -t 0 "VIRUS ALERT" "Virus found at ${CLAM_VIRUSEVENT_FILENAME}"; done; fi

################################################################################
# ExcludePath definitions.
################################################################################
ExcludePath ^/dev/
ExcludePath ^/proc/
ExcludePath ^/run/
ExcludePath ^/sys/
ExcludePath ^/var/log/
ExcludePath ^/var/spool/quarantine/
ExcludePath ^/tmp/clamav-.*

# ClamAV clamav, clamav-lib
ExcludePath ^/usr/bin/clambc
ExcludePath ^/usr/bin/clamconf
ExcludePath ^/usr/bin/clamdscan
ExcludePath ^/usr/bin/clamdtop
ExcludePath ^/usr/bin/clamscan
ExcludePath ^/usr/bin/clamsubmit
ExcludePath ^/usr/bin/sigtool
ExcludePath ^/usr/sbin/clamonacc
ExcludePath ^/usr/lib64/libclamav.so.*
ExcludePath ^/usr/lib64/libclammspack.so.*
# FreshClam clamav-freshclam
ExcludePath ^/usr/bin/freshclam
ExcludePath ^/usr/lib64/libfreshclam.so.*
ExcludePath ^/var/lib/clamav/
# clamd
ExcludePath ^/usr/sbin/clamd

# Lunux Malware Detect
ExcludePath ^/usr/local/maldetect.*/tmp/

# dnf
ExcludePath ^/var/cache/dnf/

################################################################################
# Settings for On-Access Scanning
################################################################################
#OnAccessMaxFileSize 500M
OnAccessMaxThreads 10

#-------------------------------------------------------------------------------
# OnAccessIncludePath
#-------------------------------------------------------------------------------
# Do not include config, library and following directories.
# /dev
# /etc
# /proc
# /run
# /sys
# /tmp
#OnAccessIncludePath /afs
#OnAccessIncludePath /boot
#OnAccessIncludePath /dev
#OnAccessIncludePath /etc
OnAccessIncludePath /home
OnAccessIncludePath /media
OnAccessIncludePath /mnt
OnAccessIncludePath /opt
#OnAccessIncludePath /proc
OnAccessIncludePath /root
#OnAccessIncludePath /run
OnAccessIncludePath /run/media
#OnAccessIncludePath /srv
#OnAccessIncludePath /sys
#OnAccessIncludePath /tmp

# Include indivisual /usr sub dirs.
OnAccessIncludePath /usr/bin
#OnAccessIncludePath /usr/etc
OnAccessIncludePath /usr/games
OnAccessIncludePath /usr/i686-w64-mingw32
#OnAccessIncludePath /usr/include
OnAccessIncludePath /usr/libexec
OnAccessIncludePath /usr/local
OnAccessIncludePath /usr/sbin
OnAccessIncludePath /usr/share
OnAccessIncludePath /usr/src
OnAccessIncludePath /usr/x86_64-w64-mingw32
# Optional
OnAccessIncludePath /usr/lib
OnAccessIncludePath /usr/lib64

# Include indivisual /var sub dirs.
# Following directories shuld be excluded.
# - lib
# - log
# - lock (symbolic link)
# - mail (symbolic link)
# - run (symbolic link)
#OnAccessIncludePath /var/account
#OnAccessIncludePath /var/adm
OnAccessIncludePath /var/cache
#OnAccessIncludePath /var/crash
#OnAccessIncludePath /var/db
#OnAccessIncludePath /var/empty
OnAccessIncludePath /var/ftp
OnAccessIncludePath /var/games
#OnAccessIncludePath /var/kerberos
#OnAccessIncludePath /var/lib
OnAccessIncludePath /var/local
#OnAccessIncludePath /var/log
OnAccessIncludePath /var/nis
OnAccessIncludePath /var/opt
#OnAccessIncludePath /var/preserve
OnAccessIncludePath /var/spool
OnAccessIncludePath /var/tmp
OnAccessIncludePath /var/www
#OnAccessIncludePath /var/yp

#-------------------------------------------------------------------------------
# OnAccessExcludePath
#-------------------------------------------------------------------------------
OnAccessExcludePath /dev
OnAccessExcludePath /proc
OnAccessExcludePath /sys

# System
OnAccessExcludePath /usr/lib/sysimage/rpm
OnAccessExcludePath /usr/src/kernels

# ClamAV
OnAccessExcludePath /var/lib/clamav
OnAccessExcludePath /var/spool/quarantine

# Linux Malware Detect
OnAccessExcludePath /usr/local/maldetect

# dnf
OnAccessExcludePath /var/cache/dnf

#-------------------------------------------------------------------------------
# OnAccessIncludePath / OnAccessExcludePath custom configurations
#-------------------------------------------------------------------------------
#OnAccessIncludePath /var/www
# Eclipse
OnAccessExcludePath /opt/eclipse/plugins
# Thunderbird
#OnAccessExcludePath <thunderbird-profiledir>/Mail/<acount-name>

#-------------------------------------------------------------------------------
# Enables On-Access Prevention and Extra Scanning
#-------------------------------------------------------------------------------
OnAccessPrevention yes
OnAccessExtraScanning yes

#-------------------------------------------------------------------------------
# OnAccessMountPath
#-------------------------------------------------------------------------------
# If set OnAccessMountPath then OnAccessIncludePath, OnAccessExcludePath,
# OnAccessPrevention and OnAccessExtraScanning options are ignored.
#OnAccessMountPath /

#-------------------------------------------------------------------------------
# Enables On-Access Scanning (since v0.102.0)
#-------------------------------------------------------------------------------
OnAccessExcludeUname clamscan

上記の設定内容は以下の通りである。

LogFile ウィルスのスキャン結果を出力するログファイルを 指定する
LogTime yesを指定してログに時刻を出力する
LogSyslog yesを指定してシステムログにもスキャン結果を出力する
ExtendedDetectionInfo yesを指定してウィルスを検知したファイルの詳細情報を 出力する
LocalSocket clamdが要求を待ち受けるためのソケットファイルを指定 する。LocalSocket、TCPSocketのどちらか片方を設定する こと
LocalSocketGroup 要求待ち受けソケットのグループを指定する。clamdの フロントエンドを呼び出すユーザはここで指定する グループに所属している必要がある
LocalSocketMode 要求待ち受けソケットファイルのモードを指定する。 ソケットファイルを使用する場合は 660 を指定すること
TCPSocket clamdが要求を待ち受けるポート番号(既定値は3310)を 設定する
TCPAddr clamdが要求を待ち受ける IPアドレスを指定する。 デフォルトでは全ての送信元アドレスからの要求を待ち 受ける
ExitOnOOM out of memoryが発生したらclamdデーモンを停止する
User デーモンの実行ユーザを指定する。この設定をする場合は clamd サービスをrootユーザで実行すること。v0.102.0 以降では、clamscanを指定すること
HeuristicAlerts 
既定値:yes
特別なアルゴリズム(シグネチャベースでなく)を使用 して、複雑なマルウェアや画像ファイルの悪用などを検査 する。no にすると多少速くスキャンできるかもしれない
MaxQueue キューに入れられるアイテム数の最大値
MaxThreads clamd の最大スレッド数
MaxDirectoryRecursion スキャン可能なディレクトリの最大階層数
OnAccessMaxThreads スキャン実行の最大スレッド数。MaxThread の設定値より も少ない値を設定すること
ExcludePath ウィルスのスキャンを除外するファイル/ディレクトリを 正規表現の形式で指定する。複数のパターンを指定する 場合は、ExcludePathを繰り返して指定する。
MaxDirectoryRecursion スキャンするディレクトリ階層の深さの上限を指定する 
※Permission deniedが発生たらコメントアウトする
VirusEvent ウィルスを検知したときに実行するコマンドを設定する 
※0.10x になってからデッドロック回避のため無効らしい
OnAccessMaxFileSize (On-Access Scanningの設定) 
On-Access Scanningでチェックするファイル・サイズの 上限値を設定する 
※Permission deniedが発生たらコメントアウトする
OnAccessIncludePath (On-Access Scanningの設定) 
スキャンの対象となるディレクトリを指定して、その ディレクトリ及び配下のファイル、ディレクトリを 再帰的にスキャンする。複数のディレクトリを指定する 場合はOnAccessIncludePathを繰り返して指定する。 OnAccessMountPathを指定するとこの設定は無効になる。 
※ 下記「注意」を参照のこと
OnAccessExcludePath (On-Access Scanningの設定) 
ウィルスのスキャンを除外するディレクトリを指定する (正規表現ではない)。複数のパターンを指定する場合は、 ExcludePathを繰り返して指定する。 
※ 下記「注意」を参照のこと
OnAccessPrevention (On-Access Scanningの設定) 
yesを指定してウィルスを検知した時にファイルの アクセスをブロックする 。 OnAccessMountPathを指定するとこの設定は無効になる。 
※ 下記「注意」を参照のこと
OnAccessExtraScanning (On-Access Scanningの設定) 
yesを指定してファイル、ディレクトリが移動した時も ウィルスのスキャンを実行する 
※ 0.10xでは無効となっている
OnAccessMountPath (On-Access Scanningの設定) 
スキャンの対象となるディレクトリを指定して、その ディレクトリ及び配下のファイル、ディレクトリを 再帰的にスキャンする。複数のディレクトリを指定する 場合はOnAccessMountPathを繰り返し指定する。 OnAccessPreventionを有効にする場合は指定しない。 
※ 下記「注意」を参照のこと
ScanOnAccess 
(Versions< 0.101.x)
yesを指定して、On-Access Scanningを有効にする。 0.102.0以降は、OnAccessExcludeUID、 OnAccessExcludeUname、OnAccessExcludeRootUIDの どれか1つが設定されるとOn-Access Scanningが有効と なるようになった
OnAccessExcludeUname 
(Versions>=0.102.0)
(On-Access Scanningの設定) 
指定したユーザのプロセスをOn-Access Scanningの対象外 とする。複数回の指定が可能。最低限Userオプションで 指定したユーザ名を設定すること
注 意
  • On-Access Scanningに関する考察
    • 大量のファイルアクセスがあると接続タイムアウトが発生するので、 On-Access Scanning の場合はスキャン対象を限定べきである。
  • LocalSocket と TCPSocket の違いについて
    • LocalSocket

      LocalSocket を使用すると、clamdscan、clamonacc コマンドは、ファイル ディスクリプタまたはストリームをソケットに渡し、clamd がスキャン対象の ファイルを読み込む。使用にあたっては、「LocalSocket 使用時の注意点」の 説明を参照のこと。

    • TCPSocket

      TCPSocket を使用すると、clamdscan、clamonacc コマンドは、ファイルの 内容(ストリーム)を TCP ポートに送信する。

    • ストリーム送信の長所と短所

      clamd にファイルをストームで渡す場合は、LocakSocketのアクセス権や、 スキャン対象のファイルのアクセス権に関係なくファイルをスキャンする ことができる。しかし、clamdscan、clamonacc コマンド側でファイルの ストリームを生成するコストがかかるため、TCPSocket にファイル ディスクリプタを渡す場合に較べて処理時間が増大する傾向がある。

  • User オプションについて
    • scan.confのUserプロパティの設定を有効にするために、clamd@scanサービスを rootユーザーで実行する必要がある。
    • v0.102.0 以降では、clamdパッケージのインストールによりclamscanユーザー が作成され、clamd デーモンはこのユーザーで実行することを想定している。 その場合は、clamd が LocalSocket で待ち受けるようにする際以下の設定を すること。
      • clamonacc は root 権限で実行する
      • clamonacc に --fdpass オプションを指定して、clamonacc のファイル アクセス権限を clamd に渡すようにする
  • v0.102.0 以降では、scan.confのUserディレクティブにclamscanを指定して、 デーモンをclamscanユーザで実行することが前提となった。v.102.0 より前から 継続して運用する場合は、以下のコマンドを実行して、デーモンが出力するログ のユーザ、グループを変更すること。
    # chown clamscan:clamscan /var/log/clamd.scan
  • 「OnAccessMountPath」が設定されていると、以下のプロパティの設定が無効に なる。
    • OnAccessIncludePath
    • OnAccessExcludePath
    • OnAccessPrevention
    • OnAccessExtraScanning
  • 「OnAccessIncludePath」設定上の注意事項
    • 「OnAccessIncludePath」に「/」を設定することはできない。ルート ディレクトリ配下の各ディレクトリを個別に指定すること。
    • 設定するディレクトリのパスの最後に「/」を付けてはならない。
  • 「OnAccessExcludePath」設定上の注意事項
    • 設定するディレクトリのパスの最後に「/」を付けてはならない。
  • 「OnAccessPrevention」を有効にするためには、kernelオプションに 「CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y」を設定してkernelがコンパイル されている必要がある。現在動作しているシステムでこのカーネル・オプション を確認するためには、 「cat /boot/config-kernel_version | grep FANOTIFY」コマンドを実行する こと。
  • VirusEvent で指定するコマンドでは、以下のキーワード及び環境変数を使用する ことができる。
    • %v - virus name
    • $CLAM_VIRUSEVENT_FILENAME - ウィルス検知のイベントが発生したファイル名
    • $CLAM_VIRUSEVENT_VIRUSNAME - virus name
参 考

その他の設定

  1. SELinuxの設定
    1. bool値の設定

      以下のコマンドを実行して、SELinuxのbool値を設定する。

      # setsebool -P antivirus_can_scan_system 1
    2. ローカル・ポリシーの設定

      ※最近は以下のローカル・ポリシーの設定は不要になった

      以下のTEファイルを作成する。

      [my-antivirus-daemon.te]

      module my-antivirus-daemon 1.0;
      require {
        attribute antivirus_domain;
        attribute antivirus_t;
        attribute file_type;
        attribute fprintd_t;
        attribute non_security_file_type;
        attribute var_log_t;
        class blk_file { getattr ioctl lock open read };
        class chr_file { getattr ioctl lock open read };
        class dbus send_msg;
        class file setattr;
        # For running clamonacc in Unit file.
        class cap_userns sys_ptrace;
      }
      
      #============= antivirus_t ==============
      allow antivirus_domain { file_type non_security_file_type }:blk_file { getattr ioctl lock open read };
      allow antivirus_domain { file_type non_security_file_type }:chr_file { getattr ioctl lock open read };
      allow antivirus_t var_log_t:file setattr;
      # For sending message via notify-send
      allow antivirus_t fprintd_t:dbus send_msg;
      # For running clamonacc in Unit file.
      allow antivirus_t self:cap_userns sys_ptrace;

      次に、以下のコマンドを実行して、TEファイルからモジュールを作成し、続いて モジュールからパッケージを作成して、そのパッケージをインストールする。

      $ checkmodule -m -o my-antivirus-daemon.mod my-antivirus-daemon.te
      $ semodule_package -o my-antivirus-daemon.pp -m my-antivirus-daemon.mod
      $ sudo semodule -i my-antivirus-daemon.pp
  2. /etc/clamd.conf へのリンク作成

    clamscan が設定を共有できるように、以下のコマンドを実行して、/etc/clamd.conf へのリンクを /etc/clamd.d/scan.conf に作成する。既に /etc/clamd.conf ファイルが存在する場合は、削除してからリンクを貼ること。

    # cd /etc
    # ln -s clamd.d/scan.conf clamd.conf
  3. /etc/freshclam.conf の編集

    freshclamがウィルス定義を更新したら clamd に通知するできるように、 NotifyClamd に clamd の設定ファイル「/etc/clamd.d/scan.conf」を設定する。

    NotifyClamd /etc/clamd.d/scan.conf
  4. clamonacc、clamd の 省資源設定(オプション)
    • clamonacc

      clamonacc を実行すろと、このプロセスが常時CPUを100%近く使用し続ける。 clamonacc の Unitファイル(clamav-clamonacc.service)にプロセスが使用する CPU 使用量の上限を以下のように設定して、プロセスの CPU 使用率を下げる ことが可能である。

      [/etc/systemd/system/clamav-clamonacc.service.d/override.conf]

      [Service]
      CPUQuota=50%
    • clamd

      clamd は、1GB以上のメモリを使用し、メモリの圧迫要因となる。clamd の Unitファイル(clamd@.service)にプロセスが使用するメモリの上限を以下の ように設定して、プロセスが使用するメモリを減らすことが可能である。

      [/etc/systemd/system/clamd@.service.d/override.conf]

      [Service]
      MemoryLimit=256M
      注 意
      • MemoryLimit を指定すると、指定されたサイズを超えるメモリは swap 領域に 配置配置されるため swap 領域は zram swap でないと運用に耐えられない。 zram swap の構成については、「swap configurations」を参照のこと。
      • 「MemoryLimit」の設定を行なって、clamonacc と clamdscan を同時に 実行すると、libclamav が out of memory を報告する場合がある。
  5. 隔離先ディレクトリのアクセス権設定

    clamdscan コマンドを使用する場合は、ウィルス検出ファイルの隔離先 ディレクトリのアクセス権のオーナーを「clamscan」、グループを「virusgroup」 に設定すする。退避先ディレクトリが /var/spool/quarantine の場合は、以下の コマンドを実行する。

    # chown -R clamscan:virusgroup /var/spool/quarantine/

clamd@scan サービスの自動起動設定

以下のコマンドを実行して、clamd@scan サービスの自動起動を有効にして、サービスを 起動する。

# systemctl enable --now clamd@scan

設定関連トピックス

ウィルス検知の動作確認

root権限のユーザでclamdが起動している状態で、 http://www.eicar.org/download/eicar_com.zip をダウロードして、 /var/log/clamd.scan ファイルに 「ScanOnAccess: ダウンロード先dir/eicar_com.zip:Eicar-Test-Signature FOUND」 が出力されていることを確認する。

notify-send によるウィルス検出通知の設定

VirusEvent で sudo コマンドから notify-send を実行するための設定手順は以下の とおりである。

  1. clamscan ユーザーの sudoers の設定

    「/etc/sudoers.d」ディレクトリの下に「clamscan」ファイルを作成して、以下の 内容を設定し、「su /usr/bin/notify-send」コマンドをパスワードなしで実行 できるようにする。

    [/etc/sudoers.d/clamscan]

    clamscan ALL = (ALL) NOPASSWD: SETENV: /usr/bin/notify-send
  2. ウィルス検出通知の設定
    1. ウィルス検出通知スクリプトの作成

      以下のシェルスクリプトを作成して実行権限を付与する。

      [/usr/local/bin/virus-event.sh]

      #!/bin/bash
      ALERT="Signature detected by clamav: $CLAM_VIRUSEVENT_VIRUSNAME in $CLAM_VIRUSEVENT_FILENAME"
      
      # Send an alert to all graphical users.
      for ADDRESS in /run/user/* ; do
          USERID=${ADDRESS#/run/user/}
          /usr/bin/sudo -u "#$USERID" DBUS_SESSION_BUS_ADDRESS="unix:path=$ADDRESS/bus" PATH=${PATH} \
              /usr/bin/notify-send -i dialog-warning "Virus found!" "$ALERT"
      done
    2. scan.conf の設定

      [/etc/clamd.d/scan.conf]

      VirusEvent if [ ! $(pgrep -x clamonacc) ]; then /usr/local/bin/virus-event.sh; fi
      補 足

      「OnAccessPrevention yes」を設定した場合、VirusEvent で On-Access Scanning の監視対象となっているファイルにアクセスすると、clamd がハング アップしてしまう。そのため、clamonacc コマンドが実行中の場合は VirusEvent でコマンドを実行しないようにしている。

  3. SELinuxの設定
    1. ローカル・ポリシー定義のファイル作成

      「my-antivirus-virusevent.te」ファイルを作成して以下の内容を設定する。

      [my-antivirus-notifysend.te]

      module my-antivirus-notifysend 1.0;
      require {
        attribute antivirus_t;
        attribute chkpwd_exec_t;
        attribute pidfs_t;
        attribute session_dbusd_tmp_t;
        attribute sudo_exec_t;
        attribute systemd_logind_t;
        attribute systemd_logind_var_run_t;
        attribute unconfined_dbusd_t;
        class capability audit_write;
        class file { execute execute_no_trans map };
        class filesystem getattr;
        class netlink_audit_socket { create nlmsg_relay };
        class sock_file write;
        class unix_stream_socket connectto;
      }
       
      #============= antivirus_t ==============
      # allow execute sudo command and access D-Bus by VirusEvent setting.
      allow antivirus_t chkpwd_exec_t:file { execute execute_no_trans map };
      allow antivirus_t pidfs_t:filesystem getattr;
      allow antivirus_t self:capability audit_write;
      allow antivirus_t self:netlink_audit_socket { create nlmsg_relay };
      allow antivirus_t session_dbusd_tmp_t:sock_file write;
      allow antivirus_t sudo_exec_t:file { execute execute_no_trans map };
      allow antivirus_t systemd_logind_t:unix_stream_socket connectto;
      allow antivirus_t systemd_logind_var_run_t:sock_file write;
      allow antivirus_t unconfined_dbusd_t:unix_stream_socket connectto;
    2. ポリシーパッケージの作成とインストール

      以下のコマンドを実行して、TEファイルからモジュールを作成し、続いて モジュールからパッケージを作成して、そのパッケージをインストールする。

      $ checkmodule -m -o my-antivirus-notifysend.mod my-antivirus-notifysend.te
      $ semodule_package -o my-antivirus-notifysend.pp -m my-antivirus-notifysend.mod
      $ sudo semodule -i my-antivirus-notifysend.pp
    補 足
    • SELinux が Enfocing モードの場合の挙動について

      ローカル・ポリシーの定義は、SELinux を Permissive モードに設定して、 clmad@scan.service より clamd を起動し、ウィルステスト用ファイル (eicar.com)にアクセスした後に「sudo ausearch options | audit2allow」 コマンドを実行して許可すべきポリシーを確認して作成した。しかし、SELinux を Enforcing モードで実行すると、 /var/log/secre ログに以下の sudo コマンドの PAM エラーのメッセージが出力され、notify-send による通知が 失敗する。

      ... unix_chkpwd[xxxx]: could not obtain user info (clamscan)
      ... sudo[xxxx]: PAM audit_log_acct_message() failed: Permission denied
      ... sudo[xxxx]: clamscan : PAM account management error:
       Permission denied ; ... ; COMMAND=/usr/bin/notify-send ...

      現在のところ、エラーの原因は不明である。

    • sudo の PAM エラーの回避方法について

      以下の手順を実施して、clamd を サービスから起動するのではなく、cron から起動することにより、sudo コマンドの PAM エラーを回避して notify-send コマンドによるウィルス検知の通知が可能になる。

      1. clamd@scan サービスの無効化

        以下のコマンドを実行して、clamd@scan サービスを無効化する。

        # systemctl disable clamd@scan.service
      2. cron の設定

        「crontab -e」コマンドで以下の設定を追加して、システム起動時に cron から clamd を起動するようにする。

        @reboot /usr/sbin/clamd -c /etc/clamd.d/scan.conf
      3. システムを再起動する
clamscan ユーザーの再作成手順
  1. 現在のユーザー設定の確認

    clamscan ユーザーのユーザーID、グループIDを確認して記録する。

    $ grep clamscan /etc/passwd /etc/group
  2. clamscan ユーザーの削除

    以下のコマンドを実行して clamd サービスを停止した後に、clamscan ユーザー 及び clamscan グループを削除する。

    # systemctl stop clamd@scan.service
    # userdel clamscan
  3. clamscan グループの作成

    GIDに「現在のユーザー設定の確認」で確認したグループIDを指定して、以下の コマンドを実行して、clamscan グループを作成する。

    # groupadd -g <GID> clamscan
  4. clamscan ユーザーの作成

    UIDに「現在のユーザー設定の確認」で確認したユーザーIDを指定して useradd コマンドを実行して clamscan ユーザーを作成する。次に usermod コマンドを 実行して、補助グループの設定と passwd ファイルに設定するコメントを設定 する。

    # useradd -r -u <UID> -g clamscan -m -d / -s /sbin/nologin clamscan
    # usermod -aG virusgroup -c "Clamav scanner user" clamscan
参考文献

トラブルシューティング

  • /var/log/clamd.scan に「ERROR: ScanOnAccess: Could not watch path 'xxxxx', No space left on device」が表示された場合

    inodeの上限値に達した可能性が高いので、以下の手順を実行する。

    1. 「cat /proc/sys/fs/inotify/max_user_watches」コマンドでinodeの上限値を 確認する
    2. root権限で「du -s --inodes /」コマンドを実行して、現在使用している inodeの数を確認する
    3. /etc/sysctl.conf を編集して「fs.inotify.max_user_watches = 」に十分な 数(例:262144、524288、1048576など)を設定して、root権限で「sysctl -p」 コマンドを実行する []

clamtk (fc27)

ClamAVのGUIフロントエンド

パッケージのインストール

以下のコマンドを実行して、clamtkパッケージをインストールする。ClamAVが インストールされていない場合は、clamav、clamav-update等のパッケージも インストールされる。

# dnf install clamtk

clamtkの設定

「clamtk」コマンドを実行してclamtkを起動し、設定アイコンをダブルクリックして clamtkの設定をする。下記の項目にチェックを入れると良い。

  • 20MB以上のファイルもスキャンする
  • ディレクトリを再帰的にスキャンする

スキャンの実行

「ファイルをスキャン」、または「フォルダーをスキャン」のアイコンをダブル クリックして、チェック対象のファイル、またはフォルダーを指定してスキャンを 実行する。


cronie (fc32) - crond and crontab

パッケージのインストール

# dnf install cronie

cron の設定

  1. 定期的なコマンドの実行

    以下の書式でコマンドを実行する日時とコマンドを1行で指定する。設定は、 「crontab -e」コマンドを呼び出して行う。

    <munite> <hour> <day> <month> <week> <command>
    • munite - 0-59 の数値で分を指定する
    • hour - 0-23 の数値で時間を指定する
    • day - 1-31 の通知で日(月内の日)を指定する
    • week - 0-7 の数値または名前で曜日を指定する。0 及び 7 は日曜日
    • command - 実行するコマンド及びコマンドの引数を指定する

    日時(minuteからweekまで)の指定には以下の指定の仕方がある。

    • 「*」 - 全て。例えばhourに「*」を指定すると毎時間の指定となる。 「*/interval」を指定すると実行時間の間隔を指定できる。例えば muniteに「*/10」を指定すると0分から10分ごとの指定となる。
    • from-to」 - 開始から終了までの範囲。例えばhourに「8-17」を 指定すると、8時から17時までの毎時間の指定となる。また範囲の後ろに 「/interval」を指定すると実行間隔の指定となる。例えば、hourに 「0-23/2」を指定すると0時から23時までの2時間ごとの指定となる。
    • first[,second,...]」 - 複数の実行時間の指定。例えばmuniteに 「0,20,40」と指定すると、0分、20分、40分を指定したことになる。数値では なく、「10-20」のように範囲の指定も可能。
  2. マクロの使用
    <macro> <command>

dconf-editor (fc40) - Graphical editor for gsettings and dconf

パッケージのインストール

# dnf install dconf-editor gnome-settings-daemon

dconf エディターの起動は、以下のコマンドにより行う。

$ dconf-editor

電源管理の設定

root ユーザーで GUI環境が有効な場合
  1. 管理者権限で dconf エディターを起動し、 /org/gnome/settings-daemon/plugins/power に移動する。
  2. 電源ONの後、ログインしていなくてもAC電源使用時にもかかわらず、何も操作 しないとスリープ(結果としてシステム再起動となる場合があある)しないように するために、以下の用に設定する。
    • sleep-inactive-ac-timeout: 900 ⇒ 0
    • sleep-inactive-ac-type: 'suspend' ⇒ 'nothing'
root ユーザーで GUI環境が無効な場合
  1. 以下のコマンドを実行して、電源設定の設定値を確認する。
    # dbus-run-session gsettings list-recursively org.gnome.settings-daemon.plugins.power
    org.gnome.settings-daemon.plugins.power ambient-enabled true
    org.gnome.settings-daemon.plugins.power idle-brightness 30
    org.gnome.settings-daemon.plugins.power idle-dim true
    org.gnome.settings-daemon.plugins.power power-button-action 'suspend'
    org.gnome.settings-daemon.plugins.power power-saver-profile-on-low-battery true
    org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 900
                                                                      ^^^
    org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'suspend'
                                                                    ^^^^^^^
    org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout 900
    org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'suspend'
  2. sleep-inactive-ac-timeout の値を 0 に設定

    以下のコマンドを実行する。

    # dbus-run-session gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0
  3. sleep-inactive-ac-type の値を 'nothing' に設定

    以下のコマンドを実行する。

    # dbus-run-session gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'

Disk format and maintenance (fc36)

ブロックデバイスの確認

lsblk コマンドを実行するとブロックデバイスを以下のような書式で一覧表示する。

NAME                 MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                    8:0    0   40G  0 disk 
├─sda1                 8:1    0    1G  0 part /boot
└─sda2                 8:2    0   39G  0 part 
  ├─fedora_xfce-root 253:0    0   20G  0 lvm  /
  └─fedora_xfce-home 253:1    0   19G  0 lvm  /home
sdb                    8:16   0    8G  0 disk 
└─sdb1                 8:17   0    1G  0 part 
...

lsblk コマンドの書式は以下のとおり。

$ lsblk [-b] [-f] [/dev/<device-name> ...]

引数の説明

  • -b

    ブロックデバイスのサイズは読みやすいように M/G などの単位で表示されるが、 このオプションを指定するとバイト数そのものでサイズを表示する。

  • -f

    ファイルシステムの情報(ファイルシステムの種類、マウントポイント、UUIDなど) を表示する。これは、「-o NAME,FSTYPE,LABEL,UUID,FSAVAIL,FSUSE%,MOUNTPOINT」 を指定することと同じである。

  • /dev/device-name

    ブロックデバイスを作成したデバイス(物理パーティション/Logical Volume)を 指定すると、そのデバイスの情報を表示する。

File system operations

FAT32
  1. ツールのパッケージ

    dosfstools, fatresize

  2. ファイルシステムの作成
    # mkdosfs -F 32 -n <volume-label> /dev/<device-name>

    引数の説明

    • -F 32 - FATのサイズを指定する
    • -n volume-label - Volume Label を指定する
    • /dev/devine-name - ファイルシステムを作成するデバイス (物理パーティション/Logical Volume)を指定する
  3. Volume Label の変更
    # dosfslabel /dev/<device-name> <volume-label>
  4. ファイルシステムの拡大/縮小

    ファイルシステムを作成したデバイス(物理パーティション/Logical Volume)を 指定して、以下のコマンドを実行する。

    # fatresize -s <size>[k|M|G|ki|Mi|Gi|max] /dev/<device-name>

    引数の説明

    • -s {size[k|M|G|ki|Mi|Gi] | max} - ファイルシステムのバイト数を指定する

      バイト数の指定には、以下の単位を指定可能。iがつかない単位は10の累乗、 iがつく単位は2の累乗のサイズである(例:1k=10^3 byte、1ki=2^10 byte)。

      • k / ki (キロバイト)
      • M / Mi (メガバイト)
      • G / Gi (ギガバイト)

      「-s max」を指定すると、ファイルシステムを作成したデバイス (物理パーティション/Logical Volume)の領域全体にサイズを拡張する。

NTFS
  1. ツールのパッケージ

    ntfsprogs

  2. ファイルシステム作成と Volume Labelnの設定
    # mkntfs [-f] -L <volume-label> /dev/<device-name>

    引数の説明

    • -f - このオプションを指定すると、クイックフォーマットを実行する。 ファイルの0埋めと不良セクタのチェックをスキップしてフォーマットを 早く終わらせる
    • -L volume-label - Volume Label を指定する
    • /dev/device-name - ファイルシステムを作成するデバイス (物理パーティション/Logical Volume)を指定する
  3. Volume Labelの変更
    # ntfslabel /dev/<device-name> <volume-label>
  4. ファイルシステムのサイズ拡大/縮小
    • 縮小可能なサイズの確認
      # ntfsresize -i /dev/<device-name>
    • test run (実行可能かをテスト)
      # ntfsresize -n -s <size>[k|M|G|ki|Mi|Gi] /dev/<device-name>

      サイズの単位については、「FAT32」を参照のこと。

    • ファイルシステムの拡大/縮小
      # ntfsresize -s <size>[k|M|G|ki|Mi|Gi] /dev/<device-name>

      -n オプションを指定せずに -s オプションで拡大/縮小するサイズを指定して ファイルシステムの拡大/縮小を実行する。

    • パーティションのサイズまで拡大
      # ntfsresize -x /dev/<device-name>
ext2/ext3/ext4
  1. ツールのパッケージ

    e2fsprogs

  2. ファイルシステムの情報表示

    ファイルシステムを作成したデバイスを指定して、以下のコマンドを実行する。

    # dumpe2fs -h /dev/<device-name>

    出力結果は下記のとおりで、ファイルシステムの UUID や、ブロックサイズを確認 できる。

    dumpe2fs 1.45.6 (20-Mar-2020)
    Filesystem volume name:   <none>
    Last mounted on:          /
    Filesystem UUID:          9361b770-88f1-4248-b661-4f60008be03c
    ...
    Inode count:              13107200
    Block count:              52428800
    Reserved block count:     2621440
    Free blocks:              40993193
    Free inodes:              12717704
    First block:              0
    Block size:               4096
    Fragment size:            4096
    ...
  3. ファイルシステム作成と Volume Label の設定
    # mke2fs -t {ext2|ext3|ext4} -L <volume-label> /dev/<device-name>
  4. Volume Labelの変更
    # e2label /dev/<device-name> <volume-label>
  5. ファイルシステムのサイズ拡大/縮小

    ファイルシステムを作成したデバイス(物理パーティション/Logical Volume)を 指定して、以下のコマンドを実行する。

    # resize2fs /dev/<device-name> <size>[K|M|G]
    • サイズを拡張する場合は、マウントしたまま(/dev/device_nameの代わりに マウントポイントを指定して)resize2fs コマンドを実行できる。
    • size を指定しない場合は、ファイルシステムを作成したデバイス (物理パーティション/Logical Volume)の領域一杯までサイズを拡張する。
    • size を指定する場合、数値のみ指定するとファイルシステムのブロック サイズを指定したことになる。以下の単位を数値の後ろに明示的に指定することも 可能である。それぞれのサイズは、2の累乗の数値(例:1K=1024 bytes)で ある。
      • K (キロバイト)
      • M (メガバイト)
      • G (ギガバイト)
  6. ext4 ファイルシステムのデフラグ

    ext4 ファイシステムは、e4defrag コマンドの実行によりファイルの断片化を 解消することができる。

    • ファイル断片化の情報を表示する
      # e4defrag -c {<file-path>|<dir-path>|/dev/<device-name>}
    • デフラグを実行する
      # e4defrag {<file-path>|<dir-path>|/dev/<device-name>}
xfs
  1. ツールのパッケージ

    xfsprogs

  2. ファイルシステムの作成
    # mkfs -t xfs -L <volume-label> /dev/<device-name>

    引数の説明

    • -t xfs - xfs ファイルシステムを指定する
    • -L volume-label - Volume Label を指定する
    • /dev/device-name - ファイルシステムを作成するデバイス (物理パーティション/Logical Volume)を指定する
  3. Volume Label の変更
    # xfs_admin -L <volume-label>
  4. ファイルシステムの拡大
    注 意

    xfs ファイルシステムは、ファイルシステムのサイズを縮小できない。

    以下のコマンドを実行すると、ファイルシステムを作成したデバイス (物理パーティション/Logical Volume)、またはマウントポイントを指定して、 ファイルシステムを作成したデバイスの容量までファイルシステムのサイズを拡張 する。

    # xfs_growfs {/dev/<device-name>|<mount-point>}
  5. デフラグの実行
    # xfs_fsr {<file-path|/dev/<device-name>} ...

    ファイル(ディレクトリではない)、またはファイルシステムを作成した デバイス(物理パーティション/Logical Volume)を指定してデフラグを実行する。

btrfs
  1. ツールのパッケージ

    btrfs-progs

  2. ファイルシステムの作成
    # mkfs -t btrfs -L <volume-label> /dev/<device-name>

    引数の説明

    • -t btrfs - btr ファイルシステムを指定する
    • -L volume-label - Volume Label を指定する
    • /dev/device-name - ファイルシステムを作成するデバイス (物理パーティション/Logical Volume)を指定する
  3. Volume Label の変更

    btrfs の filesystem コマンドの label サブシステムコマンドを実行して Volume Label を変更する。

    # btrfs filesystem label {/dev/<device-name>|<mount-point>} <volume-label>

    引数の説明

    • {/dev/device-name|mount-point} - ファイルシステムを作成したデバイス (物理パーティション/Logical Volume)を指定する
    • volume-label - Volume Label を指定する
  4. ファイルシステムの拡大/縮小

    ファイルシステムのサイズの拡大/縮小は、btrfs の filesystem コマンドの resize サブコマンドでファイルシステムのサイズとマウントポイントを指定する。 コマンドの書式は以下のとおり。

    # btrfs filesystem resize {[+|-]<size>[k|K|m|M|g|G|t|T] | max} <mount-point>
    • サイズの指定
      • サイズの前に + / - を指定すると、現在のサイズから指定したサイズだけ 拡大/縮小する。+ / - を付けないと、指定したサイズが変更後のファイル システムのサイズとなる。
      • 単位を指定せずに size(数値)を指定すると、単位はバイト数となる
      • 単位 k|K|m|M|g|G|t|T は、2の累乗のキロ、メガ、ギガ、テラバイトである
      • max を指定するとファイルシステムを作成したデバイス (物理パーティション/Logical Volume)の領域全体にサイズを拡張する。
    • mount-point

      サイズ変更の対象となるファイルシステムは、デバイスをするのではなく、 ファイルシステムをマウントしたマウントポイントを指定する。

  5. デフラグの実行

    birtfs の filesystem コマンドの defragment サブコマンドに ファイル、または ディレクトリ(複数指定可能)を指定してデフラグを実行する。

    # birtfs filesystem defragment {<file-path>|<dir-path>} ...
参考文献

Resizing partition

  1. ツールのパッケージ

    parted

  2. パーティションの確認
    # parted -l

    上記のコマンドを実行すると、パーティション番号、(パーティションの)開始、 (パーティションの)終了、(パーティションの)サイズが表示されるが、開始、終了、 サイズは、kB、MB、GB などの単位で表示される。

    パーティションの開始、終了の単位をセクターで表示したい時は、以下のように 対話モードで parted コマンドを実行する。

    # parted /dev/<device-name>
    (parted) unit s  <== サイズの単位をセクターに指定
    (parted) print   <== パーティションの一覧を表示
    Number  Start     End          Size         File system  Name          Flags
     1      2048s     1230847s     1228800s     fat32        EFI System..  boot, esp
     2      1230848s  3327999s     2097152s     ext4
    ...
    (parted)
  3. パーティションのリサイズ

    パーティションのリサイズとは、パーティションの終了位置を変更することである。 対話モードで parted を実行してパーティションのサイズを変更する。

    # parted /dev/<device-name>
    (parted) unit s  <== サイズの単位にセクターを指定
    (parted) resizepart <partition-number> <end-sector>
    (parted) quit
    注 意

    パーティションのリサイズは、ファイルシステムの内容を気にせずに パーティションの終了位置を変更するので、特にパーティションのサイズを縮小 する(終了位置を小さくする)場合は、事前にファイルシステムの縮小を済ませて おくこと。

    仮想ディスクの容量を追加し、最後のパーティションに追加された容量分を 追加する場合の parted のコマンドを以下に示す。

    # parted /dev/sda
    ※サイズの単位をセクターにする
    (parted) unit s
    ※空き領域を含めてパーティション情報を表示する
    (parted) print free
    モデル: ATA VBOX HARDDISK (scsi)
    ディスク /dev/sda: 83886080s
    セクタサイズ (論理/物理): 512B/512B
    パーティションテーブル: gpt
    ディスクフラグ: 
    
    番号  開始       終了       サイズ     ファイルシステム  名前                  フラグ
          34s        2047s      2014s      空き容量
     1    2048s      1230847s   1228800s   fat32             EFI System Partition  boot, esp
     2    1230848s   3327999s   2097152s   ext4
     3    3328000s   67106815s  63778816s                                          lvm
          67106816s  83886046s  16779231s  空き容量
    
    ※空き容量の終了セクタを指定して最後のパーティションのサイズを変更する
    (parted) resizepart 3 83886046s
    ※partedコマンドを終了する
    (parted) quit

auto mount removable media

Thunar (xfce4のファイルマネージャー)を使用する場合

以下のコマンドを実行して、パッケージをインストールする。

# dnf install thunar-volman gvfs

dnf command (fc29)

パッケージの更新

更新されたパッケージのインストールは、以下のコマンドを実行する。

# dnf upgrade [<パッケージ名> ...]

また、更新を除外するパッケージを指定する場合は、「-x <パッケージ名>」を 指定する。例えば、「kernel」で始まるパッケージの更新を除外する場合は、 「dnf -x 'kernel*' upgrade」を実行する。

パッケージ名の指定について

<パッケージ名>は、以下の形式で指定が可能である。

  • パケージ名そのもの。例えば、「kernel」、「kernel-devel」など
  • ワイルドカードを指定したパッケージ名。例えば、「kernal」で始まるパッケージ 名を指定する場合は、「'kernel*'」を指定する。なお、シングルクォート (またはダブルクォート)の指定は実は不要だが、一般のシェル引数のイメージと 合わせる意味で、ワイルドカードの指定はシングルクォート、または ダブルクォートを付ける場合が多いようである。
  • バージョンの指定。バージョンを省略すると最新バージョンがインストール される。バージョンを指定する場合は、「<パッケージ名>-<バージョン>」、 又は「<パッケージ名>-<バージョン>-<リリース>」の形式で指定する。 例えば、xrdpをバージョン指定する場合は、「xrdp-0.9.5」のように指定する。 リリースまで指定する場合は、「xrdp-0.9.5-1.fc27」と指定する。
  • アーキテクチャの指定。アーキテクチャを省略すると現在のシステムの アーキテクチャ(x86_64、i686など)のパッケージを扱う。アーキテクチャを指定 する場合は、「<パッケージ名>.<アーキテクチャ>」の形式で指定する。 例えば、xrdpの32ビット版を指定する場合は、「xrdp.i686」の様に指定する。
  • バージョンとアーキテクチャの指定。 「<パッケージ名>-<バージョン>-<リリース>.<アーキテクチャ>」の 形式でパッケージ名、バージョン、リリース、アーキテクチャを全て指定する。 xrdpをバージョン、アーキテクチャまで指定する場合は、 「xrdp-0.9.5-1.fc27.i686」の様に指定する。

セキュリティ・アップデートの適用

「dnf --security upgrade」コマンドを実行すると、セキュリティ更新対象の パッケージがインストール(アップグレード)される。

システム起動時にセキュリティ更新対象のパッケージをインストールするには、 crontabの設定を以下のようにすれば良い。

@reboot dnf -y --security upgrade
応用例

システム起動時にセキュリティ更新パッチが存在し、clamdscan コマンドが動いて いない場合に、更新パッケージを全てインストールする場合は、crontab に以下の 設定をする(改行せずに1行で設定する)。

@reboot if [ x`upower -i /org/freedesktop/UPower/devices/line_power_AC | grep 'online:' | sed 's/.* //g'` = xyes -a `ps h -C clamdscan | wc -l` -eq 0 -a `dnf -R 1 list --upgrades --security --refresh -q | wc -l` -gt 0 ]; then if [ `systemctl status clamonacc | grep 'Active: active' | wc -l` -gt 0 ]; then systemctl stop clamonacc; dnf -y upgrade; systemctl start clamonacc; else dnf -y upgrade; fi; fi
コマンドの説明
  • 起動後は、dnfdragora-updater が実行されているため dnf コマンドが実行 されない。そのため、dnf コマンドに -R オプション(最大指定した分まで 待つ)を指定して、dnfdragora-updater コマンドが終了した頃合いを 見計らって条件判定のための dnf コマンドを実行する
  • clamdscan コマンド実行中は、dnf コマンドを実行しない
補足説明

少なくともfc25では、dnfコマンドに「--security」オプションが存在しなかった ため、以下のようなコマンドを実行していた。

dnf -y upgrade `dnf -q updateinfo list updates security | \
    sed -e 's/^.* //g' -e 's/\-[0-9].*$//g' | uniq` _DUMMY_
  • dnfコマンドの最後の引数「_DUMMY_」は、セキュリティ通知が1件も無かった 場合に、更新通知された全てのパッケージがインストールされることを抑止する ためのダミーの引数である。

更新履歴の確認

  • 更新履歴の一覧を表示
    # dnf history [<spec>...]

    <spec>は、パッケージ名での設定(例:kernelで始まるパッケージの更新履歴は 「'kernel*'」を指定)、またはトランザクションIDの指定をする。 トランザクションIDの指定は、「<from_ID>...<to_ID>」の指定ができる。

  • 更新内容の表示
    # dnf history info [<spec>...]
    • <spec>を省略すると、最後のトランザクションの内容が表示される
    • <spec>を指定すると、それに該当するトランザクションの内容を表示する
    • <spec>は、「dnf history」と同様な設定が可能だが、パッケージ名を ワイルドカード(*)で指定することはできない模様
  • 更新結果のロールバック
    # dnf history rollbaxck <spec>

    <spec>には、トランザクション、またはパッケージ名を指定する。

    • トランザクション番号を指定した場合

      指定したトランザクション番号より「後の」更新を取り消す。つまり、指定された トランザクション番号より後にインストール、更新されたパッケージを アンインストール若しくは前のバージョンに戻す。

    • パッケージ名を指定した場合

      該当するパッケージの変更が最後に適用されたトランザクションの トランザクション番号を指定した動きになる。

トピックス

  • リポジトリの閲覧
  • OSのバージョンを固定してパッケージをアップグレードする

    /etc/dnf/vars/releasever ファイルにOSのバージョン(例:Fedora39の場合は 「39」)を設定する。

    備 考
    • Fedora ディストリビューションの場合は、「dnf upgrade」コマンドを実行 することによってバージョン番号が上がることはないが、Red Hat Linux 互換のディストリビューションの場合は、「dnf upgrade」コマンドの実行 によってマイナーーバージョンが上がることがある。このようなときに、 OSのマイナーバージョンを固定したい場合に、ここで述べる手順を実施する。
    • Red Hat Linux 互換ディストリビューションのOSのマイナーバージョンを固定 する方法は、ここで述べる手順の他に、「kernel*」「os-name-release」 などのパッケージを更新対照から除外することで実現する場合もある。
    注 意

    ディストリビューションによっては、releasever ファイルの設定だけでは、 OSバージョンの固定ができない場合がある。これは、リポジトリのミラー一覧を 取得したときに最新のバージョンしか取得できない場合に発生する。その場合は /etc/yum.repos.d ディレクトリ配下の「.repo」ファイルを以下のように編集 して対応する。

    1. 「mirrorList=」の行をコメントアウト(先頭に「#」をつける)する
    2. 「#baseurl=」の行のコメントを外す
    参考文献
  • 特定のパッケージについて更新をしない

    /etc/dnf/dnf.conf ファイルに 「excludepkgs=パッケージ名[,パッケージ名,...]」の形式で除外する パッケージの名前を設定する。パッケージ名は「*」の指定が可能である。

    カーネル関連のパッケージの更新を抑止し、Red Hat Enterprise Linux 互換OSの マイナーバージョンのアップグレードを抑止したい場合は、/etc/dnf/dnf.conf ファイルに以下の設定(最後の行)を追加する。

    [main]
    ...
    excludepkgs=kernel* redhat-release

docker (fc36)

パッケージのインストール

# dnf install docker
注 意
  • Fedora 31 より docker パッケージが廃止となったため、docker と互換性のある podman パッケージをインストールすること。
  • docker コマンドの利用方法(コマンド引数、Docerfile の書き方)は、doocker パッケージと、podman-docker (podman の docker インターフェース)で大体の 互換性があるので、podman-docker 利用の場合もこちらを参照すること。
  • docker パッケージと podman 及び podman-docker パッケージでは、システム 設定(特にプロキシの設定)が大きく異なることに注意すること。

docker概要

dockerは1つのコマンドを実行するのに必要なファイルやデバイスを1つにまとめた もので、これを「イメージ」(image)と呼ぶ。また、イメージを実行したときの スナップショットを「コンテナ」(container)と呼ぶ。

システム設定

  • Docker proxy settings
    • docker cli に対するproxyの設定(Docker 17.07 以上の場合)

      docker cli (各種dockerコマンド)に対して proxy サーバの設定をする場合は、 docker コマンドを実行するユーザのホームディレクトリの下に、 「.docker/config.json」ファイルを作成し、以下のように記述する。

      {
       "proxies":
       {
         "default":
         {
           "httpProxy": "http://192.168.1.12:3128",
           "httpsProxy": "http://192.168.1.12:3128",
           "noProxy": "*.test.example.com,.example2.com,127.0.0.0/8"
         }
       }
      }
      • この設定により、コンテナの生成時/起動時にプロキシ設定の環境変数が コンテナ内に自動生成される。
      • docker コマンドを使用する場合は、基本的にこの設定だけで良いはずである。
    • dockerデーモンへのproxyの設定

      dockerデーモンにproxyサーバーの設定をする場合は、 /usr/lib/systemd/system/docker.service.d ディレクトリの下に http-proxy.conf ファイルを作成し、以下の内容を記述する。

      [Service]
      Environment="HTTP_PROXY=http://proxy.example.com:80"
      Environment="HTTPS_PROXY=https://proxy.example.com:443"
      Environment="NO_PROXY=*.test.example.com,.example2.com,127.0.0.0/8"
      Environment="http_proxy=http://proxy.example.com:80"
      Environment="https_proxy=https://proxy.example.com:443"
      Environment="no_proxy=*.test.example.com,.example2.com,127.0.0.0/8"

      【説明】

      • 「HTTP_PROXY=」、「HTTPS_PROXY=」には、それぞれ HTTP、HTTPS の プロキシサーバーのホスト名、ポート番号を設定する
      • 「NO_PROXY=」にはプロキシサーバーを通さずに直接通信する送信先の ホスト名、IPアドレス(ネットワークアドレス)を設定する
      • docker イメージを作成する(docker build コマンドを実行する)場合は この設定が必要
      • Docker 17.07 以下の場合で、コンテナを作成、起動する場合はこの設定は 不要(変わりに ~/.docker/config.json を設定する)
    参考
  • Rootless モードの設定

    root 権限のないユーザーが docker コマンドを実行すると、/var/run/docker.sock のアクセス権限エラーが発生するので、アクセスを許可するために以下のコマンド を実行して、docker コマンドを実行するユーザーを docker グループに参加 させる。

    # usermod -aG docker <user-id>

イメージの作成と管理

  1. docker image の作成

    Dockerfile を配置したディレクトリに移動して、以下のコマンドを実行する。

    # docker build -t <image-name> --build-arg <env-name>=<value> ... .
  2. docker image の一覧表示
    # docker images [-q]

    -q オプションを指定すると、イメージID のみを表示する。

  3. docker image の削除
    # docker rmi {<image-name>|<image-id>}

コンテナの作成と管理

  1. コンテナの作成

    docker イメージからコンテナを作成するコマンドは以下のとおり。

    # docker create|run [--name <container-name>] \
      [--restart=no|always|unless-stopped] [--rm=false|true] \
      [-p <host-port>:<container-port>] [--privileged] \
      [-v <host-dir>:<container-dir>] [-i] [-t] <image-name>
    • create コマンドを実行するとコンテナを作成するがそのコンテナは実行しない。 run コマンドを実行るとコンテナを作成した後にそのコンテナを実行する。
    • 択一選択で値を設定するオプションを省略した場合は、最初に記述した値が 既定値となる。
    • --rm true を指定すると、コンテナを停止したときにコンテナを削除する。
    • -p <host-port>で指定したホストのポート番号の入力を<container-port>で 指定したコンテナのポート番号に転送する。
    • --privileged を指定すると、ホストのデバイスへのアクセスが可能になる。
    • -v <host-dir>で指定したホストのディレクトリ(サブディレクトリも含む)を <container-dir>で指定したコンテナのディレクトリから参照できるように する。コンテナ実行中に<container-dir>ディレクトリ配下のファイルを変更 した場合に、変更内容をホストのファイルにも反映させる場合は、--privileged オプションを指定すること。
    • -i オプションを指定すると、標準入力からの入力を受け付ける。また、-t オプションを指定すると、tty を割り当てる。-it を指定することによって 端末からの入力をコンテナに渡すことが可能になる。
    • run コマンド実行した場合、コンテナをバックグラウンドでの実行に切り換える 場合は、「ctrl-p ctrl-q」をタイプする。
  2. コンテナの停止
    # docker stop <container-name>
  3. コンテナの開始
    # docker start <container-name>
  4. コンテナの一覧表示
    # docker ps [-a] [-q]
    • -a オプションを指定すると、停止中のコンテナも表示する。省略すると起動中の コンテナのみを表示する。
    • -q オプションを指定すると、コンテナIDのみを表示する。
  5. コンテナの削除
    # docker rm {<container-name>|<container-id>}

イメージの保存と読み込み

  • docker image をtar形式のファイルに保存する場合は、以下のコマンドを実行する。
    # docker save --output=<image-file> <image-name>
  • docker save コマンドで保存した docker image のファイルから docker image を作成する場合は、以下のコマンドを実行する。
    # docker load --input=<image-file>
    備 考

    <image-file>は、tar形式のファイルの他、tar.gz、tar.xz 形式のファイルを 指定することが可能である。

コンテナのエクスポートとインポート

  • docker container をtar形式のファイルにエクスポートする場合は、以下の コマンドを実行する。
    # docker export --output=<container-file> <container-name>
  • docker export コマンドでエクスポートされた docker container のファイルから docker image を作成する(containerの作成ではない)場合は、以下のコマンドを 実行する。
    # cat <container-file> | docker import - <image-name>

    または

    # docker import <container-file> <image-name>
    備 考

    <container-file>は、tar形式のファイルの他、tar.gz、tar.xz 形式の ファイルを指定することが可能である。

イメージの作成

  1. Dockerfile

    作成するイメージの内容は、Dockerfile という名前のファイルに記述する。 Dockerfile の書式は以下のとおりである。

    FROM [<repository>/]<image-name>[:<tag>]
    [ARG <arg-name>[=<default-value>]]
    [ENV <env-name>=<value> [<env-name>=<value> ...]]
    [ADD <src-path> [<src-path> ...] <dest-path>]
    [COPY <src-path> [<src-path> ...] <dest-path>]
    RUN <command-1> \
     && <command-2> \
     ...
     && <command-n>
    EXPOSE <port-no> [<port-no> ...]
    CMD ["<command>"[, "<arg-1>", "<arg-2>", ...]]

    コマンドの説明

    • FROM [repository/]image-name[:tag]
      • ベース・イメージ(作成するイメージの元になるイメージ)の名前(とタグ)を 指定する。
      • 既にイメージがホストに存在する場合はそれが使用されるが、存在 しない場合はリポジトリからイメージをダウンロードしてそれを使用する。
      • [repository/] を省略した場合は、Docker Hub からイメージを取得する。
      • リポジトリを指定する場合は、リポジトリのURLからプロトコル(https://) を除いた部分を指定する。
        FROM centos:7
        参考
    • ARG arg-name[=default-value]]

      docker build コマンドの --build-arg パラメータで指定する変数名(と変数の 既定値)を定義する。

      「docker build --build-arg PROXY_URL ...」を実行する場合の変数名 「PROXY_URL」は以下のように定義する。

      ARG PROXY_URL=http://foo:8080
    • ENV env-name=value [env-name=value ...]

      Dokcerファイルの中で使用する環境変数の名前と値を指定する。環境変数ごとに 別々のコマンドを記述できるが、キャッシュの階層を減らすために1つの コマンドで複数の環境変数を設定することが推奨されている。

      ENV HTTP_PROXY=http://foo:8080 HTTPS_PROXY=http://foo.8080
    • ADD src-path [src-path ...] dest-path

      コンテキスト(docker build コマンドで指定したディレクトリ)に配置された src-path のファイルまたはディレクトリ、またはURLで指定したファイルを イメージのdest-pathで指定したファイルまたはディレクトリに追加する。

      • src-path にコンテキストのファイルまたはディレクトリを指定する場合は、 コンテキストからの相対パスで指定する。
      • src-path に指定したファイルがコンテキストの tar、tar.gz、tar.bz2、 tar.xz の場合は、アーカイブを解凍した内容を dest-path で指定された ディレクトリに配置する。
      • dest-path は、イメージの絶対パス(/で始まるパス)、または WORKDIR からの 相対パスを指定する。
      • dest-path は、src-path で1つのファイルを指定した場合は、ファイルを 指定可能であるが、それ以外の場合はディレクトリを指定すること。
        ADD foo.tar.xz /bar/
        ADD http://foo.com/path/to/file /bar
    • COPY src-path [src-path ...] dest-path

      コンテキスト(docker build コマンドで指定したディレクトリ)に配置された src-path のファイルまたはディレクトリをイメージのdest-pathで指定された ファイルまたはディレクトリにコピーする。

      • src-path はコンテキストからの相対パスで指定する。
      • dest-path の指定は、ADDコマンドを参照のこと。
        COPY http_conf/httpd.conf /etc/httpd/conf/
    • RUN

      イメージを作成するためのコマンドを記述する。コマンドごとに別々のRUN コマンドを設定することが可能であるが、キャッシュの階層を減らすために、 コマンドを「&&」で連結して1つのRUNコマンドを設定することが推奨されて いる。

    • EXPOSE port-no [port-no ...]

      コンテナ実行時にリッスンするポートの番号を指定する。

    • CMD ["command"[, "arg-1", "arg-2", ...]]

      コンテナ起動時に実行するコマンドを指定する。コンテナ起動時に実行する コマンドは1つだけである。コマンドにシェルスクリプトを指定すれば複数の コマンドを実行することが可能であるが、多用すべきではない。

      下記の例では、コンテナ起動時に "/usr/sbin/httpd -k start" を実行する。

      CMD ["/usr/sbin/httpd", "-k", "start"]
  2. docker build コマンド

    Dockerfile からイメージを生成するには、以下のように docker build コマンドを 実行する。

    • docker build [-t image-name] [--build-arg arg-name=value [ --build-arg arg-name=value ...]] context-path

      context-path で指定されたコンテクストのディレクトリに配置されている Dockerfile を使用してイメージを作成する。

    • docker build -f context-path/dockerfile-name ... context-path

      context-path で指定したコンテキストのディレクトリに配置された Dockerfile の名前を指定してイメージを作成する。

参考文献

TOPICS

RUNコマンド

DockerfileのRUNコマンドのトピックスを以下に記載する。

  • 設定ファイルの作成

    Dockerfile のRUNコマンドの中で設定ファイルの内容を記述して、ファイルを作成 するには、以下のようにRUNコマンドを記述する。

    RUN echo $'<記述内容1行目>\n\
    <記述内容2行目>\n\
    ...
    <記述内容最終行>' > /path/to/file
  • 設定ファイルへの変数の適用

    上記の「設定ファイルの作成」の手順では、$変数名 の記述を変数の値に置換する ことはできない。そのため、変数の値をエスケープした上でsedコマンドで 設定ファイルの内容を置換する。EVNコマンドやARGコマンドで設定した変数の値を /path/to/file に作成した設定ファイルの内容に反映させるためのRUNコマンドは 以下のように記述する。

    RUN echo $'...\n\
    ...\n\
    ...' > /path/to/file \
     && export <変数名>_ESC=`echo ${<変数名>} | sed -e 's/\\//\\\\\\//g'` \
     && sed -e "s/\${<変数名>}/${変数名>_ESC}/g" -i /path/to/file
docker-compose

メモ

  • docker-compose.yml を記述して、docker-compose コマンドを実行することにより イメージの作成、コンテナの作成/起動/停止をまとめて行うことが可能になる。
  • プロキシ経由で外部ネットワークにアクセスする環境では、Dockerイメージを作成 する時に外部ネットワークを参照できない場合がある。
    • Dockerfile で Docker イメージのリポジトリ参照や、OSのパッケージ インストールはできるが、Python のモジュールがインストールできない事象が ある。
cronの実行

dockerコンテナでcronを動かすためには、Dockerfileで以下の設定を行う。

  1. cronieパッケージをインストールしてcronを実行できるようにする
  2. cronの設定ファイルにプロキシ設定のための環境変数を設定する。 cronは必要最小限の環境変数しか読み込ます、dockerのシステム設定で設定した プロキシ設定のための環境変数が読み込まれないためこの手順が必要である
  3. cronの設定ファイルにcronで実行するコマンドの設定をする
    • 「bash -l -c "<実行コマンド>"」により実行コマンドをログインシェルから 起動されたかのように実行する
    • コマンドの後ろに「1>>/proc/1/fd/1 2>>/proc/1/fd/2」を続けて、実行 コマンドの標準出力、及び標準エラーをそれぞれ dockerコンテナの標準出力、 標準エラー出力にリダイレクトする
  4. crodデーモンをフォアグラウンドで実行する

以下に docker build コマンドの --build-arg パラメータで以下の環境変数が指定 された場合に、上記で述べた設定を実行する Dockerfile の例を示す。

  • PROXY_CRON : プロキシのURL
  • NO_PROXY_CRON : プロキシから除外するホスト名またはIPアドレス。複数のものを 設定する場合はコンマで区切る
FROM fedora38-container-base

ARG PROXY_CRON
ARG NO_PROXY_CRON
RUN dnf install -y cronie \
 && if [ _$PROXY_CRON != _ ]; then \
    echo HTTP_PROXY=$(printenv PROXY_CRON) >> /etc/crontab; \
    echo HTTPS_PROXY=$(printenv PROXY_CRON) >> /etc/crontab; \
    echo http_proxy=$(printenv PROXY_CRON) >> /etc/crontab; \
    echo https_proxy=$(printenv PROXY_CRON) >> /etc/crontab; \
    fi \
 && if [ _$NO_PROXY_CRON != _ ]; then \
    echo NO_PROXY=$(printenv NO_PROXY_CRON) >> /etc/crontab; \
    echo no_proxy=$(printenv NO_PROXY_CRON) >> /etc/crontab; \
    fi \
 && echo "* * * * * root bash -l -c 'curl http://fedoraproject.org 1>>/proc/1/fd/1 2>>/proc/1/fd/2'" >> /etc/crontab
CMD crond -f

Doxia Converter (fc25) - convert apt format to xhtml format

ツールのインストールと実行

doxia-converter-1.2-jar-with-dependencies.jar をダウンロードして、適切な場所に配置する。

以下のコマンドを実行して、フォーマットを変換する。

$ java -jar <jar-file-dir>/doxia-converter-1.2-jar-with-dependencies.jar [-f] \
  -in <input-file-or-dir> -from <input-format> \
  -out <output-file-or-dir> -to <output-format>

引数の説明

  • -f

    出力がxml形式(xhtmlを含む)の場合、タグにインデントを付けて、読みやすい形で出力 する。

  • -from input-format

    入力ファイルのフォーマットを指定する。指定可能なフォーマットは以下のとおり。

    apt, confluence, docbook, fml, twiki, xdoc, xhtml

  • -to output-format

    出力ファイルのフォーマットを指定する。指定可能なフォーマットは以下のとおり。

    apt, docbook, fo, itext, latex, rtf, xdoc, xhtml

APT形式からHTML形式への変換

  1. Doxia Converterを使用してAPT形式からXHTMLに変換する。
    $ java -jar <jar-file-dir>/doxia-converter-1.2-jar-with-dependencies.jar \
      -in <input-file> -from apt -out . -to xhtml

    上記のコマンドを実行すると、カレント・ディレクトリの下に入力ファイル名の 後ろに「.xhtml」が追加されたファイルが作成され、そこに変換結果が保存される。

  2. URLエンコーディングからの復号

    nkfパッケージがインストールされていない場合は、以下のコマンドを実行してnkf パッケージをインストールする。

    # dnf install nkf

    Doxia Converterは、英数字以外の文字はURLエンコーディング(#+4桁の数値)に 変換してしまうので、以下のコマンドを実行してURLエンコーディングを復号する。

    $ nkf --numchar-input <変換元ファイルのパス> | tee <変換結果のファイルのパス>
  3. CSSを指定する。

    変換されたxhtmlは、以下のcssを使用している。

    • maven-base.css
    • maven-theme.css
    • site.css

    そのため、xhtmlのheadタグの中(titleタグの後ろが良い)に以下の記述を追加する。

    <style type="text/css" media="all">
      @import url("./css/maven-base.css");
      @import url("./css/maven-theme.css");
      @import url("./css/site.css");
    </style>

APT形式からMarkdown形式への変換

  1. Doxia Converterを使用してAPT形式からDocBookに変換する。
    $ java -jar <jar-file-dir>/doxia-converter-1.2-jar-with-dependencies.jar \
      -in <file-name>.apt -from apt -out . -to docbook

    上記のコマンドを実行すると、カレント・ディレクトリの下に入力ファイル名の 後ろに「.docbook」が追加されたファイル(file-name.apt.docbook)が作成され、 そこに変換結果が保存される。

  2. pandocを使用して、DocBook形式からMarkdown形式に変換する。
    $ pandoc -f docbook -t markdown -o <file-name>.md <file-name>.apt.docbook

参考文献


DVD backup (fc25)

パッケージのインストール

# dnf install dvdbackup cdw

DVD全体のバックアップ

格納ディレクトリのパスを指定して以下のコマンドを実行すると、 格納ディレクトリの下にタイトル名のディレクトリが作成され、その下に DVDの内容が保存される。

$ dvdbackup -M -i /dev/cdrom -o <格納ディレクトリ>

なお、商用のDVD Videoなどはコピーガードがかかっているため、バックアップができない。

ISOイメージの作成

dvdbackupコマンドで指定した格納ディレクトリの下のタイトル名までの ディレクトリを指定して、以下のコマンドを実行してISOイメージのファイルを 作成する。

$ mkisofs -dvd-video -udf -o <ISOイメージファイルのパス> \
  <格納ディレクトリ>/<タイトル名>
備 考

Blu-rayの場合は、-dvd-video オプションの代わりに -allow-limited-size オプションを指定する。

ISOイメージのDVDメディアへの焼き付け

ISOイメージファイルのパスを指定して以下のコマンドを実行して、ISOイメージを DVDのメディアに焼く。

$ growisofs -dvd-compat -Z /dev/cdrom=<ISOイメージファイルのパス>
参 考

dvd+rw-tools (fc25) - format and record DVD

dvd+rw-formatはDVD-RW、DVD+RWなどのDVDメディアを初期化やファイルをDVDに記録 するためのコマンドを提供するパッケージである。

パッケージのインストール

以下のコマンドを実行して、dvd+rw-toolsをインストールする。

# dnf install dvd+rw-tools

DVDメディアの初期化と書込み

  1. DVD-RWメディアの初期化

    以下のコマンドを実行して、DVD-RWのメディアを初期化する。

    $ dvd+rw-format -blank /dev/cdrom

    「-blank」の代わりに「-blank=full」を指定すると、「full reformat」をする。

  2. ファイルの書き込み

    DVD single layer への書込みは、以下のコマンドを使用する。DVD double layer の場合は、「Blu-rayメディアの初期化と書き込み」の項目を参照すること。

    1. 初回のファイル書き込み
      $ growisofs -Z /dev/cdrom [-R] [-J] <ファイル/ディレクトリのパス> ...

      Joliet and Rock-Ridge extension の DVDメディア(Windowsでメディアを使用 する場合等)に書き込む場合は、「-R -J」オプションも指定する。

    2. 2回目以降のファイルの書き込み
      $ growisofs -M /dev/cdrom [-R] [-J] <ファイル/ディレクトリのパス> ...
  3. ISOイメージの書き込み
    $ growisofs -dvd-compat -Z /dev/cdrom=<ISOイメージのパス>

Blu-rayメディアの初期化と書き込み ※検証中

  1. Blu-rayメディア(BD-RE)の初期化

    DVDメディアと同じコマンドを実行する。

    $ dvd+rw-format -format=full -ssa=max /dev/cdrom

    http://fy.chalmers.se/~appro/linux/DVD+RW/Blu-ray/によると下記の情報あり

    • BD-REのブランクメディアの場合、dvd+rw-formatは、256MBしかフォーマット しない
    • dvd+rw-format -ssa=max を指定すると、残りの領域もフォーマットする(らしい)
  2. ファイルの書き込み

    DVD書込みの場合と同じコマンドを使用し、「-overburn」オプションを付ける。 -overburn オプションは、4GB以上のデータを書き込むときに必要なオプションで ある。

    1. 初回のファイル書き込み
      $ growisofs -overburn -Z /dev/cdrom [-R] [-J] <ファイル/ディレクトリのパス> ...

      Joliet and Rock-Ridge extension の DVDメディア(Windowsでメディアを使用 する場合等)に書き込む場合は、「-R -J」オプションも指定する。

    2. 2回目以降のファイルの書き込み

      -Z オプションの代わりに -M オプションを指定する。

  3. ISOイメージの書き込み

    DVDメディアと同じコマンドを実行する。

    $ growisofs -dvd-compat -overburn -Z /dev/cdrom=<ISOイメージのパス>

DVDStyler (fc33) DVD authoring application

前提条件

RPM Fusion Repositoryの手順に従ってRPM Fusionのリポジトリに アクセスできるようになっていること。

パッケージのインストール

以下のコマンドを実行して、DVDStyler をインストールする。

# dnf install dvdstyler

初回起動時の設定

  • Language selection

    初回起動時に「language selection」ファイアログがポップアップするので、 「日本語」を選択する。

  • 設定

    「構成」⇒「設定」メニュー から「設定」ダイアログを開く。

    • 「内部」タブ
      • ISOファイル作成コマンド

        mkisofs コマンドを genisoimage コマンドに変更するか、 update-alternatives コマンドを実行して、mkisofs コマンドが /usr/bin/genisoimage を指すようにする。

DVDStylerの使い方

  1. 「ファイル」メニューから「新規」を選択して、「DVDを新規作成」画面を 開く。
  2. 「DVDを新規作成」画面を適宜設定するが、以下の項目は以下に示した設定を する。
    • 映像形式: NTSC 720x480
    • 横縦比: 4:3
    • 音声形式: AC3 48kHz
  3. 「DVDメニュー用テンプレートを選択」画面が表示されるので、Captionを 入力した後にテンプレートを選択する。
  4. 動画ファイルの選択

    画面左側のタブから「ファイルブラウザー」を選択して、動画ファイルを選択し、 画面下部の「動画ファイルをファイルブラウザーからここにドラッグします」と 表示されている場所にドラッグする。「このファイルにはPAL形式の映像が含まれて います。このファイルに合わせて、DVDの映像形式も PAL に変更しますか?」と 表示された場合は、「いいえ」ボタンを押すこと。

  5. タイトルの編集

    画面下部のタイトルアイコンを右クリックして、「プロパティ」を選択して タイトルの編集をする。

    • 映像: ドロップダウンから出力する映像の形式を選択するが、規定の設定のままで 良い。
    • 音声: ドロップダウンから「AC3 48kHz」を選択する。ただし、入力ファイルの 形式が「ac3 48000 Hz」と表示されている場合は、ドロップダウンから「コピー」 を選択して変換処理をせずにそのまま出力するようにする。
    • チャプター位置: チャプター開始位置(時間)を「hh:mm:ss.nnn」の形式でコンマ で区切って入力する。
  6. DVDの書き込み
    1. 「ファイル」メニューから「DVD 書き込み」を選択して、「書込み」画面を 表示する。
    2. 目的に応じて「生成のみ」、「ISOイメージファイルを作成」を選択する。 DVDに書き込む場合は、ISOイメージを作成した後に growisofs コマンドで DVD に書き込むこと。

TOPICS

  • 解像度の高いビデオの作成

    DVD Stylerは、解像度は縦480ピクセルまでしか指定できないが、動画を目的の解像度で mpeg2video形式で作成しておけば、DVD Stylerの映像プロパティで「コピー」を選択 して、元の動画をそのまま使用することができる。

    Shotcutで解像度の高いmpeg2video形式の動画を作成する場合のExportの設定例を 以下に示す。

    1. search から Stock / MPEG-2 を選択する。これにより、Codecタブのcodecが mpeg2video に設定される。
    2. その他の設定については、Shotcut を参照のこと。
  • 画面の構成比

    画面の構成比を16:9に設定してDVDのイメージを生成すると、下記のエラーが 発生する。

    spumux: subgen-image.c:900: imgfix: Assertion `useimg' failed.

    DVDイメージの生成は、画面の構成比を4:3に設定して行うこと。

参考URL


enable hibernate (fc28) - how to enable hibernate

BIOSの設定でSecure Bootが有効となっている場合は、hibernateが動作しない。 hibernateを動作させたい場合は、BIOSの設定でSecure Bootを無効にしてからシステムを 起動する。

出 典

extundelete (fc33) - recover deleted file(s)

extundelete は、ext3/ ext4 ファイルシステムで削除したファイルを復元するための コマンドである。

パッケージのインストール

以下のコマンドを実行してパッケージをインストールする。

# dnf install extundelete

ファイル復元コマンドの書式

指定した時間以降に削除されたファイル/ディレクトリを復元するための コマンドは以下のとおり。

extundelete {--restore-all | --restore-file <file-path>
  | --restore-directory <dir-path>} --after <dtime> [-o <dir-path>] <device>

オプションの説明

  • --restore-all : 全てのファイル/ディレクトリを復元する
  • --restore-file file-path : file-path で指定したファイルを復元する。 file-path は / からの相対パスで指定し、先頭に '/' を付けないこと。
  • --restore-directory dir-path : dir-path で指定したディレクトリを 復元する。dir-path は / からの総隊パスで指定し、先頭に '/' を付けない こと。
  • --after dtime : 1970-01-01 00:00:00 UTC からの経過秒で指定された時刻 以降に削除されたファイルを復元する。時刻の指定例は以下のとおり。
    • --after `date +%s -d '-2 hours'` : 2時間前
    • --after `date +%s -d 'yyyy-MM-dd hh:mm'` : 指定された年月日時分以降
  • -o dir-path : dir-path で指定されたディレクトリの下に復元された ファイルを配置する。このオプションをしていしなかった場合は、カレント ディレクトリの下に「RECOVERED_FILES」ディレクトリが作成され、その 下に復元されたファイルが配置される。
  • device : ディスクのデバイスを指定する。指定したデバイスのディスクから 削除されたファイルを復元する。

ファイル復元コマンドの例

  • 1時間前から現在までに削除されたファイルを home ディレクトリにマウント されたLogical Volumeのファイルシステム(/dev/mapper/fedora-home)から復元 する
    # extundelete --restore-all --after `date +%s -d '-1 hour'` \
      /dev/mapper/fedora-home
  • 年月日時分秒を指定して、/home/foo/bar ディレクトリ配下の削除された ファイルを復元する。復元したファイルは /var/tmp/restored ディレクトリの 下に配置する。ファイルの復元は、/dev/sda2 にマウントされたファイルシステム を対象とする。
    # extundelete --restore-directory home/foo/bar -o /var/tmp/restored \
      --after `date +%s -d '2020-01-23 12:34:56'` /dev/sda2

ファイル復元の手順

ファイルの復元の可能性を高めるためには、削除後にディスクへの書き込みを発生 させないことが重要である。ファイルの削除に気付いたら、復元対象のディスクを すぐに書き込み不可能な状態にして extundelete コマンドを実行する。

/home ディレクトリがマウントされており、その配下のファイルを復元する場合の ファイル手順の例は以下のとおりである。なお、/home ディレクトリは、 Logical Volume /dev/mapper/fedora-home がマウントされたものとする。

  1. /home を読み込み専用でマウントし直す。
    # mount -o remount,ro /dev/mapper/fedora-home
  2. n 分前以降に削除されたファイルを全て復元する。
    # extundelete --restore-all --after `date +%s -d '-n minutes'`  \
      /dev/mapper/fedora-home

参考文献


EPSON printer driver

ドライバーのマニュアルは、「参考」のURLから表示すること。

参 考

EPSON printer driver EW-M660FT (fc33)

ドライバーのダウンロード
  1. ドライバーの検索

    セイコーエプソン株式会社のLinuxドライバーダウンロードについて からセイコーエプソン株式会社のLinuxドライバーダウンロードへ をクリックして「ドライバーダウンロード」のページを開き、以下の内容を入力して 検索する。

    • 製品名や型番を入力:EW-M660FT
    • OS:Linux
  2. ドライバーのダウンロード

    以下のドライバー(括弧内はファイル名)の「ダウンロード」ボタンをクリック ⇒ 「同意する」ボタンをクリック ⇒ *.x86_64.rpmのドライバーをダウンロードする。

    • ESC/P-R Driver (epson-inkjet-printer-escpr-1.7.8-1lsb3.2.x86_64.rpm)
    • Epson Printer Utility (epson-printer-utility-1.1.1-1lsb3.2.x86_64.rpm)
    • Scanner Driver All-in-one package ⇒ 「Package Download Page」リンクを クリック ⇒ Fedora29 64bitのダウンロードボタンをクリック (epsonscan2-bundle-6.6.2.2.x86_64.rpm.tar.gz)
  3. プリンタードライバーのインストールと設定
    1. プリンターをネットワークに接続し、プリンターの電源をONにしておく
    2. ドライバーを保存したディレクトリに移動して以下のコマンドを実行し、 Fedoraリポジトリーからプリンタードライバーをインストールする。
      # dnf install ./epson-inkjet-printer-escpr-1.7.8-1lsb3.2.x86_64.rpm
    3. 以下のコマンドを実行して、CUPSデーモンを再起動する。
      # systemctl restart cups
    4. lpadmin コマンドに次の引数を指定して実行する。
      • -p printer-name

        プリンター名を指定する。

      • -v printer-uri

        設定する値は、以下の手順で取得する。

        1. 以下のコマンドを実行して、自動検出される printer URI を表示する。
          $ lpinfo --include-schemes dnssd -v
        2. 「dnssd://XXX._ipp._tcp.local/?uuid=xxx」となっているものを指定 する。
      • -P PPD-file-path

        設定するファイルは、/usr/share/ppd/Epson/epson-inkjet-printer-escpr/ ディレクトリの下から、ファイル名にプリンターのモデル名が含まれている ものを選択する。

      • -E

        このオプションを指定して、プリンターを有効にする。

      実行するコマンドは、以下のとおり。

      # lpadmin -p EPSON_EW-M660FT \
        -v dnssd://EPSON%20EW-M630T%20Series._ipp._tcp.local/?uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
        -P /usr/share/ppd/Epson/epson-inkjet-printer-escpr/Epson-EW-M660FT_Series-epson-inkjet-printer-escpr.ppd.gz \
        -E 
    備 考

    CUPSのWebブラウザー画面(http://localhost:631/)からの設定では、 プリンタードライバーの取得エラーが発生するので、lpadmin コマンドより プリンターを追加する手順を採用した。

  4. プリンターユーティリティのインストール

    RPMパッケージをダウンロードしたディレクトリに移動して、以下のコマンドを 実行する。

    # dnf install ./epson-printer-utility-1.1.1-1lsb3.2.x86_64.rpm
  5. スキャナードライバーのインストールと設定

    スキャナードライバーのインストール

    1. Scanner Driver All-in-one package のアーカイブを解凍する。
      $ tar xvfz epsonscan2-bundle-6.6.2.2.x86_64.rpm.tar.gz
    2. 解凍により作成されたディレクトリに移動し、コアパッケージ、 プラグインパッケージの順にインストールする。
      # dnf install ./core/epsonscan2-6.6.2.2-1.x86_64.rpm
      # dnf install ./plugins/epsonscan2-non-free-plugin-1.0.0.3-1.x86_64.rpm

    ネットワークスキャナーの追加

    1. ネットワークスキャナーの追加ダイアログを開く

      以下のいずれかの方法で、「ネットワークスキャナーの追加」ダイアログ ボックスを開く。

      • Epson Scan 2 を初回起動時は、「デバイスを選択して下さい」のダイアログが 表示されるので、ドロップダウンリストの「追加」を選択し、選択状態に なったら、もう一度クリックする
      • メインウィンドウ上部のスキャナーコンボボックスをクリックし、そこに 表示される「追加」ボタンをクリックする
    2. プリンターのIPアドレスの設定

      プリンター本体のメニューでプリンターに設定されたIPアドレスを確認し、 その値を「ネットワークスキャナーの追加」ダイアログの「アドレス」に 設定して「追加」ボタンをクリックする。

EPSON printer driver EW-M873T (fc43)

ドライバーのダウンロード
  1. ドライバーの検索

    セイコーエプソン株式会社のLinuxドライバーダウンロードについて からセイコーエプソン株式会社のLinuxドライバーダウンロードへ をクリックして「ドライバーダウンロード」のページを開き、以下の内容を入力して 検索する。

    • 製品名や型番を入力:EW-M873T
    • OS:Linux
  2. ドライバーのダウンロード

    以下のドライバー(括弧内はファイル名)の「ダウンロード」ボタンをクリック ⇒ 「同意する」ボタンをクリック ⇒ 「Package Download Page」をクリック ⇒ ⇒ ディストリビューション: [rpm]、アーキテクチャ: 64bit(x86_64) の「Download」を クリックする。

    製品名 区分 モジュール名
    EW-M873T Series Printer Driver Epson Inkjet Printer Driver 2 (ESC/P-R) for Linux
    EW-M873T Series Printer Driver Epson Printer Utility for Linux
    EW-M873T Series Scanner Driver Epson Scan 2
  3. Epson Inkjet Printer Driver 2 (ESC/P-R) for Linux のインストールと設定
    1. プリンターをネットワークに接続し、プリンターの電源をONにしておく
    2. ドライバーを保存したディレクトリに移動して以下のコマンドを実行し、 プリンタードライバーをインストールする。
      # dnf install ./epson-inkjet-printer-escpr2-1.2.36-1.x86_64.rpm

      「パッケージ XXXXX は検証を行いません: ダイジェストなし」の エラーメッセージが表示されてRPMパッケージをインストールできなかった場合は 以下のコマンドを実行してRPMパッケージをインストールする。

      # rpm -i --nodigest ./epson-inkjet-printer-escpr2-1.2.36-1.x86_64.rpm
    3. 以下のコマンドを実行して、CUPSデーモンを再起動する。
      # systemctl restart cups
    4. lpadmin コマンドに次の引数を指定して実行する。
      • -p printer-name

        プリンター名を指定する。

      • -v printer-uri

        設定する値は、以下の手順で取得する。

        1. 以下のコマンドを実行して、自動検出される printer URI を表示する。
          $ lpinfo --include-schemes dnssd -v
        2. 「dnssd://XXX._ipp._tcp.local/?uuid=xxx」となっているものを指定 する。
      • -P PPD-file-path

        設定するファイルは、/usr/share/ppd/epson-inkjet-printer-escpr2/Epson/ ディレクトリの下から、ファイル名にプリンターのモデル名が含まれている ものを選択する。

      • -E

        このオプションを指定して、プリンターを有効にする。

      実行するコマンドは、以下のとおり。

      # lpadmin -p EPSON_EW-M873T \
        -v dnssd://EPSON%20EW-M873T%20Series._ipp._tcp.local/?uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
        -P /usr/share/ppd/epson-inkjet-printer-escpr2/Epson/Epson-EW-M873T_Series-epson-inkjet-printer-escpr2.ppd.gz \
        -E
    備 考

    CUPSのWebブラウザー画面(http://localhost:631/)からの設定では、 プリンタードライバーの取得エラーが発生するので、lpadmin コマンドより プリンターを追加する手順を採用した。

  4. Epson Printer Utility for Linux のインストール

    RPMパッケージをダウンロードしたディレクトリに移動して、以下のコマンドを 実行する。

    # dnf install ./epson-printer-utility-1.2.2-1.x86_64.rpm

    「パッケージ XXXXX は検証を行いません: ダイジェストなし」の エラーメッセージが表示されてRPMパッケージをインストールできなかった場合は 以下のコマンドを実行してRPMパッケージをインストールする。

    # rpm -i --nodigest ./epson-printer-utility-1.2.2-1.x86_64.rpm
  5. Epson Scan 2 のインストールと設定

    スキャナードライバーのインストール

    1. Epson Scan 2 のアーカイブを解凍する。
      $ tar xvfz epsonscan2-bundle-6.7.82.0.x86_64.rpm.tar.gz
    2. 解凍により作成されたディレクトリに移動し、以下のコマンドを実行する。
      # ./install.sh

      上記のコマンドを実行すると、以下のRPMパッケージがインストールされる。

      • core/core/epsonscan2-6.7.82.0-1.i686.rpm
      • plugins/epsonscan2-non-free-plugin-1.0.0.6-1.i686.rpm

      「パッケージ XXXXX は検証を行いません: ダイジェストなし」の エラーメッセージが表示されてRPMパッケージをインストールできなかった場合は 以下のコマンドを実行してRPMパッケージをインストールする。

      # rpm -i --nodigest core/epsonscan2-6.7.82.0-1.x86_64.rpm \
        plugins/epsonscan2-non-free-plugin-1.0.0.6-1.x86_64.rpm

    ネットワークスキャナーの追加

    1. ネットワークスキャナーの追加ダイアログを開く

      以下のいずれかの方法で、「ネットワークスキャナーの追加」ダイアログ ボックスを開く。

      • Epson Scan 2 を初回起動時は、「デバイスを選択して下さい」のダイアログが 表示されるので、ドロップダウンリストの「追加」を選択し、選択状態に なったら、もう一度クリックする
      • メインウィンドウ上部のスキャナーコンボボックスをクリックし、そこに 表示される「追加」ボタンをクリックする
    2. プリンターのIPアドレスの設定

      プリンター本体のメニューでプリンターに設定されたIPアドレスを確認し、 その値を「ネットワークスキャナーの追加」ダイアログの「アドレス」に 設定して「追加」ボタンをクリックする。


exfat (fc26) - mount SDXC card

64G SDXCカードをマウントできるようにするために必要なパッケージをインストール する。

前提条件

RPM Fusion Repositoryの手順に従ってRPM Fusionのリポジトリに アクセスできるようになっていること。

パッケージのインストール

以下のコマンドを実行して、exfatファイルシステムのマウントに必要なパッケージ をインストールする。

# dnf install exfat-utils fuse-exfat

Fedora Release Notes (fc43)

Release Notes for Fedora Linux 43

  • Hardware Overview
    • Minimum System Configuration
      • 2GHz dual core processor or faster
      • 2GB System Memory
      • 15GB unallocated drive space
  • Changes in Fedora 43 For System Administrators
    • Changes in the Anaconda installer =>
      • Fedora spins now use the new WebUI installer
      • No more support for installs on MBR-partitioned disks in UEFI mode on x86
      • Anaconda now uses DNF5
      • Modularity support removal
      • Default /boot partition is now 2G
    • Automatic updates by default on Fedora Kinoite =>
    • Stratis 3.8.5: stratisd 3.8.5 and stratis-cli 3.8.2 =>
    • Confidential Virtualization Host for Intel TDX =>
    • PostgreSQL 18 =>
    • Read-only BDB support in 389 Directory Server =>
    • Dovecot 2.4 =>
    • MySQL 8.4 as default =>
    • RPM 6.0 =>
    • initrd is now compressed by zstd by default =>
    • YASM is deprecated and has been replaced with NASM =>
    • Modular packaging for GnuPG2 =>
    • SSSD Identity Provider (IdP) support =>
参 考

Release Notes for Fedora Linux 42

  • Hardware Overview
    • Minimum System Configuration
      • 2GHz dual core processor or faster
      • 2GB System Memory
      • 15GB unallocated drive space
  • Changes in Fedora 42 For System Administrators
    • Changes in the Anaconda installer
      • Anaconda WebUI enabled by default on Workstation
      • Anaconda is now a native Wayland application
      • GPT is now used by default on all architectures
    • Unification of /usr/bin and /usr/sbin

      In Fedora 42, the /usr/sbin directory becomes a symlink to bin, which means paths like /usr/bin/foo and /usr/sbin/foo point to the same place.

    • Plymouth: Use simpledrm by default

      On Fedora 42, the boot-splash (plymouth) now defaults to using the EFI firmware framebuffer to show the boot-splash earlier during boot.

    • fips-mode-setup has been removed from Fedora

      The fips-mode-setup utility has been removed from Fedora. To operate a system in FIPS mode, you have one of the following options instead: =>

    • Systemd Sysusers.d integration

      The built-in rpm mechanism to create system users from sysusers.d metadata distributed by packages is now used to create system users, replacing the previous use of custom rpm scriptlets in individual packages.

    • ComposeFS enabled by default for Fedora Atomic Desktops

      On Fedora Atomic Desktop systems, the root mount of the system (/) is now mounted using composefs, which makes it a truly read only filesystem, increasing the system integrity and robustness.

    • Atomic Desktops no longer have a PPC64LE edition

      Starting with Fedora 42, Fedora Atomic Desktop is no longer available for the PPC64LE (64-bit Power Little Endian) architecture due to a lack of interest.

    • Retire Zezere Provisioning Server (IoT)

      Previous Fedora IoT releases used the Zezere privisioning server for initial configuration. However, this approach caused problems for some users, notably those using IPv6. Starting with Fedora 42, Zezere has been replaced with systemd-firstboot.

    • Fedora CoreOS updates moved from OSTree to OCI

      Fedora CoreOS now receives updates from link:https://quay.io/fedora/fedora-coreos instead of the Fedora OSTree repository.

    • Distributing Kickstart Files as OCI Artifacts
    • Fedora WSL Images

      Fedora now provides WSL (Windows Subsystem for Linux) images. They are available for download on the Getfedora cloud page.

    • Ansible 11

      In this Fedora release the ansible package has been upgraded to version 11. There are many changes.

    • General Intel SGX enablement

      Intel Software Guard Extensions (SGX) is a piece of technology that enables creation of execution enclaves. This Fedora update provides the SGX host software stack, architectural enclaves and development packages.

    • Managing expired PGP keys in DNF5

      Starting with this release, expired keys will be detected automatically before any DNF transaction and handled appropriately using a new libDNF5 plugin which is enabled by default.

    • Fedora supports Copy on Write functionality

      This update improves the way software packages are downloaded and installed on Fedora.

    • Stratis 3.8: stratisd 3.8.0 and stratis-cli 3.8.0

      Stratis 3.8.0, which consists of stratisd 3.8.0 and stratis-cli 3.8.0 includes two significant enhancements, as well as a number of minor improvements.

    • ZlibNG 2.2

      The zlib-ng data compression library in Fedora 42 has been updated to version 2.2, specifically 2.2.4. The updated version provides new optimizations, rewrites deflate memory allocation, and improves the buildsystems and tests.

    • Trafficserver 10.0

      Apache Traffic Server (trafficserver) in Fedora has been upgraded to version 10.x. The /etc/trafficserver/records.config file will be automatically updated to the new records.yaml format.

    • Bpfman added to Fedora

      Fedora 42 provides the bpfman package.

    • Firewalld IPv6_rpfilter now defaults to loose on Workstations

      Starting in Fedora 42, Fedora Workstation now defaults to to IPv6_rpfilter=loose to allow connectivity checks to function as intended.

    • cockpit-navigator replaced with cockpit-files

      Fedora 42 replaces the Cockpit Navigator plugin with Cockpit Files.

    • Confidential Virtualization Host with AMD SEV-SNP

      Fedora 42 enables virtualization hosts to launch confidential virtual machines using AMD’s SEV-SNP technology.

    • Optimized binaries for the x86_64 architecture

      Fedora now provides a mechanism for automatically loading binaries optimized for newer versions of the x86_64 architecture using glibc-hwcaps.

    • Retirement of PostgreSQL 15

      PostgreSQL version 15 will be retired from Fedora 42 since there are newer versions (16 and 17).

    • OpenDMARC split into multiple packages

      Starting with Fedora 42, the opendmarc package only contains core utilities, and additional tools can be installed separately if needed, potentially saving space for those who don’t need them.

    • Packages requiring the git binary now depend on the git-core package

      With this update, the git binary is now provided through the git-core package, which should reduce the amount of packages installed as transient dependency of the main package.

    • Live media now use the EROFS filesystem isntead of SquashFS

      Fedora Linux live environments now use the Enhanced Read-Only FileSystem (EROFS), a modern, feature-rich read-only filesystem.

    • pam_ssh_agent_auth removed from Fedora

      The pam_ssh_agent_auth package has been removed in Fedora 42 due to being outdated and rarely used.

参 考

Fedora Release Notes (fc41 summary)

  • Hardware Overview
    • Minimum System Configuration
      • 2GHz dual core processor or faster
      • 2GB System Memory
      • 15GB unallocated drive space
  • Changes in Fedora 41 For System Administrator
    • Self-encrypting drives support in the installer

      Starting with Fedora 41, the Anaconda installer has built-in support for self-encrypting hard drives - that is, native hardware encryption on TCG OPAL2 compliant drives.

    • DNF 5

      The default package manager in Fedora 41 is DNF 5.

    • RPM 4.20

      RPM in Fedora 41 has been updated to version 4.20, which provides a number of improvements.

    • DNF and bootc in Image Mode Fedora variants

      Starting with Fedora 41, the Fedora Atomic Desktops, Fedora CoreOS and Fedora IOT will ship bootc and DNF5 as part of the image. Now you can use dnf commands as part of container builds that use these Fedora variants as the base image.

    • SPDX Migration

      RPM packages use SPDX identifiers as a standard for licenses. 90 % of the packages have been migrated to SPDX identifiers. The remaining packages are estimated to be migrated to SPDX in Fedora 42.

    • Remove ifcfg support in NetworkManager

      NetworkManager removes support for connection profiles stored in ifcfg format. It is deprecated upstream and the native Keyfile format is valid and a better replacement. The following packages are being dropped. NetworkManager-initscripts-ifcfg-rh, NetworkManager-dispatcher-routing-rules and NetworkManager-initscripts-updown.

    • Running SSSD with reduced privileges

      To support general system hardening (running software with least privileges possible), the SSSD service is now configured to run under sssd or root user using the systemd service configuration files.

    • Removal of the sss_ssh_knownhostsproxy tool

      The sss_ssh_knownhostsproxy tool was deprecated in the previous release and has now been removed. It is replaced by the sss_ssh_knownhosts tool.

    • Consistent device naming in Fedora Cloud

      With this update, net.ifnames=0 has been removed from the Fedora Cloud kickstart file to ensure consistency in the network device naming and to align with the other Fedora editions.

    • Remove network-scripts

      With this update, the long-deprecated package network-scripts will be removed. The package provided the legacy utilities ifup and ifdown, as well as the network.service.

    • Access to all versions of Kubernetes and its related components

      Starting with Fedora 41, all supported versions of Kubernetes, CRI-O and CRI-Tools will be available concurrently.

    • TuneD is the default power profile management modules/release-notes/pages

      TuneD replaced power-profiles-daemon as a default power profile management daemon for the following Fedora workstation spins:

      • KDE Plasma
      • GNOME
    • Netavark uses nftables by default

      Netavark is a container networking tool used by Podman. Netavark manages interfaces and firewall rules and with this Fedora update, it will use nftables by default to create firewall rules for containers.

    • Unprivileged updates for Fedora Atomic Desktops =>

      On Atomic Desktops, the policy controlling access to the rpm-ostree daemon has been updated.

    • ComposeFS enabled by default for Fedora CoreOS and IoT editions

      On Fedora CoreOS and Fedora IoT systems, the root mount of the system (/) is now mounted using composefs, which makes it a truly read only filesystem, increasing the system integrity and robustness.

    • Enable bootupd on Fedora Silverblue and Kinoite editions

      On Atomic Desktops, the bootloader is now automatically updated using bootupd. New systems are now installed with a static GRUB configuration which relies only on the Boot Loader Specification configuration files and is not regenerated for each update.

    • Multiple versioned Kubernetes packages

      The upstream Kubernetes project maintains 3 concurrent versions with a new release every 4 months. Starting with Fedora 41, all currently supported Kubernetes versions are provided, using separate packages named after each major version.

    • dm-vdo and vdo-8.3

      Fedora 41 is the first Fedora release that provides the dm-vdo (virtual data optimizer) device mapper target, along with the vdo user tools package.

    • Stratis 3.7: stratisd 3.7.3 and stratis-cli 3.7.0

      This update includes releases of stratisd 3.7.3 and stratis-cli 3.7.0. It includes one significant enhancement, several minor enhancements, and a number of small improvements.

    • Fedora repoquery tool

      Fedora 41 provides a new tool for querying repositories, fedora-repoquery, a small commandline tool for doing repoqueries of Fedora, EPEL, eln, and Centos Stream package repositories.

    • OpenSSL now distrusts SHA-1 signatures by default

      OpenSSL in Fedora 41 no longer trusts SHA-1 signatures by default and blocks their creation as well.

    • Reproducible Package Builds

      Fedora package builds are now more deterministic, bringing the distribution closer to the goal of achieving fully reproducible builds for all of its packages.

    • Libvirt Virtual Network NFTables

      The libvirt virtual network has been changed to prefer use of the nftables firewall backend instead of iptables.

    • Redis has been replaced with Valkey

      Redis has been replaced with Valkey in Fedora 41 due to Redis' license change to RASLv2/SSPL which rendered it incompatible with Free and Open Source principles.

    • OpenSSL engine support deprecated

      Support for OpenSSL engines is deprecated in Fedora 41.

参 考

Fedora Release Notes (fc40 summary)

  • Hardware Overview
    • Minimum System Configuration
      • 2GHz dual core processor or faster
      • 2GB System Memory
      • 15GB unallocated drive space
    • Recommended System Configuration
      • 2GHz quad core processor
      • 4GB System Memory
      • 20GB unallocated drive space
  • Changes in Fedora 40 For System Administrators
    • Installer changes
    • Fedora IoT Bootable Container

      There is now a bootable image available for Fedora IoT edition.

    • Switch pam_userdb from BerkeleyDB to GDBM

      pam_userdb was built with support for BerkeleyDB, but this project is no longer maintained as open source, so it has been replaced by GDBM in Fedora 40.

    • Support for the enumeration feature has been removed for AD and IPA backends

      The enumeration feature provides the ability to list all users or groups using getent passwd or getent group' without arguments. Support for the `enumeration feature has been removed for AD and FreeIPA providers.

    • sss_ssh_knownhostsproxy tool will be replaced in future releases

      sss_ssh_knownhostsproxy tool has been deprecated and will be replaced by a new, more efficient tool.

    • Removing SSSD files provider

      Previously deprecated SSSD "files provider" feature that allows handling of local users has been removed in Fedora 40.

    • Authselect minimal profile replaced by local

      The minimal profile for Authselect is now replaced by local.

    • bogofilter to use SQLite

      Bogofilter (bogofilter package) is a fast anti-spam filtering mechanism that uses Bayesian statistical analysis to classify emails as either spam or non-spam.

      With this release, Bogofilter switched its database engine from Berkeley DB to SQLite, because Fedora deprecated the libdb package.

    • Podman 5

      The podman container engine has been upgraded to version 5, which provides multiple bug fixes and enhancements.

    • ROCm 6

      The ROCm stack for graphics processing unit (GPU) computation has been updated to version 6, which provides multiple bug fixes and enhancements.

    • Stratis 3.6

      This upgrade includes new releases of stratisd 3.6.7 and stratis-cli 3.6.0. These releases include a number of improvements, bug fixes, and housekeeping changes.

    • Drop delta RPMs

      Delta RPM (DRPM) is a feature, which reduces the time and data required to update packages by downloading only the differences (deltas) between the old and the new version of an RPM package.

      With this Fedora release, DRPMs will no longer be generated during the compose process.

    • Stop downloading filelists by default

      Filelists are XML files that provide important metadata and information that facilitate RPM package installation, management, and maintenance.

      With this Fedora release, the DNF behavior changed in a sense that the filelists will no longer be downloaded by default.

    • wget2 as wget

      The wget command in Fedora 40 uses Wget2.

    • Enable IPv4 address conflict detection by default in NetworkManager

      RFC 5527 is now enabled by default with an interval of 200 ms.

    • Assign individual, stable MAC addresses for Wi-Fi connections

      Fedora 40 adopts stable-ssid as the default mode for assigning individual, stable MAC addresses to Wi-Fi connections in NetworkManager, enhancing user privacy without compromising network stability.

      + PostgreSQL 16

      Fedora 40 provides version 16 of PostgreSQL.

    • SPDX Migration

      RPM packages use SPDX identifiers for licenses as a standard. 63 % of the packages and almost all packeges from ELN set have been migrated to SPDX identifiers.

参 考

Fedora Release Notes (fc39 summary)

  • Hardware Overview
    • Minimum System Configuration
      • 2GHz dual core processor or faster
      • 2GB System Memory
      • 15GB unallocated drive space
    • Recommended System Configuration
      • 2GHz quad core processor
      • 4GB System Memory
      • 20GB unallocated drive space
  • Distribution-wide Changes
    • lazarus repackaging =>

      Lazarus is an Integrated Development Environment (IDE) for developing software in the Pascal programming language.

      The lazarus package, which provides this IDE, is now being split into several sub-packages as follows:

      • lazarus-doc
      • lazarus-ide
      • lazarus-lcl
      • lazarus-lcl-nogui
      • lazarus-lcl-gtk2
      • lazarus-lcl-gtk3
      • lazarus-lcl-qt
      • lazarus-lcl-qt5
      • lazarus-tools
    • SPDX Migration =>

      RPM packages use SPDX identifiers for licenses as a standard. About half of the packages have been migrated to SPDX identifiers. The remaining packages are estimated to be migrated to SPDX in Fedora 40 and 41.

    • Colored prompt for Bash shell =>

      Previously, the default prompt was monochrome, which made it difficult to distinguish individual prompts from commands in the long output. To address this problem, this update introduces a simple colored shell prompt that users can further visually customize.

参 考

Fedora Release Notes (fc38 summary)

  • Hardware Overview
    • Minimum System Configuration
      • 2GHz dual core processor or faster
      • 2GB System Memory
      • 15GB unallocated drive space
    • Recommended System Configuration
      • 2GHz quad core processor
      • 4GB System Memory
      • 20GB unallocated drive space
  • Distribution-wide Changes
    • PCRE deprecation =>

      The Perl-Compatible Regular Expressions (PCRE) library in Fedora has been deprecated due to lack of upstream support, and replaced with PCRE2, which is being actively maintained upstream.

Fedora Release Notes (fc37 summary)

  • Hardware Overview
    • Minimum System Configuration
      • 2GHz dual core processor or faster
      • 2GB System Memory
      • 15GB unallocated drive space
    • Recommended System Configuration
      • 2GHz quad core processor
      • 4GB System Memory
      • 20GB unallocated drive space
  • Distribution-wide Changes
    • Official support for Raspberry Pi 4 =>

      This Fedora update brings support for Raspberry Pi 4, including 4B, the 400 unit, and the Compute Module (CM) 4 IO Board.

    • ARMv7 architecture is no longer supported =>

      Fedora 37 drops support for older ARM devices using the ARMv7 (also known as arm32 or armhfp) architecture.

    • Fedora Server Edition available as KVM virtual machine disk image =>

      Fedora Server provides now a virtual disk image to greatly facilitate installation of Fedora Server VMs.

    • ELN Extras =>

      The ELN project will now run "ELN-Extras", a new build target and compose similar to ELN in behavior, but closer in function to EPEL.

    • Pantheon Desktop Environment has been removed from Fedorav =>
    • boot.iso now uses GRUB2 on BIOS systems =>
    • Python3 packages are now built with -P =>
    • Fedora Cloud Base is now a Fedora Edition =>

      Fedora Cloud Base has been promoted to official status as a Fedora Edition.

    • Fedora CoreOS is now a Fedora Edition =>

      Fedora CoreOS has been promoted to official status as a Fedora Edition.

参 考

Fedora Release Notes (fc36 summary)

  • Hardware Overview
    • Minimum System Configuration
      • 2GHz dual core processor or faster
      • 2GB System Memory
      • 15GB unallocated drive space
    • Recommended System Configuration
      • 2GHz quad core processor
      • 4GB System Memory
      • 20GB unallocated drive space
  • Distribution-wide Changes
    • Ansible 5 =>

      Ansible is updated to Ansible 5. Playbooks may behave differently. Users are encouraged to read the upstream Porting Guide for further information.

      Additionally, Ansible is now shipped as multiple packages: ansible-core (the engine) and a curated set of Ansible collections (ansible-collection-*).

    • Install only newly-recommended packages on upgrades =>

      Fedora Linux 36 changes the default behavior of DNF, PackageKit, and microdnf to install only newly-recommended packages on upgrades. When you don’t have the recommended package installed, it won’t be automatically installed with future upgrades of the recommending package. The default value for exclude_from_weak_autodetect configuration can be overridden in /etc/dnf/dnf.conf.

    • plocate as the default locate implementation =>

      plocate is now used as the default provider of /usr/bin/locate instead of mlocate. This change should mostly be invisible.

    • The RPM database has been moved from /var to /usr =>

      The RPM database has been moved from its previous location in /var/lib/rpm to a new location in /usr/lib/sysimage/rpm. The previous location is now a symlink to the new one.

    • nscd has been removed =>

      The ncsd subpackage of glibc, which previously provided the nscd cache for named services, has been removed in Fedora 36, after already being deprecated in Fedora 34. All of its functionality is now handled by systemd-resolved for the hosts database, and by the sssd daemon for everything else.

    • Wireless extensions removed =>

      The legacy kernel Wireless Extensions interface, which was replaced by the mac80211/cfg80211 interface in 2007, is removed. This includes retiring the wireless-tools userspace utilities.

参 考

Fedora Release Notes (fc35 summary)

  • Hardware Overview
    • Minimum System Configuration
      • 2GHz dual core processor or faster
      • 2GB System Memory
      • 15GB unallocated drive space
    • Recommended System Configuration
      • 2GHz quad core processor
      • 4GB System Memory
      • 20GB unallocated drive space
  • Distribution-wide Changes
    • RPM 4.17 =>
    • Update firewalld to v1.0.0 =>
    参 考

Fedora Release Notes (fc34 summary)

  • Hardware Overview
    • Minimum System Configuration
      • 2GHz dual core processor or faster
      • 2GB System Memory
      • 15GB unallocated drive space
    • Recommended System Configuration
      • 2GHz dual core processor
      • 4GB System Memory
      • 20GB unallocated drive space
  • Distribution-wide Changes
    • Scale ZRAM to Full Memory Size =>

      In Fedora, a swap partition is not created by default at installation time. Instead, a zram device is created, and swap enabled on it during start-up. zram is a type of RAM drive that uses compression.

    • New package: fbrnch =>

      A new fbrnch (Fed Brunch) package provides a utility which helps simplify or semi-automate workflow processes for Fedora Packagers.

    • ARMv7 to use UEFI as default for all armhfp generated images =>
    • Main is a new name for default git repository branches =>
    • Compress kernel firmware to reduce size on disk =>
    • Unify the location of GRUB configuration files across all supported CPU architectures =>
    • systemd-oomd prevents out-of-memory situations =>
参 考

Fedora Release Notes (fc33 summary)

  • Hardware Overview
    • Minimum System Configuration
      • 1GHz or faster processor
      • 2GB System Memory
      • 10GB unallocated drive space
    • Recommended System Configuration
      • 2GHz dual core processor
      • 4GB System Memory
      • 20GB unallocated drive space
  • Distribution-wide Changes
    • Fedora Workstation now uses Btrfs by default =>
    • Fedora Workstation edition contains thermald by default =>
    • FlexiBLAS enables runtime switching of BLAS/LAPACK backend =>
    • nano is a default terminal text editor =>
    • Fedora Internet of Things (IoT) is now an official Fedora Edition =>
    • Increase usage of %make_build and %make_install =>
    • Fedora workstation livecd does not contain device-mapper-multipath =>
    • .NET Core now available with 64-bit ARM systems =>
    • The earlyoom service is now enabled by default in Fedora KDE =>
    • dmraid-activation.service no longer depends on systemd-udev-settle.service =>
    • Swap on zRAM =>
参 考

Fedora Release Notes (fc32 summary)

  • Hardware Overview
    • Minimum System Configuration
      • 1GHz or faster processor
      • 1GB System Memory
      • 10GB unallocated drive space
    • Recommended System Configuration
      • 2GHz dual core processor
      • 4GB System Memory
      • 20GB unallocated drive space
  • Distribution-wide Changes
    • Improved usage data gathering through DNF =>
    • Physical optical media does not require pre-GA testing =>
    • Packaging changes in clang-libs package =>
    • Added support for AArch64 and ppc64le packages with extended availability of FPC-dependent packages =>
    • Adopting sysusers.d format =>
    • Limited scriptlet usage of core packages =>
    • Faster recovery from low-memory situations in Fedora Workstation =>
参 考

Fedora Release Notes (fc31 summary)

  • Hardware Overview
    • Minimum System Configuration
      • 1GHz or faster processor
      • 1GB System Memory
      • 10GB unallocated drive space
    • Recommended System Configuration
      • 2GHz dual core processor
      • 4GB System Memory
      • 20GB unallocated drive space
  • Distribution-wide Changes
    • Deprecated packages in 389 Console have been removed =>
    • RPM version 4.15 =>
    • RPM now uses zstd compression =>
    • Dynamic BuildRequires =>
    • YUM 3 was removed =>
    • EFI build of GRUB2 now contains several security-oriented modules =>
    • No more i686 repositories =>
    • Xfce installation image for 64-bit ARM =>
    • You can now install minimal language support =>
    • Many Python 2 packages have been removed =>
参 考

Fedora upgrade to 43 (fc43)

Performing system upgrade

Fedora 42から43へアップグレードする手順は以下の通り

  1. 現行バージョンのアップデート
    # dnf upgrade --refresh
  2. dnf-plugin-system-upgradeパッケージのインストール
    # dnf install dnf-plugin-system-upgrade
  3. release 43 のパッケージをダウンロード
    # dnf system-upgrade download --refresh --releasever=43

    上記のコマンドを実行すると、途中で以下の確認メッセージが表示されるので、 「y」を入力して処理を続ける。

    • Before you continue ensure that your system is fully upgraded by running "dnf --refresh upgrade". Do you want to continue [y/N]:
    • DNF は、パッケージのみをダウンロード、gpg 鍵をインストール、および トランザクションを確認します。これでいいですか? [y/N]:
    • (gpgキーインストールの確認)
      これでいいですか? [y/N]:
    コマンド実行に失敗した場合の対処
    • インストールできないパッケージを削除する

      --allowerasing オプションを指定して dnf system-upgrade download コマンドを実行する。--best --allowerasing オプションを付けると 詳細を確認することができる。

    • wineパッケージの競合が発生する場合

      wineパッケージがインストールされている場合は、Fedora 43 にアップグレード しようとすると、「file /usr/lib64/wine/i386-windows from install of wine-core-10.15-1.fc43.x86_64 conflicts with file from package wine-core-10.15-1.fc42.x86_64」等のメッセージが表示され、 「dnf system-upgrade download」コマンドの実行が失敗する。この場合は、 wine-core パッケージを削除してから「dnf system-upgrade download」 コマンドを実行すること。

  4. アップグレードの実行
    # dnf5 offline reboot
出 典

Optional post-upgrade tasks

rpmconf

rpmconf は、パッケージの設定ファイルを変更した場合に、パッケージの アップグレードにより作成される .rpmnew ファイル(アップグレードされたファイル のバックアップ)、.rpmsave ファイル(変更したファイルのバックアップ)を検索する コマンドである。

  1. パッケージのインストール
    # dnf install rpmconf
  2. .rpmnew、.rpmsave ファイルの表示
    # rpmconf -a

    .rpmnew、.rpmsave ファイルが存在する設定ファイルのそれぞれについて、現在の 設定ファイルをそのまま使用するか、.rpmnew または .rpmsave を使用するかを オプション選択画面で対話的に選択する。選択可能なオプションは以下のとおり。

    • Y: .rpmnew を適用する
    • N: 現在使用している設定ファイルを使用して、.rpmnew ファイルを削除する
    • D: 現在使用している設定ファイルと .rpmnew ファイルの差異を表示して、 オプション選択画面を再表示する。
    • M: 現在使用しているファイルと .rpmnew ファイルをマージする。
    • Z: background this process to examine the situation
    • S: 何もせずに次のファイルの処理を続ける
remove-retired-packages

remove-retired-packages は、廃止されたパッケージ(ディストリビューションの リポジトリから削除されたパッケージ)を削除するためのコマンドである。

  1. パッケージのインストール
    # dnf install remove-retired-packages
  2. 廃止されたパッケージの削除
    # remove-retired-packages

    廃止されたパッケージごとに削除するかどうかを対話的に選択する。

古いパッケージの削除
  • dupulicate packages

    複数のバージョンがインストールされているパッケージは、以下のコマンドを実行 して確認できる。

    # dnf repoquery --duplicates

    複数バージョンのインストールを解消するためには、上記で表示されたパッケージ から不要なものをバージョン指定で削除するか、以下のコマンドを実行する。

    # dnf distro-sync
  • ディストリビューションのリポジトリに存在しないパッケージ
    1. リポジトリに存在しないパッケージの確認

      Fedoraのバージョンアップに伴いディストリビューションのリポジトリから 存在しなくなったパッケージは、以下のコマンドを実行して確認できる。

      # dnf list --extras

      このコマンドにより、以下のパッケージが表示される。

      • バージョンのアップグレードにより廃止されたパッケージ
      • rpm ファイルを直接指定してインストールされたパッケージ
    2. リポジトリに存在しないパッケージの削除

      以下のコマンドを実行すると、カーネル関連のパッケージを除くリポジトリに 存在しないパッケージを削除することができる。

      # dnf remove $(dnf repoquery --extras --exclude=kernel,kernel-\*,kmod-\*)
    3. 未使用のパッケージの削除

      直接インストールしたRPMパッケージを残した上で、未使用のパッケージ、つまり インストールしたどのパッケージからも依存関係にないパッケージを削除する ためには、以下のコマンドを実行する。

      # dnf autoremove
RPM パッケージの署名に使用されないキーの削除
  1. パッケージのインストール
    # dnf install clean-rpm-gpg-pubkey
  2. RPM パッケージの署名に使用されないキーの削除
    # clean-rpm-gpg-pubkey
壊れたシンボリックリンクの確認と削除
  1. パッケージのインストール
    # dnf install symlinks
  2. 壊れたシンボリックリンクの一覧表示

    指定したディレクトリ(以下の例は /usr ディレクトリ)を再帰的に調べて リンク先のファイル/ディレクトリが存在しないシンボリックリンクの一覧を 以下のコマンドにより確認する。

    # symlinks -r /usr | grep dangling
  3. 壊れたシンボリックリンクの削除

    指定したディレクトリ(以下の例は /usr ディレクトリ)を再帰的に調べて壊れた シンボリックリンクを削除するには以下のコマンドを実行する。

    # symlinks -r -d /usr
レスキュー・カーネルの更新
  • レスキュー・カーネルの再作成

    以下のコマンドを実行して、レスキュー・カーネルのイメージ(initramfs)を 再作成する。

    # rm /boot/*rescue*
    # kernel-install add "$(uname -r)" "/lib/modules/$(uname -r)/vmlinuz"
  • レスキュー・カーネル再作成の自動化

    以下のコマンドを実行して,dracut-config-rescue パッケージをインストール することにより、dracut が initrd を作成する際にレスキュー・カーネルも 自動的に再作成される。

    # dnf install dracut-config-rescue
出 典

Resolving post-upgrade issues

RPM データベースの再作成

rpm または dnf コマンドの使用中に渓谷が発生した場合は、RPM データベースが 壊れている可能性がある。RPM データベースを再作成するためには、 /usr/lib/sysimage/rpm ディレクトリをバックアップした後に以下のコマンドを実行 する。

#  rpm --rebuilddb
RPM パッケージの依存関係の問題解消

system-upgrade dnf プラグインは、内部で「dnf distro-sync」コマンドを実行して いる。RPM パッケージの依存関係に問題が発生した場合は、「dnf distro-sync」 コマンドを実行することでインストールされたパッケージのバージョンを現在の Fedora のバージョンに合わせて、パッケージの依存関係の問題の解消を試すことが できる。

出 典

Fedora Server Core Installation (fc40)

最小構成のGUI Server (LXDE Desktop)をインストールする手順を示す。

ISOイメージからのインストール

  • インストール時に使用する言語: 日本語(日本)
  • インストール先

    既定値(自動パーティション)のままインストールすると、ファイルシステムは xfs となるが、xfs はファイルサイズの縮小ができない。仮想ディスクの容量増減に 伴い、ファイルシステムのサイズも縮小させる場合は、以下の手順を実行する。

    1. 「インストール先」のボタンを選択してインストール先の設定画面を開く。
    2. 「ストレージの設定」のラジオボタンで「カスタム」を選択する。
    3. 「完了」ボタンを押すと、「手動パーティション設定」の画面に切り替わる ので、パーティションを設定する(「ここをクリックすると自動的に作成します」 を選択して自動作成しても良い)。
    4. 自動作成した場合は、「/」(ルート)のファイルシステムが「xfs」に設定 されるので、ext2〜ext4 のどれかを選択する。
  • ソフトウェアの選択
    • ベース環境: Fedora custom Operating System
    • 選択した環境のアドオン
      • 標準

再起動後の設定

  1. パッケージを更新する
    # dnf upgrade -y
  2. GUI最小構成、日本語対応のパッケージをインストールする
    • デスクトップ環境(具体的なパッケージは下記「補足」を参照)
    • im-chooser
    • ibus-anthy
    • japanese-support グループ(fc29)相当のパッケージ
      • google-noto-sans-cjk-ttc-fonts
      • google-noto-serif-cjk-ttc-fonts
    補 足

    デスクトップ環境を構成するためにインストールするパッケージについて説明 する。

    1. ローカルでGUIを使用する場合

      以下に説明するパッケージの構成では、xrdp 等を使用してリモートデスク トップとしての使用は可能であるが、ローカルでGUIを使用することは できない。ローカルでGUIを使用する場合は、 base-x グループもインストール 対象に加えること。

    2. Desktop Environment のグループを指定する場合

      以下のグループ IDを指定する。

      GUI環境 グループ ID
      LXDE lxde-desktop
      MATE mate-desktop
      Xfce xfce-desktop
      Cinnamon cinnamon-desktop
      Gnome gnome-desktop
      KDE kde-desktop
    3. 最小構成のパッケージを指定する場合

      Desktop Enviroment のグループの代わりに以下のパッケージを指定する。

      GUI環境 GUI最小構成パッケージ
      LXDE lxde-common lxpanel lxsession lxpolkit lxappearance lxrandr lxterminal lxdm pcmanfm
      MATE mate-panel mate-session-manager mate-terminal marco caja
      Xfce xfce4-panel xfce4-session xfce4-settings xfdesktop xfwm4 xfce4-terminal Thunar
      Gnome gnome-classic-session gnome-terminal gnome-terminal-nautilus
      その他 最小構成パッケージは不明
    4. 最小構成に追加すると良いパッケージ
      GUI環境 network manager themes screen saver notification daemon
      LXDE Gnome network-manager-applet 
      @networkmanager-submodules
      adwaita-gtk2-theme 
      adwaita-icon-theme
      xscreensaver-base notification-daemon
      MATE network-manager-applet 
      @networkmanager-submodules
      mate-icon-theme 
      mate-themes
      mate-screensaver mate-notification-daemon
      Xfce network-manager-applet 
      @networkmanager-submodules
      adwaita-gtk2-theme 
      adwaita-icon-theme
      xfce4-screensaver xfce4-notifyd
  3. GUI起動 (Run Level 5) への変更
    # systemctl set-default graphical.target

    なお、GUI起動に変更しない場合(コンソール起動のまま)でも、Remote Desktopで 接続すればGUI表示することができる。

    参 考

    コンソール起動 (Run Level 3) に戻す場合は、以下のコマンドを実行する。

    # systemctl set-default multi-user.target
  4. 入れておくと便利なパッケージ
    • bash-completion
  5. その他の設定
参 考
  • メモリ使用量の比較

    最小構成のパッケージと、network manager、themes、screen saver、 notification daemon をインストールした状態でシステムを起動し、 Remote Desktopで接続た状態でのメモリ使用量の計測結果は以下のとおりで ある。

    GUI環境 MiB
    (なし) 153.3
    LXDE 371.6
    MATE 421.7
    Xfce 395.8
    Gnome 529.2

FileZilla (fc27) - FTP, SFTP, Storj GUI client

FileZillaは、FTP(over SSL/TLSを含む)、SFTP、Storjプロトコルでファイルを 転送するためのGUIクライアントである。

パッケージのインストール

# dnf install filezilla

利用方法

  • 「ファイル」メニューから「サイト マネージャー」を選択して、サイト マネージャーを開き、接続するサイトを登録してから登録したサイトに接続する。
  • クイック接続のバーで以下の項目を入力してから「クイック接続」ボタンを押す。
    • ホスト - ftp://ホスト名、sftp://ホスト名、ftps://ホスト名、 fptes://ホスト名の何れかの形式で接続先のホストを入力する
    • ユーザー名、パスワード - ホスト接続時に認証が要求される場合に、その ユーザー名とパスワードを入力する
    • ポート - デフォルトのポート以外のポート番号で接続する場合に、そのポート 番号を入力する

Firejail (fc41) - Linux namespaces sandbox program

パッケージのインストール

# dnf install firejail

サンドボックス内でのプログラムの実行

$ firejail <command> <command-options>

参考文献


firewall-cmd (fc30)

firewall-cmd は、firewalld (Dinamic Firewall Manager daemon)に対して 設定の実行/確認をするためのコマンドである。

firewalld 概略

firewall-cmd は、iptables と同様に、Linux カーネルの netfilter の設定をする ためのコマンドである。netfilter、firewalld に関する用語は以下のとおり。

  • 組み込みテーブル (table)

    パケットのフィルタリング規則のことで、netfilter には、以下の3つが組み 込まれている。

    • filter - デフォルトの規則
    • nat - 新規に接続するパケットや、NAT に適用する規則
    • mangle - パケット変更の特定の用途に使用する規則
  • チェーン (chain)

    チェーンは netfilter によって実行されるアクションのことで、filter テーブル の場合は、以下のアクションがある。

    • INPUT - 受信したパケットに適用するアクション
    • OUTPUT - 送信するパケットに適用するアクション
    • FORWARD - 受信したパケットを別のネットワーク・インターフェースに送信する 場合に適用するアクション
  • ゾーン (zone)

    firewalld の機能。ネットワーク・インターフェース、または CIDR (ネットワーク範囲)に割り当てられたもので、firewalld の設定の単位となるもの である。ゾーンに複数のネットワーク・インターフェースを割り当てることが可能 だが、ネットワーク・インターフェースは1つのゾーンのみ割り当て可能である。

    firewalld では、drop、block、public、external、dmz、work、home、internal、 trusted のゾーンが事前に定義されている。

iptables は netfilter 組込テーブル、チェーンの機能を一通り設定することが 可能であるが、firewall-cmd は、filter テーブルの INPUT チェーンに対する設定 に特化した形となっている。ただし iptables と同等の設定を行いたい場合(OUTPUT、 FORWARDチェーンの設定をしたいなど)は、direct オプションを使用することで設定 することが可能である。

参考文献

主なオプション

  • --permanent

    永続的な設定(システム起動時に適用される設定)をする。このオプションを 指定した場合は現在の設定には反映されない。現在の設定に反映したい場合は、 --reloadオプションを設定する。

  • --zone=zone-name

    設定の対象となるゾーンの名前を指定する。省略するとデフォルトゾーンが対象と なる。

設定の確認

# firewall-cmd [--permanent] [--zone=<zone-name>] --list-all

受信の許可

# firewall-cmd [--permanent] [--zone=<zone-name>] \
  [--add-source=<ipaddress>/<mask>] \
  [--add-service=<service-name>] \
  [--add-port=<port-no>[-<port-no>]/{tcp|udp}] \
  [--add-protocol=<protocol-name>] \
  [--add-source-port=<port-no>[-<port-no>]/{tcp|udp}
  • サービス名を確認する場合は「firewall-cmd --get-services」コマンドを実行 する。
  • プロトコル名を確認する場合は、/etc/protocols の内容を見る。

rich languageを使用したルール設定

送信元アドレス/ポート番号、ポートや、要素(サービス、ポート番号、プロトコル)と 一致した接続に対して、送信先(IPアドレス、ネットワークアドレス)への送信を 許可/拒否/破棄/マークするための設定を行う。

# firewall-cmd [--permanent] [--zone=<zone-name>] \
  --add-rich-rule='rule [family="{ipv4|ipv6}"] \
  [source [NOT] address="<ipaddress>[/<mask>]"] \
  [source-port port="<port-no>[-<port-no>]" protocol="{tcp|udp}"] \
  [service name="<service-name>"] \
  [port port="<port-no>[-<port-no>]" protocol="{tcp|udp}"] \
  [protocol value="<protocol-name>"] \
  [destination [NOT] address="<ipaddress>/[<mask>]"] \
  {accept|reject|drop|mark}'
  • Action (ルールの最後の記述)は、source及び要素(service、port、protocol、 source-port)と一致する接続に対して適用される。
  • 要素として、service、port、protocolの何れか1つを指定できる。

SSH(TCPポート番号22)の転送を 192.168.0.0/16 から送信されたものに限り、 192.168.123.0/24 に限って許可する場合、以下の rich rule を設定する。

# firewall-cmd --permanent \
  --add-rich-rule='rule family="ipv4" source address="192.168.0.0/16" \
  port port="22" protocol="tcp" destination address="192.168.123.0/24" accept'
# firewall-cmd --reload
参考文献

direct オプションを使用したルール設定

  1. 送信パケットの制限
    # firewall-cmd --permanent --direct \
      --add-rule {ipv4|ipv6} filter {INPUT|OUTPUT|FORWARD} <優先度> \
      [-p {tcp|udp} [--sport <ポート番号>[:<ポート番号>]] [--dport <ポート番号>[:<ポート番号>]] \
      [[!] -s <送信元アドレス>[/<マスク>][,...] \
      [[!] -d <送信先アドレス>[/<マスク>]][,...] \
      [[!] -i [<interface>]] [[!] -o [<interface>]] 
      -j {ACCEPT | DROP | REJECT}
    • 優先度

      数値を指定する。指定された優先度の順番にルールを実行する。 「-j {ACCEPT|DROP|REJECT}」を指定すると、最初にマッチしたルールが適用 されるとそこでルールの評価が終了するので、優先度の小さいルールが優先される ことになる。

    • -p オプション

      プロトコル(tcp/udp)と送信元のポート番号(--sportオプション)、送信先のポート 番号(--dportオプション)を指定する。「ポート番号:ポート番号」を指定すると ポート番号範囲の指定となる。

    • -s オプション、-d オプション

      送信元/送信先ののアドレスまたはネットワークアドレスを指定する。<マスク>は 上位ビットすうか、「xxx.xxx.xxx.xxx」のどちらかの形式で指定する。コンマで 区切って複数のアドレスまたはネットワークアドレスを指定可能である。また、 オプションの前に「!」を指定すると、指定されたアドレスまたはネットワーク アドレスと一致しないものが対象となる。

    • -i オプション、-o オプション

      パケットの受信/パケットの送信先のネットワーク・インターフェースを指定 する。このオプションを省略すると、すべてのネットワーク・インターフェース が対象となる。-i は INPUT、FORWARDチェーンの場合に指定可能、-o は OUTPUT、 FORWARDチェーンの場合に指定可能である。

    • -j オプション

      -p、-s、-d オプションで指定した内容にマッチするパケットの扱いを指定する。 ACCEPTはパケットを通過する。DROPはパケットを破棄する(送信元は拒否されたのか どうか分からない)。REJECTはパケットを拒否する(送信元にパケットの拒否を通知 する)。

    TCP ポート22番(ssh)で外部に接続する場合は、接続先が 192.168.123.0/24 の 場合に限って許可する場合の設定は以下のとおり。

    # firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 10 \
      -d 192.168.123.0/24 -p tcp --dport 22 -j ACCEPT
    # firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 20 \
      ! -d 192.168.123.0/24 -p tcp --dport 22 -j DROP
    # firewall-cmd --reload
  2. NAT変換
    • interface-name で指定したネットワーク・インターフェースから送信される パケットの送信元アドレスを指定されたネットワーク・インターフェースの アドレスに変換する
      # firewall-cmd --permanent --direct \
        --add-rule {ipv4|ipv6} nat POSTROUTING -o <interface-name> -j MASQUERADE
    • interface-name で指定したネットワーク・インターフェースから送信される パケットの送信元アドレスを ipaddress で指定されたアドレスに変換する
      # firewall-cmd --permanent --direct --add-rule {ipv4|ipv6} \
        nat POSTROUTING -o <interface-name> -j SNAT --to-source <ipaddress>
参考文献

その他の操作

  • ネットワーク・インターフェースの zone への割当て
    # firewall-cmd --permanent [--zone=<zone-name>] --change-interface=<interface-name> 

    このコマンドを実行すると、interface-name が既に割り当てられている zone から割り当てを解除して、指定された zone に割当てられる。--zone オプションを 省略すると、デフォルトゾーンを指定した事になる。

  • 破棄されたパケットのログ出力設定
    # firewall-cmd --set-log-denied={all|unicast|broadcast|multicast|off}

    既定値は「off」となっている。このコマンドの設定結果は永続的である。


flac (fc26) - Free Lossless Audio Codec

パッケージのインストール

# dnf install flac

flac形式へ変換

以下のコマンドを実行すると、wavファイルをflac形式に変換した結果をそれぞれ input-file1.flac、input-file2.flac に保存する。

$ flac <input-file1>.wav <input-file2>.wav ...

変換元のファイルは、*.wav の他に*.rf64、*.aiff、*.raw、*.oga を指定することが できる。

変換結果のファイル名のprefixを指定

  1. 「--output-prefix=<prefix>」を指定して、入力ファイルの名前の前に <prefix>を付けて変換結果のflacファイルを保存する。
    $ flac --output-prefix=<prefix> <input-file1>.wav <input-file2>.wav ...

    このコマンドを実行すると、<prefix><input-file1>.flac、 <prefix><input-file2>.flac が生成される。

  2. 「--output-prefix=<dir-path>/」(ディレクトリパスの最後に「/」を 付ける)を指定して、変換結果のファイルを<dir-path>に配置する。
    $ flac --output-prefix=<dir-path>/ <input-file1>.wav <input-file2>.wav ...

    このコマンドを実行すると、<dir-path>ディレクトリの下に、 <input-file1>.flac、<input-file2>.flacが配置される。

ファイル名とフォルダ名からタグを自動付与

find . -type f -iname '*.wav' | sed -e 's/^\.\///g' -e 's/ /\\ /g' |
while read file # eg stuff/artist/album/title.wav
do      filepath="$PWD/${file#./}" # make absolute to get more info
        album=${filepath%/*}    # stuff/artist/album
        artist=${album%/*}  # stuff/artist
        album=${album##*/}  # album
        artist=${artist##*/} # artist
        title=${filepath##*/}   # title.wav
        title=${title%.*} # title
        flac \
         --tag="TITLE=$title" \
         --tag="ALBUM=$album" \
         --tag="ARTIST=$artist" \
         "$file" # creates .flac
done

このスクリプトは、ディレクトリの構成が「ARTIST/ALBUM/TILE.wav」となっている 場合に、ディレクトリ名とファイル名(拡張子の前)からタグを設定するための ものである。

参 考

convert wav to flac with tags


font install (fc27)

font-manager

インストールされているフォントを確認するためのツール。

  1. パッケージのインストール

    以下のコマンドを実行して、font-manager パッケージをインストールする。

    # dnf install font-manager
  2. font-managerの起動

    アプリケーション⇒アクセサリー⇒Font Manager から起動する。

青柳隷書しもフォント

  1. フォントのダウンロード

    https://opentype.jp/aoyagireisho.htm より aoyagireisyosimo_ttf_2_01.zip をダウンロードする。

  2. フォントのインストール

    以下のコマンドを実行する。

    # unar -o /usr/share/fonts aoyagireisyosimo_ttf_2_01.zip

    以下のコマンドを実行して、フォントファイル以外のファイルを削除する。

    # cd /usr/share/fonts/aoyagireisyosimo_ttf_2_01
    # rm *.pdf *.doc *.txt

    以下のコマンドを実行してフォントのキャッシュを更新する。

    # fc-chache -fv

衡山毛筆フォント

  1. フォントのダウンロード

    https://opentype.jp/kouzanmouhitufont.htm より KouzanMouhituFont.zip をダウンロードする。

  2. フォントのインストール

    以下のコマンドを実行して、フォントファイルの配置とフォントキャッシュの 更新を実行する。

    # unar -o /usr/share/fonts/KouzanMouhituFont KouzanMouhituFont.zip
    # fc-cache -fv

IPAexフォント

  1. フォントのダウンロード

    https://moji.or.jp/ipafont/ipaex00401/より https://moji.or.jp/wp-content/ipafont/IPAexfont/IPAexfont00401.zipを ダウンロードする。

  2. フォントのインストール

    以下のコマンドを実行して、フォントファイルを配置する。

    # unzip -d /usr/share/fonts/ IPAexfont00401.zip

    以下のコマンドを実行して、不要なファイルを削除する。

    # cd /usr/share/fonts/IPAexfont00401
    # rm *.txt

    以下のコマンドを実行して、フォントキャッシュを更新する。

    # fc-cache -fv

Migu1M

ソースコードの表示に向くとされているフォント。

  1. フォントのダウンロード

    https://itouhiro.github.io/mixfont-mplus-ipa/migu/より migu-1m-20200307.zip をダウンロードする。

  2. フォントのインストール

    以下のコマンドを実行して、フォントファイルを配置する。

    # unzip -d /usr/share/fonts migu-1m-20150712.zip

    以下のコマンドを実行して、不要なファイルを削除する。

    # cd /usr/share/fonts/migu-1m-20150712/
    # rm -rf ipag00303/ mplus-TESTFLIGHT-060/ *.txt

    以下のコマンドを実行して、フォントキャッシュを更新する。

    # fc-cache -fv

白舟篆書教漢

教育用漢字とかたかな、平仮名のみを収録した篆書体のフォント。

  1. フォントのダウンロード

    http://www.hakusyu.com/download_education.htmより Windows 用のフォント hktenkk.zipを ダウンロードする。

  2. フォントのインストール

    以下のコマンドを実行して、フォントファイルを配置し、フォントキャッシュを クリアする。

    # unzip -d /usr/share/fonts hktenkk.zip
    # fc-cache -fv

白舟篆書年賀

年賀状で使用する文字に絞った篆書体のフォント。

  1. フォントのダウンロード

    http://www.hakusyu.com/download_shiki_winter.phpより Windows用のフォント hktenng.zip をダウンロードする。

  2. フォントのインストール

    以下のコマンドを実行して、フォントファイルを配置し、フォントキャッシュを クリアする。

    # unzip -d /usr/share/fonts hktenng.zip
    # fc-cache -fv

fsck (fc30)

起動時にfsckを実行する

システム起動時にカーネル・コマンドに以下のパラメータを設定する。

fsck.mode=force

ext2/3/4 ディスクのチェックと修復

レスキューディスク等でシステムを起動し、以下のコマンドを実行する。

# fsck -fpcDv /dev/<デバイス名>

LVMのチェック

レスキューディスク等でシステムを起動し、以下のコマンドを実行する。

  1. Volume Groupのスキャン

    以下コマンドを実行して、Volume Groupをスキャンする。

    # vgscan

    実行結果より、Volume Group名を確認する。例えば、以下のように出力された場合、 Volume Group名は「fedora」である。

      Reading volume groups from cache.
      Found volume group "fedora" using metadata type lvm2
  2. Logical Volumeの確認

    以下コマンドを実行して、Logical Volumeを確認する。

    # lvscan

    実行結果よりLogical Volumeを確認する。例えば、以下のように出力された場合、 2つのLogical Volumeが存在している。

      ACTIVE            '/dev/fedora/root' [929.02 GiB] inherit
      ACTIVE            '/dev/fedora/swap' [7.86 GiB] inherit
  3. Volume Groupの有効化

    lvscanの実行結果で「ACTIVE」と表示されていない場合は、Volume Group名を 指定して書きコマンドを実行し、Volume Groupを有効にする。

    # vgchange -ay <Volume Group名>
  4. fsckの実行

    Logical Volumeを指定してfsckを実行する。上記のlvscanの実行結果の場合、以下の コマンドを実行する。

    # fsck -fpcDv /dev/fedora/root

gFTP (fc25) - FTP, SSH2, FSP GUI client

gFTPは、FTP、SSH、FSPププロトコルでファイル転送をするためのGUIクライアントである。

パッケージのインストール

# dnf install gftp

GIMP (fc25)

パッケージのインストール

# dnf install gimp

境界のぼかし

  1. gimpで画像を開き、画像を範囲選択する
  2. 選択メニューから「選択範囲の縮小」を選択し、「選択範囲の縮小」画面で 縮小量をピクセルで指定する。
  3. 選択メニューから「境界をぼかす」を選択し、「選択範囲の境界をぼかす」 画面で線をぼかす量をピクセルで指定する
  4. 選択メニューから「選択範囲の反転」を選び、引き続いて編集メニューから 「切り取り」を選択する
参 考

背景の透明化

  1. 画像を開く
  2. 画像ビューのメニューから「画像」⇒「モード」⇒「RGB」を選択してRGB モードにする
  3. 画像ビューのメニューから「レイヤー」⇒「透明部分」⇒ 「アルファチャンネルの追加」を選択して、アルファチャンネルを追加する
    1. ツールボックスの「ファジー選択」をクリックして、画像のビューで透明化 したい背景色の部分をクリックしてその色の連続する部分を選択する
    2. 画像のビューのメニューから「編集」⇒「消去」を選択して、選択部分を 透明化する
    3. 他に透明化する部分があれば、上記の手順を繰り返す
    参 考

画像の着色

文字をスキャナで取り込んで、文字の色を着色する手順は以下のとおり。

  • 色の着色を使う方法
    1. 画像ビューのメニューから「画像」⇒「モード」⇒「RGB」を選択する
    2. 着色しない部分は、「背景の透明化」の処理をする
    3. 画像ビューのメニューから「色」⇒「着色」を選択して「着色」画面を開き、 色の調整をする
  • 塗りつぶを使う方法
    1. 画像ビューのメニューから「画像」⇒「モード」⇒「RGB」を選択する
    2. ツールボックスの背景色の矩形部分をクリックし、変更したい色に設定する
    3. ツールボックスの「ファジー選択」をクリックした後、画像ビューの変更 対象の色の部分のどこか1カ所をクリックして、塗りつぶし対象部分を選択する
    4. ツールボックスの「塗りつぶし」アイコンをクリックした後に、選択部分を クリックしえ、選択部分を背景色で塗りつぶす

gkrellm (fc29) - The GNU Krell Monitors

GNU Krell Monitors は、CPU、ディスク、ネットワークインターフェース等の稼働状況を モニターするGUIツールである。

パッケージのインストール

以下のコマンドを実行してパッケージをインストールする。

# dnf install gkrellm

gLabels (fc29) - Label Designer

パッケージのインストール

# dnf install glabels

gnome-system-monitor (fc25)

以下のコマンドを実行して、システムモニターをインストールする。

# dnf install gnome-system-monitor

grub2-mkconfig (fc28) - configure kernel parameters

  1. /etc/default/grub ファイルの編集

    root権限で /etc/default/grub ファイルを以下のように編集する。

    • 「GRUB_CMDLINE_LINUX=」の行にカーネルパラメータを設定する。
  2. GRUB configuration fileの更新

    root権限で grub2-mkconfig コマンドを実行して、GRUB configuration file を 更新する。

    • EFIシステムの場合
      # grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
    • BIOSシステムの場合
      # grub2-mkconfig -o /boot/grub2/grub.cfg

icedax (fc27) - A utility for sampling/copying .wav files from audio CDs

パッケージのインストール

# dnf install icedax

Audio CDのコピー

$ icedax dev=/dev/cdrom -vall cddb=0 -B -Owav

Input Methods (fc36)

Input Method の設定

  • 「IBusの設定」画面の開き方
    • アプリケーションメニューから開く
      1. アプリケーション → 設定 → 入力メソッドのセレクター を選択して、 「入力メソッドのセレクター」画面を開く
      2. 「iBusを使用する」の隣にある「設定」ボタンを押す。
    • ファイルマネージャーから開く
      1. ファイルマネージャーから「/usr/share/applications」を開く。
      2. ファイルマネージャから「IBusの設定」を開く。
  • Input Method 切り替えキーに「半角/全角」キーを追加
    1. 「iBusの設定」画面で「一般」タブを選択する。
    2. 「次の入力メソッド」の「...」ボタンを押して、 「入力メソッドの切り替え中のキーボードショートカットを選択」画面を開く。
    3. 「削除」ボタンを押して現在の設定を削除した後、キーコードの「...」 ボタンを押して、「キーもしくはキーの組み合わせを入力してください」 ダイアログを開き、「無効」をマウスでクリックして「新しいアクセラレーター」 と表示されたら「半角/全角」ボタンを押す。
    4. 「入力メソッドの切り替え中のキーボードショートカットを選択」画面の キーボードショートカットに「Zenkaku_hankaku」と表示されたのを確認して、 「追加」ボタンを押し、次に「OK」ボタンを押して画面を閉じる。
  • Input Method の登録
    1. 「iBusの設定」画面の「入力メソッド」タブを開き、「追加」ボタンを 押す。
    2. 「入力メソッドの選択」画面が開くので、「日本語」をクリックし、 切り替わった画面で追加する Input Method を選択して、「追加」ボタンを 押す。

ibus-anthy

Fedora 34 から、既定の Input Method が anthy になったらしい。 Rocky Linux 9 では、日本語入力は、ibus-anthy しか対応していない。

  • パッケージのインストール

    以下のコマンドを実行して、パッケージをインストールする。

    # dnf install ibus-anthy
  • 辞書の編集
    1. 「iBusの設定」画面で「入力メソッド」タブを選択する。
    2. 「Anthy」を選択して、「設定」ボタンを押す。
    3. 「IBus-Anthyの設定」画面の「辞書」タブを選択する。
    4. 「辞書の編集コマンド」の横にある「...」ボタンを押す。
    5. 「霞」画面で辞書の追加、編集等を行う。
      備 考

      「霞」画面で変更を保存したときに、「Could nit load a pixbuf ...」エラー が発生する場合は、以下のコマンドを実行してから「霞」画面を開き直して 辞書の編集をやり直すこと。

      # sudo update-mime-database /usr/share/mime

ibus-mozc

手書き文字入力機能が廃止になった。

  • パッケージのインストール

    以下のコマンドを実行して、パッケージをインストールする。

    # dnf install ibus-mozc
  • 辞書の編集
    1. 「iBusの設定」画面で「入力メソッド」タブを選択する。
    2. 「Mozc」を選択して、「設定」ボタンを押す。
    3. 「Mozcプロパティ」画面の「辞書」タブを選択する。
    4. 「ユーザ辞書の編集」ボタンを押す。
    5. 「Mozc 辞書ツール」画面で辞書の追加、編集等を行う。

Java Settings (fc41)

Font size

JavaのUIを表示するとフォントが小さすぎて見えにくい場合は、環境変数 「GDK_SCALE」にフォントサイズの倍率を指定して、javaアプリケーションの実行 コマンドを実行する。フォントサイズを2倍にして画面表示する場合のコマンド実行 例は以下のとおりである。

$ GDK_SCALE=2.0 <Javaアプリケーション実行コマンド>

keychain (fc30) - keychain manager

パッケージのインストール

以下のコマンドを実行して、パッケージをインストールする。

# dnf install keychain

keychain の実行

ログイン時に keychain を実行するために、~/.bash_profile に以下の行を追加する。

/usr/bin/keychain <非公開鍵のパス> ...
source ${HOME}/.keychain/${HOSTNAME}-sh

ssh-keygen コマンドでRSA公開鍵をデフォルトのファイル名で作成した場合は、以下の ようになる。

/usr/bin/keychain ${HOME}/.ssh/id_rsa
source ${HOME}/.keychain/${HOSTNAME}-sh

なお、keychain コマンドで非公開鍵を読み込んだ場合、システム起動後に初回だけ passphase を聞いてくるので、ssh-keygen コマンドで公開鍵/非公開鍵を生成した ときに設定したpassphrase を入力すること。


kid3 (fc26) - ID3 tag editor

パッケージのインストール

以下のコマンドを実行して、kid3をインストールする。

# dnf install kid3

libguestfs-tools (fc31) - Mount a guest filesystem on the host

パッケージのインストール

  1. パッケージのインストール

    以下のコマンドを実行して、libguestfs-tools パッケージをインストールする。

    # dnf install libguestfs-tools
  2. SELinuxの設定

    以下のコマンドを実行して、SELinux boolean value を設定する。

    # setsebool -P virt_use_fusefs 1

ディスクイメージのマウント

パッケージをインストールした場合は、システムを再起動する。以下のコマンドを 実行して、仮想マシンのファイルをマウントする。

$ guestmount -a <VHDファイルのパス> -m <マウントするVHDのパーティション> \
             --rw <マウント先ディレクトリ>

注意

  • guestmount コマンドはrootではなく一般ユーザで実行する
  • 読み取り専用でマウントする場合は「--rw」の代わりに「--ro」を指定する
  • LVMの場合は、「/dev/volume_group_name/logical_volume_name」を指定する
$ guestmount -a windows.img -m /dev/sda1 --rw /mnt

ディスクイメージのアンマウント

$ guestumount <マウント先ディレクトリ>

Linux Malware Detect (FC43) - malware scanner for Linux

Linux Malware Detect (LMD) は Linux のウィルススキャナーで、スキャナーが 軽量であることが特徴である。

Linux Malware Detect のインストール

  1. 事前準備

    以下のコマンドを実行して、ed、inotify-tools の2つのパッケージをインストール する。

    $ sudo dnf install ed which inotify-tools perl cronie [checkpolicy policycoreutils]
    備 考

    SELinux が有効な環境の場合は、checkpolicy、policycoreutils パッケージも インストールすること。

  2. インストーラーのダウンロード
    1. Linux Malware DetectのGitHubサイト の画面左側にある Release の latest リンクをクリックする
    2. Assets の「Source code (tar.gz)」のリンクをクリックして、 linux-malware-detect-x.x.x.tar.gz をダウンロードする。
  3. インストールの実行
    1. 以下のコマンドを実行してダウンロードしたファイルを解凍する
      $ tar xvfz linux-malware-detect-x.x.x.tar.gz
    2. 以下のコマンドを実行して、linux-malware-detect-x.x.x ディレクトリ に移動して、Linux Malware Detection をインストールする
      $ cd linux-malware-detect-x.x.x
      $ sudo ./install.sh
  4. /etc/sysconfig/maldet ファイルの編集
    • /usr/local/maldetect/internals/functions の修正

      /etc/sysconfig/maldet ファイルに以下の設定を追加する。

      LANG=C
      sed '/^[ \t]*source \$intcnf[ \t]*# added sysconfig$/! s/^\([ \t]*\)\(source $intcnf[ \t]*\)$/\0 # added sysconfig\n\1if [ -f "$syscnf" ]; then\n\1        source $syscnf\n\1fi/g' -i $inspath/internals/functions

      この設定は以下のことを行う。

      • 環境変数「LANG=C」設定して、maldet コマンドを実行する。日本語の環境だと 「maldet --monitor-report」等を実行するとエラーが発生するので、それを 回避するための設定である。
      • /usr/local/maldetect/internals/functions ファイルに 「source $intcnf」の行が見つかると、その行にコメント 「# added sysconfig」を追加した上で、以下の行を追加する。
        if [ -f "$syscnf" ]; then
                source $syscnf
        fi

        これは、Inotiry monitoring 実行時に定期的に設定ファイルの再読み込みが 行われるが、その際に /etc/sysconfig/maldet の読み込みが行われない問題を 回避するための設定である。

インストーラーの実行結果について
  • /usr/local/maldetect ディレクトリに Linux Malware Detect を インストールする
  • /usr/local/share/man/man1/ にマニュアルをインストールする
  • /etc/cron.d/maldet_pub ファイルを配置する
  • /etc/cron.daily/maldet ファイルを配置する

    このジョブは、以下のことを行う。

    • ウィルス定義のシグネチャの更新
    • Linux Malware Detect のプログラム更新
    • 7日前より古い隔離データ/セッションデータ/一時ファイルの削除
    • inotify monitoring の日次のスキャン結果レポートの作成
  • /usr/lib/systemd/system/maldet.service を配置する
    ⇒ 配置後にmaldet サービスを自動起動に設定する

    このサービスは、ユーザーホームディレクトリを対象に inotify monitoring を 行う。

  • /etc/sysconfig/maldet ファイルを配置する
    ⇒環境変数を設定するファイルであるが、何も設定されていない

logrotate の設定

  • ログ出力先の変更

    Linux Malware Detect のログは /user/local/maldetect/logs ディレクトリに 出力されるが、/usr ディレクトリ配下では logrotate によるログの ローテーションができないので、ログの出力先を /var/log/maldet に変更する。

    1. /etc/sysconfig/maldet ファイルの設定

      /usr/local/maldetect/internals/internals.conf の設定よりログの出力先を 設定するプロパティを確認し、/etc/sysconfig/maldet ファイルにログ出力先の 設定をする。設定内容は以下のとおりである。

      [/etc/sysconfig/maldet]

      logdir="/var/log/maldet"
      maldet_log="$logdir/event_log"
      clamscan_log="$logdir/clamscan_log"
      inotify_log="$logdir/inotify_log"
    2. /var/log/maldet ディレクトリの作成

      以下のコマンドを実行して、/var/log/maldet ディレクトリを作成する。

      # mkdir /var/log/maldet
    3. SELinux のラベル設定

      以下のコマンドを実行して、/var/log/maldet ディレクトリ配下のファイルに 「var_log_t」ラベルを設定する。

      # semanage fcontext -a -t var_log_t "/var/log/maldet/.*"
      # restorecon -R -v /var/log/maldet
  • /etc/logrotate.d/maldet ファイルの作成

    [/etc/logrotate.d/maldet]

    /var/log/maldet/inotify_log {
        hourly
        dateformat -%Y%m%d%H%M
        rotate 2
        size 5M
        missingok
        notifempty
        create 0640 root root
        postrotate
            /bin/systemctl condrestart maldet.service > /dev/null 2> /dev/null || true
        endscript
    }
    
    /var/log/maldet/clamscan_log
    /var/log/maldet/event_log
    {
        daily
        rotate 2
        size 5M
        missingok
        notifempty
        create 0644 root root
    }
    注 意

    既定の設定では、logrotate の最も短い周期は「daily」である。「hourly」の 設定を有効にする場合は、 logrotate の「hourly の有効化」に記載された 手順を実施すること。

inotify monitoring

inotify monitoring はカーネルの inotify の仕組みを利用して、ファイルの作成、 変更、移動が行われたことを検知してファイルをスキャンする機能である。

Linux Malware Detect がカーネルの inotify 機能により、ファイルの作成、変更、 移動の通知を受けとると、15秒後にそれまでに通知を受けた他のファイルと一緒に ウィルススキャンを行う。カーネルから通知を受けてからウィルススキャンを開始 するまでの間隔(秒)は、conf.maldet ファイルの「inotify_sleep=」で設定する ことができる。

inotify monitoring の設定
  • inoode の上限値の設定

    /etc/sysctl.conf ファイルを編集して、下記の設定をする。設定値は、監視対象の ファイルの数に応じて 262144、524288、1048576 などを指定する。

    fs.inotify.max_user_watches = <inode上限値>
  • SELinux の設定
    1. TEファイルの作成

      作業ディレクトリに「my-init_unlink.te」ファイルを作成して、以下の内容を 記述する。

      module my-init_unlink 1.0;
      require {
        attribute init_t;
        attribute usr_t;
        class file unlink;
      }
      #============= init_t ==============
      allow init_t usr_t:file unlink;
    2. 以下のコマンドを実行して、作成したモジュール(TEのルール)をコンパイル、 インストールする。
      $ checkmodule -m -o my-init_unlink.mod my-init_unlink.te
      $ semodule_package -o my-init_unlink.pp -m my-init_unlink.mod
      $ sudo semodule -i my-init_unlink.pp
  • スキャン除外ディレクトリの設定

    /usr/local/maldetect/ignore_inotify ファイルにスキャンを除外する ディレクトリの絶対パスの正規表現を行区切りで設定する。以下の2種類の ファイルやディレクトリをスキャン対象から除外するために、以下の設定をする。

    • Linux Malware Detect がウィルススキャンを実行するとき作成する一時ファイル
    • パターンファイルなどを保管するディレクトリ
    ^/tmp/[0-9]*_[0-9]*-scantemp\.[0-9a-z]*
    ^/usr/local/maldetect[^/]*/tmp/.*
  • スキャン対象ディレクトリ

    /usr/local/maldetect/monitor_paths ファイルにスキャン対象のディレクトリの 絶対パスを行区切りで設定する。また、

    • システム全体をスキャンする場合の設定例
      • /usr/local/maldetect/monitor_paths

        ルートディレクトリ(/)以下すべてのファイルを検索対象にする場合の 設定例は以下のとおり。

        /
      • /usr/local/maldetect/ignore_inotify

        /dev、/proc ディレクトリ配下のファイルを検索対象から除外する場合は、 既定の設定の下に以下の設定を追加する。

        ...
        ^/dev/.*
        ^/proc/.*
        ^/var/log/.*
    • スキャン対象を個別に設定する場合の設定例
      • /usr/local/maldetect/monitor_paths

        ルートディレクトリ(/)配下のディレクトリを列挙してスキャン対象を 指定する場合の設定例は以下のとおり。

        /afs
        /boot
        /etc
        /home
        /media
        /mnt
        /opt
        /root
        /run
        /srv
        /tmp
        /usr
        /var
      備 考

      root権限で「maldet --monitor /usr/local/maldetect/monitor_paths」 コマンドを実行するとエラー終了する場合は、以下の対応をすること。

      1. 「maldet --log」コマンドで原因を確認する

      2. スキャン対象ディレクトリの読み取りエラーが発生する場合は、 そのディレクトリをスキャン対象から外すか、エラーが発生しない サブディレクトリをスキャン対象に指定する

  • maldet.service ファイルの設定変更

    /etc/systemd/system/maldet.service.d ディレクトリの下に「override.conf」 ファイルを作成し、以下のように「--monitor」オプションの設定を変更する。

    [/etc/systemd/system/maldet.service.d/override.conf]

    [Service]
    ExecStart=
    ExecStart=/usr/local/maldetect/maldet --monitor /usr/local/maldetect/monitor_paths
                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • conf.maldet ファイルの編集

    /usr/local/maldetect/conf.maldet ファイルを以下のように編集する。

    ...
    scan_ignore_root="0"
    ...

    設定項目の説明

    • scan_ignore_root

      所有者が root のファイルもスキャン対象にする場合は、"0" を設定する。

    その他の設定項目

    • quarantine_hits

      ウィルスを検知したときにそのファイルを隔離する場合は、 「quarantine_hits="1"」を設定する。

    • web_proxy=ホスト名:ポート番号

      プロキシサーバーを通してインターネットにアクセスする環境では、プロキシ サーバーのホスト名またはIPアドレスと、プロキシサーバーのポート番号を指定 する。

monitoring関連のコマンド
  1. monitoringの開始
    • ユーザーホームディレクトリの監視

      以下のコマンドを実行すると、UIDが500(conf.maldetのinotify_minuidで 設定された値)以上のユーザー・ホームディレクトリの監視を開始する。

      # maldet --monitor users
    • 指定したディレクトリの監視

      以下のコマンドを実行すると、指定した絶対パスのディレクトリの監視を開始 する。

      # maldet --monitor <dir-path>[,<dir-path,...]

      ディレクトリのパスは絶対パスで指定する。また複数のディレクトリを監視する 場合は、それらのディレクトリの絶対パスをコンマ区切りで指定する。

    • 監視対象のディレクトリを記述したファイルを指定

      監視対象のディレクトリの絶対パスを行区切りで記述したファイルの絶対パスを 指定して監視を開始するためのコマンドは以下のとおり。

      # maldet --monitor <file-path>
  2. monitoringサービスの停止

    以下のコマンドを実行すると、monitoringsサービス(現在監視実行中の セッション)を停止する。

    # maldet --kill-monitor
  3. monitoringのレポート出力

    現在実行中のmonitoringサービス(現在監視実行中のセッション)の監視 レポートは、日次の cron ジョブ(/etc/cron.daily/maldet)により自動的に 出力される。現在実行中のセッションの監視レポートをすぐに出力したい場合は、 以下のコマンドを実行する。

    # maldet --monitor-report

    出力したレポートは、以下のコマンドで表示(標準出力への出力)する。

    # maldet --dump-report [<scan-id>]

    SCAN ID の指定(scan-id)を省略すると、最後にスキャンされたセッションの レポートが表示される。SCAN ID の確認方法については 「スキャン結果のレポート表示」の説明を参照のこと。

    --dump-report オプションの代わりに --report オプションを指定すると、 ファイル・ビューアーを使用して監視レポートを表示する。

  4. ファイルの隔離と復元
    • ファイルの隔離

      レポートに下記のようなウィルスの検知が表示された場合で、conf.maldet ファイルに「quarantine_hits="0"」と設定されている場合は、検知された ファイルの隔離が行なわれない。

      FILE HIT LIST:
      {HEX}EICAR.TEST.3 : /tmp/eicar_com.zip

      検出されたファイルを隔離する場合は、レポートに表示されているとおり、 SCAN ID を指定して下記のコマンドを実行する。

      # maldet -q <scan-id>
      または
      # maldet --quarantine <scan-id>
    • 隔離されたファイルの復元

      隔離されたファイルを基に戻したい場合は、SCAN ID を指定して以下のコマンドを 実行する。

      # maldet -s <scan-id>
      または
      # maldet --restore <scan-id>
  5. 監視レポートの破棄

    以下のコマンドを実行すると、監視レポート、隔離データ等を削除する。

    # maldet -p
    または
    # maldet --purge

Linux Malware Detect の主な設定項目

/usr/local/maldetect/conf.maldet ファイルを編集する。詳細は conf.maldet ファイルのコメントを参照のこと。

  • scan_clamscan="1"

    既定値は"1"が設定されているので、clamscan、clamdscan コマンドが利用可能で あればウィルスのスキャンに これらを使用する。ClamAV がインストールされている 場合で、ウィルススキャンに ClamAV のエンジンを使用しない場合は、 「scan_clamscan="0"」を設定する。

  • scan_ignore_root

    既定値は"1"が設定されているので、ファイルの所有者が root の場合はスキャンの 対象外となる。所有者が root のファイルもスキャン対象とする場合は、"1" を設定 する。

  • quarantine_hits

    既定値は"0"が設定されているので、ウィルスを検知しても隔離せずにアラートを 発報するだけで、隔離を行わない。ウィルスを隔離(ファイルを隔離場所に移動 する)する場合は、「quarantine_hits="1"」を設定する。

  • web_proxy

    プロキシサーバーを通じてインターネットにアクセスする環境の場合は、 「web_proxy="ホスト名:ポート番号"」を指定する。ホスト名ポート番号 は、プロキシサーバーのホスト名またはIPアドレス、およびプロキシサーバーの ポート番号を指定すること。

    プロキシサーバーを通してインターネットにアクセスする環境では、Linux Malware Detect のインストール直後はウィルス定義のシグネチャがダウンロードされて いないので、ウィルススキャンを実行することができない。従って、この設定で プロキシサーバーを指定した後に root 権限で「maldet --update」コマンドを 実行し、ウィルス定義のシグネチャをダウンロードすること。

ClamAVとの連携

ClamAV がインストールされていない場合、または ClamAV がインストールされて いても freshclam や clamd の設定が不十分で clamdscan コマンドが正常に実行 できない場合は、以下に示す手順を確認・実行すること。

  1. ClamAV のインストール

    以下のコマンドを実行して、clamav パッケージをインストールする。

    # dnf install clamav
  2. freshclam の設定

    ローカルで clamd サービスを動かす場合は、「ClamAV - clamav-update」の 手順を実行して、clamav-update パッケージのインストールと、freshclam の 設定を行う。

  3. clamd のインストールと設定

    ローカルで clamd サービスを動かす場合は、以下の手順を実施して clamd パッケージのインストールと clamd サービスの設定をする。

    1. 以下のコマンドを実行して、clamd パッケージをインストールする。
      # dnf install clamd
    2. scan.conf ファイルの変数

      /etc/clamd.d/scan.conf ファイルを以下のように編集する。

      • 「#LocalSocket /run/clamd.scan/clamd.sock」の行頭の「#」を 削除してコメントを外す
      • 「#LocalSocketGroup virusgroup」の行頭の「#」を削除して、コメントを 外す
      • 「#LocalSocketMode 660」の行頭の「#」を削除して、コメントを外す
    3. SELinux の設定

      ClamAV - clamd > その他の設定 > SELinuxの設定」の手順に従って、 SELinuxのbool値の設定と、ローカル・ポリシーの設定を行う。

    4. freshclam.conf の編集

      ClamAV - clamd > その他の設定 > /etc/freshclam.conf」の編集の 手順に従って、/etc/freshclam.conf ファイルの「NotifyClamd」ディレクティブ を以下のように設定する。

      NotifyClamd /etc/clamd.d/scan.conf
    5. clamd@scan サービスの自動起動設定

      以下のコマンドを実行して、clamd@scan サービスの自動起動を有効にして、 サービスを起動する。

      # systemctl enable --now clamd@scan
  4. conf.maldet ファイルの編集

    /usr/local/maldetect/conf.maldet ファイルを以下のように編集する。

    • scan_clamscan
      scan_clamscan="1"
    • clamd サービスが別のホストで動いている場合

      conf.maldet ファイルに以下の設定を追加する。

      • scan_clamd_remote
        scan_clamd_remote="1"
      • remote_clamd_config

        clamdscan コマンドの設定ファイルのパスを設定する。既定の設定は以下の とおりである。

        remote_clamd_config="/etc/clamd.d/clamd.remote.conf"

        /etc/clamd.d/clamd.remote.conf ファイルを作成して、以下の設定をする。

        TCPSocket 3310
        TCPAddr <remote-host-name>
  5. maldet.service ファイルの編集

    /etc/systemd/system/maldet.service.d/override.conf ファイルを以下のように 編集する。

    [/etc/systemd/system/maldet.service.d/override.conf]

    [Unit]
    After=
    After=network.target clamd@scan.service
                         ~~~~~~~~~~~~~~~~~~ ←この部分を追加
    
    [Service]
    ExecStart=
    ExecStart=/usr/local/maldetect/maldet --monitor /usr/local/maldetect/monitor_paths
  6. ignore_inotify ファイルの編集

    /usr/local/maldetect/ignore_inotify ファイルに以下の行を追加する。

    ...
    ^/var/lib/clamav/.*
    ^/var/spool/quarantine/.*
  7. SELinux のラベル設定

    clamdscan コマンドが /usr/local/maldetect/tmp ディレクトリの下にファイルを 書き込めるように、以下のコマンドを実行して SELinux のラベルを設定する。

    # semanage fcontext -a -t antivirus_tmp_t "/usr/local/maldetect/tmp/.*"
    # restorecon -R -v /usr/local/maldetect/tmp

ディレクトリのウィルススキャン

指定したディレクトリのウィルススキャン実行

スキャン対象のディレクトリを絶対パスで指定して、以下のコマンドを実行する。

# maldet --scan-all <スキャン対象の絶対パス>

ワイルドカード「?」を指定してスキャン対象ディレクトリの指定が可能である。 /home ディレクトリ配下及びそのサブディレクトリのどこかに存在する 「public_html」ディレクトリに対してウィルススキャンを実行する場合は、以下の コマンドを実行する。

# maldet --scan-all /home/?/public_html
システム全体のフルスキャンの実行例

以下の条件を満たす場合に、システム起動の10分後にシステム全体(ルート ディレクトリ及びそのサブディレクトリ配下のすべてのファイル)のフルスキャンを 実行する場合の cron の設定例を以下に示す。

前提条件

  • /var/log/maldetscan.log ファイルのタイムスタンプが 30 日よりも前である
  • PC が AC 電源に接続されている
  • dnf コマンドが実行中ではない

[cronの設定]

@reboot sleep 10m; if [ ! -f /var/log/maldetscan.log -o `find /var/log -name 'maldetscan.log' -mtime +30 | wc -l` -gt 0 -a x`upower -i /org/freedesktop/UPower/devices/line_power_AC | grep 'online:' | sed 's/.* //g'` = xyes ]; then if [ `ps h -C dnf | wc -l` -eq 0 ]; then /opt/tools/notify-all.sh 'Linux Malware Detect scanning started.'; echo ">>>>> START `LANG=C date`" >> /var/log/maldetscan.log; /usr/local/maldetect/maldet -u >> /var/log/maldetscan.log 2>&1; /usr/local/maldetect/maldet --scan-all / >> /var/log/maldetscan.log 2>&1; echo "<<<<< END `LANG=C date`" >> /var/log/maldetscan.log; fi; fi
備 考

cron の設定にある「/opt/tools/notify-all.sh」の内容については、 ClamAV - clamd/usr/local/bin/virus-event.shを参照のこと。

スキャン結果のレポート表示

  1. レポート一覧の表示

    以下のコマンドを実行して、スキャン結果のレポート一覧を表示する。

    # maldet --report list

    一覧の項目は以下のとおり。

    SCANID スキャン毎に付与されるID
    RUNTIME スキャンの実行時間
    FILES スキャンしたファイルの数
    HITS ウィルスを検知したファイルの数
    CLEANED 検疫により無害化したファイルの数
  2. スキャン結果のレポート表示

    レポート一覧で確認した scan id を指定して以下のコマンドを実行し、スキャン 結果のレポートを表示する。

    # maldet --dump-report [<scan-id>]

    なお、scan-id の指定を省略すると、一番最後に出力されたレポートを表示する。

検索エンジンの実行時間比較

Eclipse 2024-06 (本体 945.1MiB、dropins 484.7MiB、合計 1429.7MiB)を以下の 検索エンジンでウィルススキャンしたときの検索所要時間、システム全体の消費メモリ (OSはRockyLinux9)の比較結果を以下に示す。

検索エンジン 検索ファイル数 検索時間 消費メモリ 
(システム全体)
clamdscan -- 6506s 2328.0 MiB
maldet 13312 2526s 698.6 MiB
maldet + clamdscan 13378 4252s 2483.9 MiB

ウィルススキャンは、それぞれ以下のように実行した。

  • clamdscan

    clamav-freshclam、clamd@scan サービスを実行、maldetサービスを停止した 状態で、「clamdscan --fdpass 検索対象ディレクトリ」コマンドを実行

  • maldet

    conf.maldet ファイルで「scan_clamscan="0"」を設定し、clamav-freshclam、 clamd@scan、maldet サービスを停止した状態で、 「maldet --scan-all 検索対象ディレクトリ」コマンドを実行

  • maldet + clamdscan

    conf.maldet ファイルで「scan_clamscan="1"」を設定し、clamav-freshclam、 clamd@scan サービスを起動、maldet サービスを停止した状態で 「maldet --scan-all 検索対象ディレクトリ」コマンドを実行

設定トピックス

ウィルス検知のメール通知

/usr/local/maldetect/conf.maldet ファイルに以下の設定を行うと、ウィルスを 検知したときに、レポートの内容をOSユーザーに通知できる。

email_alert="1"
email_addr="<OSユーザー名>[,<OSユーザー名>,...]"

設定項目の説明

  • email_alert

    「email_alert="1"」を設定して、メール通知を有効にする。

  • email_addr

    「email_addr="OSユーザー名"」を指定して、指定したOSユーザーにアラート 通知メールを送信する。複数のユーザーに通知する場合は、OSユーザー名を コンマ区切りで指定する。

OSユーザーへのメール通知を行う場合は、s-nail、sendmessage パッケージを インストールする必要がある。これらのパッケージをインストールすれば、特に インストールしたパッケージの設定なしで maldet がメール送信したり、OSの ユーザーが mailx コマンドでメールを確認したりできる。

メール通知に必要なパッケージのインストールや、mailx コマンドの利用方法に ついては、s-nail & sendmailを参照のこと。

参考文献


LibreOffice (fc25)

本体のインストール

# dnf install libreoffice

言語パックのインストール

# dnf install libreoffice-langpack-ja

Lightweight Web Browsers}(fc36)

Product RSS (MiB)
Lynx 9.0
midori 82.2
Pale Moon 210.9
Firefox 309.2

Lynx (fc27) - text-based web browser

Lynxは端末(Terminal emulator)でHTMLを成形されたテキストに変換して表示するWeb ブラウザーである。画像、動画、音声には対応しない。また、表を整形して表示する こともできない。

  • パッケージのインストール

    以下のコマンドを実行して、パッケージをインストールする。

    # dnf install lynx

midori building (fc33) - a lightweight, fast, and free web browser

  • パッケージのインストール

    以下のコマンドを実行して、パッケージをインストールする。

    # dnf install midori
  • ソースファイルからのビルド

    リポジトリのパッケージは、URL入力のために「/」を入力すると検索窓が開いて しまうため、このバグが修正された最新盤のソースからビルドする手順を以下に 示す。

    1. ソースのダウンロード

      https://github.com/midori-browser/core/archive/master.zipを ダウンロードして、ファイル名を「core-master.zip」に変更する。

    2. ビルドに必要なパッケージのインストール

      以下のパッケージをインストールする。

      • gcc
      • cmake
      • intltool
      • vala
      • libsoup-devel
      • sqlite-devel
      • webkit2gtk3-devel
      • gcr-devel
      • json-glib-devel
      • libpeas-devel
      • libarchive-devel
      • libxml2-devel

      実行するコマンドは以下のとおり。

      # dnf install gcc cmake intltool vala libsoup-devel sqlite-devel \
            webkit2gtk3-devel gcr-devel json-glib-devel libpeas-devel \
            libarchive-devel libxml2-devel

      CentOS 7 の場合は、以下のコマンドを実行してビルドに必要なパッケージを インストールする。

      # yum install gcc cmake3 intltool vala libsoup-devel sqlite-devel \
            webkitgtk4-devel gcr-devel json-glib-devel libpeas-devel \
            libarchive-devel libxml2-devel
    3. specファイル
      # Basic information
      Name:           midori-core
      Version:        9.0
      Release:        1%{?dist}
      Summary:        Midori a lightweight, fast and free web browser
      License:        LGPL-2.1
      # See available group at https://vinelinux.org/docs/vine6/making-rpm/group-list.html
      Group:          Applications/Internet
      URL:            https://github.com/midori-browser/core
      
      # Required Information when building package
      # Download source from following URL and rename to core-master.zip.
      #   https://github.com/midori-browser/core/archive/master.zip
      Source0:        core-master.zip
      BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root
      
      # Define tags for package names and building.
      %define cmake cmake
      %define webkitgtk webkit2gtk3
      %define sqlite_libs sqlite-libs
      %if 0%{?el7}
        # CentOS 7 / RHEL 7
        %define cmake cmake3
        %define webkitgtk webkitgtk4
        %define sqlite_libs sqlite
      %endif
      %define debug_package %{nil}
      
      # Dependency information
      Requires: libsoup
      Requires: %{sqlite_libs}
      Requires: gcr
      Requires: %{webkitgtk}
      Requires: json-glib
      Requires: libpeas
      Requires: libarchive
      Requires: libxml2
      BuildRequires:  gcc
      BuildRequires:  %{cmake}
      BuildRequires:  make
      BuildRequires:  intltool
      BuildRequires:  vala
      BuildRequires:  libsoup-devel
      BuildRequires:  sqlite-devel
      BuildRequires:  %{webkitgtk}-devel
      BuildRequires:  gcr-devel
      BuildRequires:  json-glib-devel
      BuildRequires:  libpeas-devel
      BuildRequires:  libarchive-devel
      BuildRequires:  libxml2-devel
      
      # Detail information
      %description
      Midori is a lightweight yet powerful web browser which runs just as well
      on little embedded computers named for delicious pastries as it does on
      beefy machines with a core temperature exceeding that of planet earth. 
      And it looks good doing that, too. Oh, and of course it's free software.
      
      %prep
      %setup -n core-master
      
      %build
      mkdir _build
      cd _build
      %{cmake} -DCMAKE_INSTALL_PREFIX=/usr ..
      %__make
      
      %install
      cd _build
      %make_install
      
      %clean
      rm -rf %buildroot
      
      %post -p /sbin/ldconfig
      
      %postun -p /sbin/ldconfig
      
      %files
      %defattr(-,root,root)
      /usr/bin/*
      /usr/lib64/*
      /usr/share/*
      
      %changelog

      [~/SPECS/midori-core.spec]

    4. パッケージのビルド
      $ rpmbuild -ba <home-dir>/rpmbuild/SPECS/midori-core.spec

Pale Moon (fc36)

Pale Moon は、Mozilla Firefox から派生したマルチプラットフォームの軽量Web ブラウザである。バイナリは tarball で配布されており、いわゆる「ポータブル」 な運用が可能である。

  1. バイナリのダウンロード

    Download Pale Moon for Linux より「ownload x64 - GTK3 tarball (direct download)」のリンクをクリックして 「palemoon-xx.xx.xx.linux-x86_64-gtk3.tar.xz」をダウンロードする。

  2. ファイルの配置

    以下のコマンド(xx.xx.xx はバージョン番号に読み替えること)を実行して、 /opt/palemoon ディレクトリの下にバイナリを配置する。

    # tar xvfJC palemoon-xx.xx.xx.linux-x86_64-gtk3.tar.xz /opt
  3. メニューの設定
    • .desktop ファイルの作成

      /opt/palemoon/palemoon.desktop ファイルに以下の内容を記述する。

      [Desktop Entry]
      Version=1.0
      Type=Application
      Name=Palemoon
      GenericName=Palemoon Web Browser
      Comment=Lightwifht web browser
      Icon=/opt/palemoon/browser/chrome/icons/default/default48.png
      Categories=Network;WebBrowser;
      Exec=/opt/palemoon/palemoon %U
      TryExec=/opt/palemoon/palemoon
    • /usr/share/applications ディレクトリへのリンクの作成

      以下のコマンドを実行して、.desktop ファイルのシボリックリンクを /usr/share/applications ディレクトリの下に作成する。

      # ln -sf /opt/palemoon/palemoon.desktop /usr/share/applications
  4. 日本語化
    1. Pale Moon を起動し、メニューから Tools > Add-ons を選択して、 Add-ons Manager を開く。
    2. 画面上部の検索窓に「Pale Moon Locale Switcher」と入力して、 リターンキーを押す。
    3. 「Pale Moon Locale Switcher」の右端にある「Install」ボタンを クリックして拡張機能をインストールする。
    4. 拡張機能のインストールが終わると、画面右上にロケール切り替えの アイコンが表示されるので、それをクリックして「Get more Pale Moon language packs」を選択して、「Language Packs」のページを開く。
    5. 「Japanese (JP)」をクリックして、日本語の language pack のページを 開き、画面下部の「Install Now」ボタンをクリックして language pack を インストールする。
    6. language pack のインストールが終わったら、ロケール切り替えの アイコンをクリックして、「ja - japanese」を選択する。

livecd-tools (fc33)

livecd-toolsは、Live CD の ISO イメージを作成したり、Live CD の ISOイメージ から Live USB を作成したりするためのツールのパッケージである。

livecd-toolsのインストール

# dnf install livecd-tools

livecd-creator の使い方

livecd-creator は、kickstart ファイルに記述された内容から Live CD の ISO イメージを生成するためのコマンドである。

  1. Kickstart ファイルの入手

    以下のコマンドを実行して、spin-kickstartsをインストールする。

    # dnf install fedora-kickstarts
  2. Kickstart ファイルの編集

    最小構成のイメージを作成する場合

    1. Kickstart ファイルのコピー

      /usr/share/spin-kickstarts ディレクトリから以下のファイルを作業 ディレクトリにコピーする。

      • fedora-live-base.ks
      • fedora-live-minimization.ks
      • fedora-repo.ks
      • fedora-repo-not-rawhide.ks
    2. Kickstartファイルの作成

      作業ディレクトリに拡張子 .ks のファイル(例:fedora-live-server.ks) を作成し、以下の内容を設定する。

      • コマンドセクションの設定

        %packages セクション(%packages で始まり、%end で終わる部分)の前に Kickstart コマンドを記述して、以下の項目を設定する。

        • Kickstart ファイルのインクルード

          作成した Kickstart に取り込む Kickstart ファイルを 「%include file-path」の形式で指定する。以下の Kickstart ファイルを インクルードすること。

          • fedora-live-base.ks
          • fedora-live-minimization.ks
        • 言語、キーボード、タイムゾーンの設定
        • パーティションの作成
      • %packages セクションの設定

        fedora-live-base.ks に設定されたパッケージに追加してインストールする パッケージ、グループを以下の形式で指定する。

        • [-]package-name

          指定したパッケージをインストールする。package-name の前に「-」を 付けると、そのパッケージは除外される。

        • [-]@group-name

          指定したグループをインストールする。「@group-name」の前に「-」を 付けると、そのグループは除外される。

      • %post セクション

        %post セクションは、ISOイメージのインストール後に、システムが再起動前に 実行する処理を記述するセクションである。

        • fedora-live-xfce.ks の %post セクションをコピーする。liveuser で auto login できるようになる。
      • Kickstart ファイルの例

        GUI の最小構成の Kickstart ファイルの例を以下に示す。

        # fedora-live-server.ks
        #
        # Description:
        # - Fedora Live Server with minimum XFCE Desktop Environment
        
        %include fedora-live-base.ks
        %include fedora-live-minimization.ks
        
        lang ja_JP.UTF8
        keyboard jp
        timezone Asia/Tokyo
        
        # Create EFI and root partishons.
        part / --size 20480 --fstype ext4
        
        %packages
        # Install xfce minimal packages.
        xfce4-panel
        xfce4-session
        xfce4-settings
        xfdesktop
        xfwm4
        xfce4-terminal
        Thunar
        @networkmanager-submodules
        network-manager-applet
        adwaita-gtk2-theme
        adwaita-icon-theme
        xfce4-screensaver
        xfce4-notifyd
        # Utitlities, etc
        extundelete
        testdisk
        telnet
        @admin-tools
        gkrellm
        midori
        bash-completion
        %end
        
        %post
        <fedora-live-xfce.ks の %post セクション>
        %end

        [fedora-live-server.ks]

        備 考

        この Kickstart ファイルから生成した ISO イメージを実行する場合は、 liveuser でログインし(パスワードの入力は不要)、 「LANG=ja_JP.UTF8 startx」コマンドを実行して、XWindow を開くこと。

    3. Kickstartファイルの編集
      • fedora-repo.ks

        fedora-repo-not-rawhide.ks をインクルードするように編集する。

        # For the master branch the following should be uncommented
        #%include fedora-repo-rawhide.ks
        
        # For non-master branches the following should be uncommented
        %include fedora-repo-not-rawhide.ks

        [fedora-repo.ks]

    Fedora Xfce Spin をカスタマイズする場合

    • 「最小構成のイメージを作成する場合」と同様な手順だが、Kickstart ファイルを作成する代わりに、/usr/share/spin-kickstarts ディレクトリ から fedora-live-xfce.ks、fedora-xfce-common.ks ファイルをコピーして、 fedora-live-xfce.ks を編集する。

    system-config-kickstart

    • system-config-kickstart パッケージをインストールして、 「system-config-kickstart」コマンドを実行すると、kickstart ファイルの 設定画面が起動する。ただし、Fedora 29 より system-config-kickstart パッケージが廃止されている。
    参考文献
  3. live CD の ISO イメージ作成

    Fedora24以前の場合は、linuxのbootパラメータの「root=」の後ろに「selinux=0」 を指定してシステムを再起動する。

    Kickstart ファイルを配置したディレクトリに移動して、以下のコマンドを実行し、 Live USBのISOイメージを作成する。

    # livecd-creator --verbose [--releasever=<fedora-version>] \
      --config=fedora-live-server.ks --fslabel=<拡張子を除くISO-image-path> \
      [--cache=<cach-dir>] [--tmpdir=<temp-dir>]
    • Fedora Xfce Spin をカスタマイズする場合は、--config= に fedora-live-xfce.ks を指定する。
    • --cache、--tmpdirを省略すると、それぞれ/var/cache、/var/tmp を使用する
    • 64bitマシン上で32bit用のISOイメージを作成する場合は、livecd-creator コマンドの前に「setarch i686」を付けて「setarch i686 livecd-creator ...」 のようにコマンドを実行する
参考文献

livecd-iso-to-disk の使い方

livecd-iso-to-disk は、Live CD の ISO イメージ の内容をディスクに書き込む ツールである。Live CD の ISO イメージから Live USB を作成する手順を以下に 示す。

注 意

livecd-iso-to-disk ディスクコマンドで「--efi --format --reset-mbr」 オプションを指定する場合は、下記の1〜3の手順は不要である。

  1. USBデバイスのフォーマット
    1. root権限のユーザーでfdiskコマンドを実行する。
    2. 「g」コマンドを実行してGPTパーティションテーブルを作成する。
    3. 「n」コマンドでパーティションを作成し、「t」コマンドで 「1」を選択して、「EFI System」パーティションを作成する。
    4. 「x」→「A」コマンドで「EFI System」パーティションの番号を 入力し、パーティションに起動許可フラグを設定する。
    5. 「r」コマンドでメインメニューに戻る。
    6. 「w」コマンドで設定内容を保存してfdiskを終了する。
  2. EFI System パーティションのフォーマット

    「mkdosfs -n volume名 /dev/partition-device」を 指定して、EFI System パーティションをFAAT32でフォーマットする。

  3. EFI Systemパーティションのパーティション名の設定

    以下の手順を実行して、EFI Systemパーティションの名前を 「EFI System Partition」に設定する。

    1. root権限のユーザーで 「parted /dev/パーティション番号なしのデバイス名」を実行する。
    2. 「name パーティション番号 'EFI System Partition'」 (パーティション番号はEFI Systemパーティションの番号を指定する)を 実行して、パーティションの名前を設定する。
    3. 「quit」コマンドを実行して、partedを終了する。
  4. Live USBイメージの書き込み

    root権限のユーザーで以下のコマンドを実行して、Live USBのISOイメージを USBデバイスに書き込む。

    • 事前に USB デバイスに EFI System パーティションが作成済みの場合
      # livecd-iso-to-disk --efi --overlay-size-mb <size> <iso-image-path> \
        <usb-part-device>
    • USB デバイスをフォーマットして ISO イメージを書き込む場合
      # livecd-iso-to-disk --efi --format --reset-mbr --overlay-size-mb <size> \
        <iso-image-path> <usb-device>

    例えば、USB デバイス /dev/sdb をフォーマットして、4GB の Persistent Storage を作成し、Live USBのイメージファイル「Fedora-Xfce-Live-x86_64-1.2.iso」を 書き込む場合は、以下のコマンドを実行する。

    # livecd-iso-to-disk --efi --format --reset-mbr --overlay-size-mb 4095 \
      Fedora-Xfce-Live-x86_64-1.2.iso /dev/sdb
    備 考

    EFI パーティションを使用する場合、EFI パーティションは vfat (FAT32)で フォーマットする必要があるため、ファイルは 4GB (4095 MB)を超えることは できない。従って、--overlay-size-mb に設定できる値の上限は 4095 となる。

参考文献

Locale and Timezone settings (fc36)

Locale の設定

現在の locale の設定内容の確認
$ localectl status
言語の設定
  • 設定可能な言語の確認
    $ localectl list-locales
  • 言語の設定
    1. 依存パッケージのインストール

      「設定可能な言語の確認」で、「ja_JP.UTF-8」が表示されなかった場合は、 以下のコマンドを実行して、glibc-langpack-ja パッケージをインストールする。

      # dnf install glibc-langpack-ja
    2. 日本語の言語設定

      以下のコマンドを実行して、言語に ja_JP.UTF-8 を設定する。

      # localectl set-locale LANG=ja_JP.UTF-8
キーボードの設定
  • 設定可能な Keymap の確認
    $ localectl list-keymaps
  • 日本語キーボードの設定

    以下のコマンドを実行して、「設定可能なキーボードの確認」で表示された Keymap の中から Keymap を選択して、日本語キーボードの設定をする。

    # localectl set-keymap {jp|jp106}

Timezone の設定

timezone の設定は、シンボリックリンク /etc/localtime のリンク先を切り換える ことで設定するが、systemd パッケージに含まれる timezonectl コマンドで設定 することもできる。

  • 設定可能な Timezone の確認
    $ timedatectl list-timezones
  • Timezone の設定
    # timedatectl set-timezone Asia/Tokyo

logrotate (fc41)

logrotate は、/etc/logrotate.conf および /etc/logrotete.d ディレクトリ配下の 設定ファイルの設定に従ってログファイルのローテーションや圧縮を行なうサービス である。標準出力やエラー出力をログファイルにリダイレクトしている場合は、 logrotate によりログライルをローテーションすべきである。

パッケージのインストール

以下のコマンドを実行して、パッケージをインストールする。

# dnf install logrotate

SELinuxのポリシー設定

logrotate.service の 既定の設定では、「ProtectSystem=full」となっているため、 /usr、/etc、ブートローダーディレクトリ配下のディレクトリは、logrotate に 対して読み取り専用でマウントされる。そのため、logrotate によるログの ローテーションが失敗する。この問題に対応する方法は、ログの出力先を /usr、/etc 以外のディレクトリ(ブートローダーディレクトリを除く)に変更した上で、以下の 何れかの SELinux の設定をする。

  • ログ出力先のディレクトリとその下に配置されるファイルに対して、SELinuxの ラベル「var_log_t」を設定する
  • ファイルに対する logrotate の操作を許可するポリシーを作成して適用する
参考文献
SELinuxの var_log_t ラベルの設定

/var/log/myapp ディレクトリに出力されるログに対して、logrotate を実行する 場合は、/var/log/myapp ディレクトリおよびその配下のファイルに対して、 SELinuxの「var_log_t」ラベルを設定する必要がある。SELinux のラベルを設定する コマンドは以下のとおりである。

# semanage fcontext -a -t var_log_t "/var/log/myapp/.*"
# restorecon -R -v /var/log/myapp
ファイルに対する logrotate の操作を許可するポリシーの作成と摘要
  1. te ファイルの作成

    作業ディレクトリで、my-logrotate.te ファイルを作成して、以下の内容を記述 する。

    [my-logrotate.te]

    module my-logrotate 1.0;
    require {
      attribute logrotate_t;
      attribute usr_t;
      class dir {write remove_name add_name};
      class file {rename create write unlink setattr};
    }
    #============= logrotate_t ==============
    allow logrotate_t usr_t:dir {write remove_name add_name};
    allow logrotate_t usr_t:file {rename create write unlink setattr};
  2. 以下のコマンドを実行して、モジュールの作成とインストールをする。
    $ checkmodule -m -o my-logrotate.mod my-logrotate.te
    $ semodule_package -o my-logrotate.pp -m my-logrotate.mod
    $ sudo semodule -i my-logrotate.pp

設定ファイルの書式

<global-option>
...
<logfile-path> {
  <option>
  ...
}
<logfile-path> {
   <option>
   ...
}
...
  • global-option

    すべてのログファイルに適用される option

  • logfile-path

    ログファイルのパスを指定する。シェルと同様の目的で「~」「*」を指定する ことが可能。

  • option (主なもの)
    {hourly|daily |weekly|monthly |yearly} ログファイルを時間/日/週/月/年ごとに新しい世代に する
    rotate num ログファイルを残す世代の数を指定する
    size num[k|M|G] ログファイルのサイズが num バイトを越えたら新しい 世代にする。k/M/G の単位を指定できる
    dateext 変更したログファイルの拡張子を番号ではなく日付にする。 規定では「.」の後に年月日の8桁の数値である
    dateformat dateext オプションを指定した場合に、拡張子の書式を指定 する。書式の指定には %Y %m %d %H %M %S %V %s %z の書式 指定文字を使用する。書式指定文字の意味は、下記 「書式指定文字の説明」を参照のこと
    missingok ログファイルが存在しない場合でもエラーとしない
    notifempty ログファイルが空(0バイト)の場合はファイル名を変更 しない
    create mode owner group ログファイルの名前を変更した後に新しく作成されたログ ファイルのモード、オーナー、グループを指定する
    nocompress 古い世代のログファイルを圧縮しない
    olddir dir 古い世代のログファイルを dir ディレクトリに配置する
    mail mail-addr ログファイルが新しい世代に切り替わったら mail-addr にメールを送信する
    sharedscripts ワイルドカードでログが複数指定された場合、prerotate、 postrotate で指定されたスクリプトは1度しか実効しない
    postrotate 
    script 
    ... 
    endscript 
    新しい世代のログファイルが作成された後に、postrotate とendscriptの間に記述されたスクリプトを実行する。 スクリプトの第1引数にログファイルの絶対パスが渡される
    • 書式指定文字の説明

      dateformat オプションで指定可能な書式指定文字列は、Linux の 「date +FORMAT」コマンドで指定するものと同じである。

      • %Y 年 (4桁)
      • %m 月 (2桁)
      • %d 日 (2桁)
      • %H 時 (2桁)
      • %M 分 (2桁)
      • %S 秒 (2桁)
      • %V 01から始まる週番号 (2桁)
      • %s 1970-01-01 00:00:00 UTC からの秒数
      • %z {+|-}hhmm 形式のタイムゾーン

設定ファイルの例

# sample logrotate configuration file
compress

/var/log/messages {
    rotate 5
    weekly
    postrotate
        /usr/bin/killall -HUP syslogd
    endscript
}

"/var/log/httpd/access.log" /var/log/httpd/error.log {
    rotate 5
    mail recipient@example.org
    size 100k
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}

/var/log/news/* {
    monthly
    rotate 2
    olddir /var/log/news/old
    missingok
    sharedscripts
    postrotate
        kill -HUP $(cat /var/run/inn.pid)
    endscript
    nocompress
}

hourly の有効化

規定ではログファイルの最も短い周期は「daily」である。「hourly」の設定を有効に するためには、logrotate.timer の設定を変更する必要がある。

設定の変更は、/etc/systemd/system/logrotate.timer.d ディレクトリの下に override.conf (ファイル名は拡張子が「.conf」であれば何でも良い)を作成し、 以下の内容を設定する。

[/etc/systemd/system/logrotate.timer.d/override.conf]

[Timer]
OnCalendar=hourly
RandomizedDelaySec=5min

「RandomizedDelaySec=」は、毎時0分0秒からの開始遅延秒数(指定した秒数までの間で ランダムに遅延秒数が決められる)を指定するもので、適切な値に設定する。

hourly を有効化したときの注意
  • 既定の実行周期が変わる

    hourly を有効化した場合は、logrotate の設定ファイルに daily, weekly, ... が設定されていない場合の実行周期が daily から hourly に変わることに注意 すること。

  • hourly を指定したときのログファイルの拡張子設定

    規定ではログファイルの拡張子は、dateformatオプションに「-%Y%m%d」が設定 された状態となっている。そのため1日に2回以上ログファイルの名前変更が 発生した場合は、変更するログファイルの名前が重複するためファイル名の変更 に失敗する。その対策として、logrotateの設定ファイルに 「dateformat -%Y%m%d%H」などを設定すること。

参考文献


LVM (fc36) - Logical Volume Manager

LVMで使用される用語

  • PV (Physical Volume)

    物理的なディスクのパーティションに PE が割り当てられた状態。物理ディスクの パーティションをタイプ 8e(Linux LVM)で作成し、そのパーティションのデバイス を指定して、 pvcreate コマンドを実行すると、Physical Volume が作成される。

    pvcreate command

    # pvcreate /dev/<device-name>
  • PE (Physical Extent)

    物理的にデータが格納される塊。デフォルトでは 4MB のサイズになる。

  • VG (Volume Group)

    1つ、または複数の PV で構成された論理的なデータ領域で、従来の物理ディスクに 相当する。vgcreate コマンドを実行することで、VG が作成される。

    vgcreate command

    # vgcreate <VG-name> /dev/<pv-dev-name> [/dev/<pv-dev-name> ...] 

    引数の説明

    • VG-name - Volume Group の名前を指定する
    • /dev/pv-dev-name - Physical Volume が作成されている物理パーティションの デバイス指定する。複数の PV を指定可能。
  • LV (Logical Volume)

    VG を分割した論理的なデータ領域で、カーネルからは通常のブロックデバイスと して認識される。この上にファイルシステムを作成する。lvcreate コマンドを実行 することで、既に作成したVG の上に LV が作成される。

    lvcreate command

    # lvcreate {-L <size>[b|B|s|S|k|K|m|M|g|G|t|T] | -l <num>[%VG|%FREE|%PVS]} \
      -n <LV-name> <VG-name> [/dev/<pv-dev-name> ...]

    引数の説明

    • -L size[b|B|s|S|k|K|m|M|g|G|t|T]

      Logical Volume のサイズを指定する。サイズは数値の後に単位を付けることが 可能で、単位を省略すると「m」を指定したことになる。単位は、bBはバイト、 sSはセクター(512バイト)、kKはキロバイト、mMはメガバイト、gGはギガ バイト、tTはテラバイトを表す。それぞれの単位は2の累乗(iB)である。

      作成する Logical Volume のサイズは -L オプションまたは -l オプションの どちらかを使用して指定すること。

    • -l num[%VG|%FREE|%PVS]

      作成する Logical Extents の個数を指定する。数値の後ろに「%VG」を指定 すると、Volume Group 全体の Physical Extents の個数に対するパーセントと なる。数値の後ろに「%FREE」を指定すると、Volume Group の未割り当ての Physical Extents の個数に対するパーセントとなる。数値の後ろに「%PVS」を 指定すると、引数で指定した Physical Volume の 未割当て のPhysical Extents の個数に対するパーセントになる。

    • -n LV-name

      Logical Volume の名前を指定する。

    • VG-name

      指定した Volume Group の上に Logical Volume を作成する。

    • /dev/pv-dev-name

      Physical Volume が作成された物理パーティションのデバイスを指定する (省略可能)。また複数指定することも可能。Physical Volume を指定すると、 指定された Physical Volume の上に後述する Logical Volume(の Logical Extent)が作成される。

    Logical Volume の指定について

    • /dev/Volume-Group-name/Logical-Volume-name (Logical Volume path)

      LVM 関連のコマンドで Logical Volume を指定する場合は、この形式で指定する。

    • /dev/mapper/Volume-Group-name/Logical-Volume-name

      ブロックデバイスとして参照する場合は、この形式で指定する。

  • LE (Logical Extent)

    Logical Volume を構成するデータの塊で、サイズはこの Logical Extent が属する Volume Group を構成する Physical Extent と同じである。Logical Volume 上に 作成されたファイルシステムのデータは、Logical Extent に対応付けられた Physical Extent に物理的に保管されることになる。

Volume Group を構成する要素の関係を図式化すると以下のようになる。

 +-- vg01 (VG) --------------------------------------------------+
 | +-- /dev/sdb1 (PV) -------+  +-- /dev/sdc1 (PV) ------------+ |
 | | PE | PE | PE | ... | PE |  | PE | PE | PE | ... | PE | PE | |
 | +-------------------------+  +------------------------------+ |
 |   :    :     :         :     __:    :    :          :    :    |
 |   :    :     :         :     :      :    :          :    :    |
 | +------------------------------+  +-------------------------+ |
 | | LE | LE | LE | ... | LE | LE |  | LE | LE | ... | LE | LE | |
 | +-- /dev/vg01/lv01 (LV) -------+  +-- /dev/vg01/lv02 (LV) --+ |
 |            :                                 :                |
 |          ext4 filesystem                    xfs filesystem    |
 +---------------------------------------------------------------+

上図の構成では、Logical Volume の lv01 上に作成された ext4 ファイルシステムの データは、Physical Volume の /dev/sdb1 と /dev/sdc1 にまたがって保存される。 また Logical Volume の lv02 上に作成された xfs ファイルシステムのデータは、 Physical Volume の /dev/sdc1 のみに保存される。

参考文献

Logical Volumeの情報表示

pvdisplay - PV の情報表示
  • コマンドの形式
    # pvdisplay [<PV-name>]

    引数の説明

    • PV-name - Phisical Volumeのデバイス名 (/dev/device-name) を指定する
  • 出力結果
      --- Physical volume ---
      PV Name               /dev/sda3
      VG Name               fedora_xfce
      PV Size               30.41 GiB / not usable 2.00 MiB
      Allocatable           yes (but full)
      PE Size               4.00 MiB
      Total PE              7785
      Free PE               0
      Allocated PE          7785
      PV UUID               ZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZ
vgdisplay - VG の情報表示
  • コマンドの形式
    # vgdisplay [<VG-name>]

    引数の説明

    • VG-name - Volume Group の名前を指定する
  • 出力結果
      --- Volume group ---
      VG Name               fedora_xfce
      System ID             
      Format                lvm2
      Metadata Areas        1
      Metadata Sequence No  3
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                2
      Open LV               2
      Max PV                0
      Cur PV                1
      Act PV                1
      VG Size               30.41 GiB
      PE Size               4.00 MiB
      Total PE              7785
      Alloc PE / Size       7785 / 30.41 GiB
      Free  PE / Size       0 / 0   
      VG UUID               ZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZ
lvdisplay - LV の情報表示
  • コマンドの形式
    # lvdisplay [{<VG-name>|<LV-name>}]

    引数の説明

    • VG-name - Volume Group の名前を指定する
    • LV-name - 「Volume Group名/Logical Group名」の形式で Logical Volume を指定する
  • 出力結果
      --- Logical volume ---
      LV Path                /dev/fedora_xfce/root
      LV Name                root
      VG Name                fedora_xfce
      LV UUID                ZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZ
      LV Write Access        read/write
      LV Creation host, time localhost-live, 2020-01-01 00:00:00 +0900
      LV Status              available
      # open                 1
      LV Size                10.41 GiB
      Current LE             2665
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     256
      Block device           253:0

Logical Volumeの拡大

  1. 物理パーティションのサイズを拡大した場合
    1. PVを拡大する

      サイズを拡大した物理パーティションのデバイスを指定して、pvresize コマンド を実行し、Physical Volume を拡大する。

      # pvresize /dev/<device-name>

      parted コマンド等により、/dev/sda3 パーティションを拡張した後に、 拡張した領域を PE に割り当てて Phisical Volume を拡張する場合は、以下の コマンドを実行する。

      # pvresize /dev/sda3
    2. LVを拡大する

      拡張したPVの物理パーティションを指定して、lvextend コマンドを実行し、 Logical Volume を拡大する。

      [lvextend command]

      # lvextend {-L [+]<size>[b|B|s|S|k|K|m|M|g|G|t|T] | -l [+]<num>[%VG|%FREE|%PVS]} \
        /dev/<VG-name>/<LV-name> /dev/<pv-dev-name>

      引数の説明

      • -L [+]size[b|B|s|S|k|K|m|M|g|G|t|T]

        拡張後の Logical Volume のサイズを指定する。-L オプション、 -l オプションの何れかを指定すること。数値の前に + を指定すると現在の サイズからの増分指定となる。数値の後ろに単位を指定可(省略時はメガ バイト)。単位については、lvcreate command を参照のこと。

      • -l [+]num[%VG|%FREE|%PVS]

        拡張後の Logical Extents の個数を指定する。数値の前に + を指定すると、 現在の値からの増分指定となる。数値の後にパーセントの基準を指定可能 (詳細は、lvcreate command を参照)である。

      • /dev/VG-name/LV-name

        サイズを拡張する対象の Logical Volume を 「/dev/Volume-Group-name/Logical-Volume-name」の形式で指定する。

      • /dev/pv-dev-name

        サイズを拡張した Physical Volume を作成した物理パーティションの デバイスを指定する。

      /dev/sda3 の未割り当てのPEをすべて Logical Volume 「/dev/fedora_xfce/root」の LE に割り当てて Logical Volume を拡張する 場合は、以下のコマンドを実行する。

      # lvextend -l +100%FREE /dev/fedora_xfce/root /dev/sda3
    3. ファイルシステムの拡大

      拡張された Logical Volume の上に作成されているファイルシステムのサイズを 拡張する。ファイルシステムごとのコマンドは、 Disk format and maintenance を参照のこと。

      Logical Volume /dev/fedora_xfce/root の ext4 ファイルシステムのサイズを Logical Volume のサイズまで拡大する場合は、以下のコマンドを実行する。

      # resize2fs /dev/fedora_xfce/root
  2. 物理パーティションを追加した場合
    1. PV の作成

      新規に作成した物理パーティションのデバイスを指定して pvcreate コマンドを 実行し、新規に作成した物理パーティションに Physical Volume を作成する。

      # pvcreate /dev/<new-part-name>
    2. PV を VG に追加

      追加対象の Volume Group の名前と、新規に追加した Physical Volume を 指定して vgextend コマンドを実行する。

      # vgextend <VG-name> /dev/<pv-dev-name> [/dev/<pv-dev-name> ...]

      指定する引数は、vgcreate command と同様である。

    3. LVを拡大

      新規に作成した PV の物理パーティションを指定して、lvextend コマンドを 実行し、Logical Volume を拡大する。lvextend command の説明は、 「物理パーティションのサイズを拡大した場合」を参照のこと。

      以下のコマンドは、新規に作成した物理パーティションの領域全てを Logical Volume に追加する場合の例である。

      # lvextend -l +100%PVS /dev/<VG-name>/<LV-name> /dev/<pv-dev-name>
    4. ファイルシステムを拡大

      拡張された Logical Volume の上に作成されているファイルシステムのサイズを 拡張する。ファイルシステムごとのコマンドは、 Disk format and maintenance を参照のこと。

参考文献

Logical Volumeの縮小

  1. ファイルシステムの縮小

    縮小対象の Logical Volume の上に作成されているファイルシステムのサイズを 縮小する。ファイルシステムごとのコマンドは、 Disk format and maintenance を参照のこと。

  2. LVの縮小
    1. 以下のように lvchange コマンドを実行して、縮小対象の Logical Volume を inactive にする。
      # lvchange -an /dev/<VG-name>/<LV-name>
    2. lvreduce コマンドを実行して、Logical Volume のサイズを縮小する。
      # lvredule {-L [-]<size>[b|B|s|S|k|K|m|M|g|G|t|T] | -l [-]<num>[%VG]} \
        /dev/<VG-name>/<LV-name>

      引数の説明

      • -L オプション

        縮小後のサイズ指定する。数値の前に「-」を付けると、現在のサイズから縮小 するサイズの指定となる。数値の後に指定する単位については、 lvcreate command を参照のこと。

      • -l オプション

        縮小後の Physical Extent の個数を指定する。数値の前に「-」を付けると、 現在から減らす個数の指定となる。数値の後ろに「%VG」を指定すると、 Volume Group 全体の PE の個数に対するパーセントの指定となる。

    3. 以下のように lvchange コマンドを実行して、縮小対象の Logical Volume を active にする。
      # lvchange -ay /dev/<VG-name>/<LV-name>
  3. PVの縮小

    pvresize コマンドを実行いて、Physical Volume のサイズを縮小する。

    # pvresize --setphysicalvolumesize <size>M /dev/<pv-dev-name>

    引数の説明

    • --setphysicalvolumesize sizeM

      縮小した後の Physical Volume のサイズを MiB 単位で指定する。サイズは (割当済PE数+1) × PEサイズ(MiB) = (割当済PE数+1) × 4 で算出する。

    • /dev/pv-dev-name

      縮小対象の Physical Volume が作成された物理パーティションのデバイスを指定 する。

  4. 物理パーティションの縮小

    parted コマンド(Disk format and maintenance を参照)等を使用して、 縮小した Physical Volume が作成された物理パーティションのサイズを変更する。 パーティションの最後のセクタ数は 「開始セクタ + (割当済PE数 + 1)* 4 * 1024 * 1024 / 512」 で算出すると良い。

参考文献

Physical Extent の移動(ディスクの移設)

boot パーティションを含むディスクの全ての物理パーティションを、新設した ディスクに移す手順の例を示す。

  1. 前提

    移設前のディスク(容量40GiB)の割当て状況状況は下記の通り。

    $ lsblk /dev/sda
    NAME                 MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    sda                    8:0    0  40G  0 disk 
    ├─sda1                 8:1    0   1G  0 part /boot
    └─sda2                 8:2    0  39G  0 part 
      ├─fedora-root      253:0    0  20G  0 lvm  /
      └─fedora-home      253:2    0  19G  0 lvm  /home
  2. 移設後のディスクの準備
    1. 物理パーティションの作成

      40GiBの(仮想)ディスクをシステムに接続して、fdisk コマンドを実行して、 以下のパーティションを作成する。

      • /dev/sdb1 容量:1GiB、タイプ:83(Linux)
      • /dev/sdb2 容量:39GiB、タイプ:8e(Linux LVM)
    2. Physical Extent の作成

      移設後のディスクの Linux LVM パーティションに PEを作成する。

      # pvcreate /dev/sdb2
    3. Physical Extent を Volume Group に追加

      移設後のディスクに作成した PE を既存のVG に追加する。

      # vgextend fedora /dev/sdb2
    4. 移設前後のパーティションサイズの確認
      • 移設前後のディスク(/dev/sda、/dev/sdb)を指定して、それぞれ fdisk コマンドを実行し、それぞれの Linux LVM パーティション(/dev/sda2、 /dev/sdb2)に割り当てたセクタサイズを確認する。
      • 移設後の Linux LVM パーティションのセクタサイズが、移設前のものより 小さい場合は、LV(/dev/fedora/home)の縮小、つまりファイルシステム、 LV、PV の縮小を行なって、移設元の LE の個数が移設後の割当可能な PE の 個数(セクタサイズ * 512 / 4 / 1024 / 1024)を上回らないようにしておく こと。
  3. PEの移動

    pvmove コマンドを実行して、移設前ディスクの PV に配置された PE を移設後の ディスクの PV に移動する。

    # pvmove /dev/sda2 /dev/sdb2

    コマンドの実行が終わったら、移設前の PV(/dev/sda2)を指定して pvdisplay コマンドを実行し、「Total PE」と「Free PE」の値が同じ(全てのPEが未割り当て となっている)ことを確認する。

  4. 移設前の PV を VG から除外
    # vgreduce fedora /dev/sda2

    ここまでの操作で、移設元のディスクに配置されていた PV が移設先のディスクに 移動した。

  5. boot パーティションのコピーと設定
    1. 移設後の boot パーティションにファイルシステムを作成
      # mke2fs -t ext4 /dev/sdb1
    2. boot パーティションの内容のコピー

      移設後の boot パーティションをマウントして、移設前の boot パーティション の内容をマウントしたディレクトリにコピーする。

      # mount /dev/sdb1 /mnt
      # cp -afv /boot/* /mnt
    3. /etc/fstab の編集
      1. 「lsblk -f /dev/sdb1」を実行して、「/boot」にマウントする パーティション(/dev/sdb1)の UUID を確認する。
      2. 確認した UUID を /etc/fstab の 「/boot」にマウントする設定の 「UUID=」に設定する。
      3. システムを再起動する。
      1. 新しい boot パーティションで grub2 の設定を更新し、切り替え後の ディスクに boot loader をインストールする。
        # grub2-mkconfig -o /boot/grub2/grub.cfg
        # grub2-install /dev/sdb
      2. fdisk で /dev/sdb1 に起動可能フラグを有効に切り替える。

Mattermost (fc41) - platform for secure collaboration

Mattermost Desktop

tarballによるインストール
  1. tarballのダウンロード
    1. https://mattermost.com/download/ にアクセスして、「Desktop Apps」 のSource Code リンクをクリック して GitHub のサイトを開き、画面右側の Releases リンクを クリックする。
    2. 目的のバージョンの Linux から mattermost-desktop-x.xx.x-linux-x64.tar.gz ファイルをダウンロードする。
  2. Mattermost Desktop のインストール
    1. tarballの解凍とシンボリックリンクの作成

      以下のコマンドを実行して、/opt ディレクトリの下にダウンロードした tarball ファイルを解凍し、シンボリックリンクを作成する。

      # cd /opt
      # tar xvfzC mattermost-desktop-x.xx.x-linux-x64.tar.gz
      # ln -sf mattermost-desktop-x.xx.xx-linux-x64 mattermost-desktop
    2. chrome-sandbox ディレクトリの権限設定

      /opt/mattermost-desktop-x.xx.xx-linux-x64 ディレクトリに移動して以下の コマンドを実行し、chrome-sandbox ディレクトリのオーナーと権限を設定する。

      # chown root:root chrome-sandbox
      # chmod 4755 chrome-sandbox
    3. 起動メニューの作成と配置
      1. 作業ディレクトリに移動して以下のコマンドを実行し、 Mattermost.desktop ファイルを作成する。
        # /opt/mattermost-desktop/create_desktop_file.sh
      2. Mattermost.desktop ファイルを以下のように編集する。
        • Exec 及び Icon のパスの設定

          「/opt/mattermost-desktop-x.xx.xx-linux-x64/」を 「/opt/mattermost-desktop/」に変更する。

        • 作業ディレクトリの設定追加

          以下の行を追加して、アプリケーションの作業ディレクトリを 「/opt/mattermost-desktop」に設定する。

          Path=/opt/mattermost-desktop

        [Mattermost.desktop の設定例]

        [Desktop Entry]
        Name=Mattermost
        Comment=Mattermost Desktop application for Linux
        Path=/opt/mattermost-desktop
        Exec="/opt/mattermost-desktop/mattermost-desktop" %U
        Terminal=false
        Type=Application
        MimeType=x-scheme-handler/mattermost
        Icon=/opt/mattermost-desktop/app_icon.png
        Categories=Network;InstantMessaging;
      3. 以下のコマンドを実行して、Mattermost.desktop ファイルを /usr/share/applications ディレクトリに配置する。
        # mv Mattermost.desktop /usr/share/applications/
参考文献

Mattermost Server

tarballによるインストール

mDNS (fc40) - multicast dns

mDNS (multicast dns) は zero-configuration(設定不要)の名前解決サービスである。

パッケージのインストール

  1. 以下のコマンドを実行して、パッケージをインストールする
    # dnf install avahi nss-mdns
  2. 以下のコマンドを実行して、mdns の受信を許可する
    # firewall-cmd --permanent --add-service mdns
    # firewall-cmd --reload
  3. 以下のコマンドを実行して、avahi-daemon サービスを有効にする
    # systemctl enable --now avahi-daemon

avahi-daemon サービスが有効になると、システム起動時に /usr/sbin/avahi-daemon が起動され、UDPポート 5353 でリクエストを待ち受ける。このデーモンは、システム 起動時に、「hostnamectl set-hostname <ホスト名>」コマンドによって設定された ホスト名とIPアドレスを他のホストに通知し、通知されたavahi-daemonサービスは 通知された内容をキャッシュに保持する。

mDNSのドメイン名変更

mDNSは、ドメイン名を「local」に固定している。mDNSが管理するドメイン名を変更 する手順は以下のとおりである。

  1. avahi-daemon.conf の編集

    /etc/avahi/avahi-daemon.conf を編集して以下のように変更する。

    • domain-name=<ドメイン名>

      ホスト名を登録するときのドメイン名の既定値を設定する

    • browse-domains=<ドメイン名1>, <ドメイン名2>, ...

      「domain-name=」で指定したドメイン以外のホストも mDNS で名前解決したい場合は 「domain-name=」で指定したドメインも含めて、対象のドメインをコンマ区切りで 指定する。

    設定例

    mDNSで管理するドメイン名を「mydomain」に設定、他に「yourdomain」も mDNSで 名前解決する場合は、以下のように設定する。

    domain-name=mydomain
    browse-domains=mydomain, yourdomain
  2. mdns.allow の設定

    /etc/mdns.allow を編集して、nss-mdns (mDNSのライブラリ)がホスト名の名前 解決の対象とするドメイン名を指定する。

    設定例

    「mydomain」、「yourdomain」を名前解決の対象とする場合は、以下のように設定 する。

    .mydomain.
    .mydomain
    .yourdomain.
    .yourdomain
  3. nsswitch.conf の設定

    /etc/nsswitch.conf を編集して、「hosts:」を以下のように編集する。

    • [NOTFOUND=return] を削除する
    • mdns4_minimal の代わりに mdns4を 追加する
      設定例

      nss-mdns パッケージをインストールすると、「hosts:」が以下のように設定 されている。

      hosts:      files mdns4_minimal [NOTFOUND=return] dns myhostname

      これを以下のように修正する。

      hosts:      files mdns4 dns myhostname
      解 説

      「mdns4_minimal」は、ホスト名のIPv4を取得する際、ホスト名の最後が 「.local」で無い場合は名前解決を行わないことを指定している。また、 「[NOTFOUND=return]」は、ホスト名の名前解決ができない場合は処理を中断する ことを指定している。

      そこで、「mdns4_minimal」による名前解決が失敗した場合に、「mdns4」で ホスト名の最後が「.local」以外の場合も名前解決を実行するように、上記の 修正を行った。

  4. ホスト名の設定

    以下のコマンドを実行して、ホスト名を設定する。なお、ホスト名の指定はドメインを 付けないこと。

    # hostnamectl set-hostname <ホスト名>
  5. avahi-daemonの再起動

    以下のコマンドを実行して、avahi-daemonを再起動する。

    # systemctl restart avahi-daemon

local ドメインの設定について

localドメイン(avahi-daemonの既定のドメイン)の場合は、基本的には下記の設定 ファイルは既定値のままで利用可能である(/etc/mdns.allow は不要)。

  • /etc/avahi/avahi-daemon.conf
  • /etc/nsswitch.conf

但し、ネットワーク・インターフェースが複数存在する場合は、仮想環境によっては 名前解決がうまく行えない場合があるので、その場合は以下の設定を行うこと。

  • /etc/avahi/avahi-daemon.conf

    「allow-interfaces=」に名前解決のIPアドレスが設定されているネットワーク・ インターフェースの名前を設定する。

  • /etc/mdns.allow

    下記の内容を設定する。

    .local.
    .local

その他

参考文献
備 考

avahi-daemon起動時にエラー 「iface.c: avahi_server_add_address() failed: Not supported」が発生する場合

システムが起動してから、avahi-daemon サービスを再起動するとエラーが解消する 場合は、ネットワークがオンラインになった後にサービスを起動するように avahi-daemon サービスの unit ファイルを編集する。

[Unit]
...
After=network-online.target  ← この設定を追加

[Service]
...

avahi-tools

avahi-tools パッケージは、avahi-daemon の挙動を確認するためのコマンドを 提供する。

  1. パッケージのインストール

    以下のコマンドを実行して、パッケージをインストールする。

    # dnf install avahi-tools

Micrsoft Teams}(fc34)

パッケージのインストール

  1. パッケージのダウンロード

    https://www.microsoft.com/ja-jp/microsoft-teams/download-appから 「Linux RPM (64ビット)」をダウンロードする。

  2. パッケージのインストール

    パッケージをダウンロードしたディレクトリに移動して、パッケージ (rpmファイル)をインストールする。

    # dnf install ./teams-x.x.xx.xxxxx-x.x86_64.rpm

Microsoft Teams のアカウント作成

  1. https://www.microsoft.com/ja-jp/microsoft-teams/group-chat-software より「無料でサインアップ」をクリックする
  2. 「仕事と組織向け」を選択してアカウントを作成する。

テスト通話の実行

  1. Teams を開き、画面上部の「...」をクリックして「設定」を選択する
  2. 「デバイス」を選択して「テスト通話を開始」をクリックする
  3. ビデオと音声の確認をする

USBヘッドセットを使用してビデオ会議に参加する手順

  1. (Xfceデスクトップ環境の場合)「PulseAudio 音量調節」を開き、出力 デバイス、入力デバイスを以下のように設定する。
    • 出力デバイス:USB PnP Audio Device の 「消音」を無効にして、「代替として 設定」を有効にする。
    • 入力デバイス:USB PnP Audio Device の 「消音」を無効にして、「代替として 設定」を有効にする。
  2. Microsoft Teams の「設定」⇒「デバイス」を開き、スピーカー、マイクを 以下のように選択する。
    • スピーカー:USB PnP Audio Device
    • マイク:USB PnP Audio Device

トラブルシューティング

「アカウントにサインイン」の画面が真っ白になる

Windows版でも発生する事象のようである。 以下のディレクトリ(キャッシュ)を削除することで解消した。

  • ~/".config/Microsoft/Microsoft Teams"
  • ~/".config/Microsoft Teams - Preview"

MuseScore (fc27) - music sheet notation editor

パッケージのインストール

以下のコマンドを実行して、パッケージをインストールする。

# dnf install mscore

使い方

参考文書(リンク)


netsurf building (fc33) - light weight browser

netsurfはGPLv2ライセンスの軽量Webブラウザである。Fedoraでは netsurf パッケージが提供されているが、CentOSではパッケージが提供されていないため、 netsorf のRPMパッケージビルド手順を以下に示す。

  1. ソースファイルのダウンロード

    https://www.netsurf-browser.org/downloads/gtk/ より netsurf-all-3.x.tar.gz をダウンロードする。

  2. ビルドに必要なパッケージのインストール

    RPMパッケージのビルドに必要な以下のパッケージをインストールする。

    • bison
    • curl-devel
    • expat-devel
    • flex
    • gcc
    • gperf
    • gtk2-devel
    • libjpeg-turbo-devel
    • libpng-devel
    • librsvg2-devel
    • make
    • openssl-devel
    • perl
    • perl-Archive-Tar
    • perl-Archive-Zip
    • perl-HTML-Parser
    • perl-Digest-MD5
    • vim-common
    • zlib-devel

    ビルドに必要なパッケージをインストールするコマンドは以下のとおり。

    # dnf install bison curl-devel expat-devel flex gcc gperf gtk2-devel \
          libjpeg-turbo-devel libpng-devel librsvg2-devel make openssl-devel perl \
          perl-Archive-Tar perl-Archive-Zip perl-HTML-Parser perl-Digest-MD5 \
          vim-common zlib-devel
    注 意

    CentOS 8 の場合は、 PowerTools リポジトリを有効化 してからパッケージをインストールすること。

    CentOS 7 の場合は、dnf コマンドの代わりに yum コマンド(引数は変わらない) を実行してパッケージをインストールする。

  3. specファイル
    # Basic information
    Name:           netsurf
    Version:        3.10
    Release:        1%{?dist}
    Summary:        NetSurf is a free, open source web browser.
    License:        GPLv2
    # See available group at https://vinelinux.org/docs/vine6/making-rpm/group-list.html
    Group:          Applications/Internet
    URL:            https://www.netsurf-browser.org/
    
    # Required Information when building package
    Source0:        http://download.netsurf-browser.org/netsurf/releases/source-full/netsurf-all-%{version}.tar.gz
    BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root
    
    # Define tags for package names and building.
    %define debug_package %{nil}
    
    # Dependency information
    Requires:       bzip2-libs
    Requires:       expat
    Requires:       gtk2
    Requires:       libcurl
    Requires:       libjpeg-turbo
    Requires:       libpng
    Requires:       librsvg2
    Requires:       openldap
    Requires:       openssl-libs
    Requires:       xz-libs
    Requires:       zlib
    BuildRequires:  bison
    BuildRequires:  curl-devel
    BuildRequires:  expat-devel
    BuildRequires:  flex
    BuildRequires:  gcc
    BuildRequires:  gperf
    BuildRequires:  gtk2-devel
    BuildRequires:  libjpeg-turbo-devel
    BuildRequires:  libpng-devel
    BuildRequires:  librsvg2-devel
    BuildRequires:  make
    BuildRequires:  perl
    BuildRequires:  perl-Archive-Tar
    BuildRequires:  perl-Archive-Zip
    BuildRequires:  perl-HTML-Parser
    BuildRequires:  perl-Digest-MD5
    BuildRequires:  vim-common
    BuildRequires:  zlib-devel
    
    # Detail information
    %description
    NetSurf's GTK front end works on systems that provive a Unix-like environment,
    such as Linux, FreeBSD, NetBSD, Solaris and others. If your distribution
    packages NetSurf, you can use that. Otherwise you can download and build the
    source code.
    
    %prep
    %setup -q -n %{name}-all-%{version}
    touch configure && chmod +x configure
    
    #%patch0
    
    %build
    %configure
    %__make PREFIX=/usr
    
    %install
    %make_install PREFIX=/usr
    %__install -D -m 0755 -t %{buildroot}%{_datadir}/applications netsurf/frontends/gtk/res/netsurf-gtk.desktop
    %__ln_s netsurf-gtk2 %{buildroot}%{_bindir}/netsurf-gtk
    
    
    %clean
    rm -rf %buildroot
    
    %post -p /sbin/ldconfig
    
    %postun -p /sbin/ldconfig
    
    %files
    %defattr(-,root,root)
    %license netsurf/resources/en/licence.html
    %{_bindir}/*
    %{_datadir}/*
    
    %changelog
    # See https://download.netsurf-browser.org/netsurf/releases/ChangeLog.txt

    [~/rpmbuild/SPECS/netsurf.spec]

  4. パッケージのビルド
    $ rpmbuild -ba --with=nss --without=openssl <home-dir>/rpmbuild/SPECS/netsurf.spec

Network Configurations (fc32)

ネットワーク設定の動向

従来はネットワークの設定は、ifconfig コマンドの実行や、 /etc/sysconfig/network-scripts ディレクトリの下に配置されたネットワーク・ スクリプトを直接編集していたが、最近は Network Manager のコマンドである nmcli や、GUIの nm-connection-edhitor で設定されるようになっている。

静的ルートの設定

  • nmcli コマンドによる設定

    nmcliを参照のこと。

  • ネットワーク・スクリプトへの設定

    Red Hat Linux 6 のように nmcli コマンドが使用出来ない場合は、 インターフェースごとの静的ルート設定ファイルに静的ルートを設定することが 可能である。静的ルートの設定ファイルは、/etc/sysconfig/neetwork-scripts ディレクトリの下に「route-device-name」のファイル名で格納されている。

    1. ip route コマンド形式による設定

      以下の書式でネットワーク(ip/prefix)、送信先(ゲートウェイ・ ルーター、またはネットワーク・インターフェース)のIPアドレス (next-hop)、ネットワーク・インターフェース(device-name)を設定 する。

      <ip>/<prefix> via <next-hop> dev <device-name>

      例えば、インターフェース eth0 に対して以下のルートを設定する場合は、

      • 10.10.10.0/24 => 192.168.0.1
      • 172.16.1.0/24 => 192.168.0.1

      /etc/sysconfig/network-scripts/route-eth0 ファイルに以下の設定をする。

      10.10.10.0/24 via 192.168.0.1 dev eth0
      172.16.1.0/24 via 192.168.0.1 dev eth0
    2. ネットワーク/ネットマスク指示文の形式による設定

      以下の書式でネットワーク(ip/net-mask)、送信先(ゲートウェイ・ ルーター、またはネットワーク・インターフェース)のIPアドレス(next-hop) を設定する。ADDRESSnの「n」は、0から始まる連番を設定して、複数のルート が設定できるようにする。

      ADDRESS<n>=<ip>
      NETMASK<n>=<net-mask>
      GATEWAY<n>=<next-hop>

      例えば、インターフェース eth0 に対して以下のルートを設定する場合は、

      • 10.10.10.0/24 => 192.168.0.1
      • 172.16.1.0/24 => 192.168.0.1

      /etc/sysconfig/network-scripts/route-eth0 ファイルに以下の設定をする。

      ADDRESS0=10.10.10.0
      NETMASK0=255.255.255.0
      GATEWAY0=192.168.0.1
      ADDRESS1=172.16.1.0
      NETMASK1=255.255.255.0
      GATEWAY1=192.168.0.1
    3. 設定の反映
      • ネットワーク・インターフェース毎に設定を反映

        ネットワーク・インターフェースを無効化⇒有効化して、ネットワーク・ スクリプトの変更を反映する。インターフェース eth0 の設定を変更した場合、 これを有効にする場合は以下のコマンドを実行する。

        # ifdown eth0 && ifup eth0
      • 全てのネットワーク・スクリプトの設定を反映

        Red Hat Enterprise Linux / CentOS 6 の場合

        # /sbin/service network restart

        システム・サービスの場合

        # systemctl restart NetworkManager

ルート設定の確認と一時的な設定

ルート設定の確認は、「ip route」コマンドで行う。

$ ip route

ルート設定を一時的に(システムの再起動で無効になる)追加する場合は、 ネットワーク(ip/prefix)、ルート先のネットワーク・インターフェースの アドレス(next-hop)、ネットワーク・インターフェース(devine-name)を指定 して、以下のコマンドを実行する。

# ip route add <ip>/<prefix> via <next-hop> dev <devine-name>

設定したルートを削除する場合は、蒸気コマンドの「add」を「delete」に代えて コマンドを実行すれば良い。

参考文献

パケット転送の有効化

複数の NIC (Network Interface Card)の間でパケットを受け渡しする場合(例えば ルーターとしての設定を行う場合)は、以下の手順を実行する。

  1. IP Forward の設定
    1. /etc/sysctl.conf ファイルの編集

      /etc/sysctl.conf ファイルに以下の行を追加する。

      net.ipv4.ip_forward = 1
    2. システムの再起動
    3. 設定の確認

      以下のコマンドを実行して、「net.ipv4.ip_forward = 0」が表示されることを 確認する。

      # /sbin/sysctl net.ipv4.ip_forward
    参考文献
  2. firewalld の設定
    • NAT 変換せずに2つの NIC 間でパケットを転送する場合
      # firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i <device-1> -o <device-2> -j ACCEPT
      # firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i <device-2> -o <device-1> -j ACCEPT
      # firewall-cmd --reload
    • NAT 変換して送信する場合

      以下のコマンドを実行して、外向けの NIC に対して masuerade を有効にして、 転送を許可するポート(またはポート範囲)を設定する。

      # firewall-cmd --permanent [--zone=public] --add-masquerade
      # firewall-cmd --permanent [--zone=public] --add-forward-port \
        port=<src-port>[-<src-port-to>]:proto={tcp|ucp}:toport=<dest-port>[-<dest-port-to>][:toaddr=<ipaddr>]
      # firewall-cmd --reload

System-Wide Proxy Settings

/etc/profile.d/proxy.sh に以下の内容を記述する。

export HTTP_PROXY="<proxyサーバーのURL>"
export HTTPS_PROXY="<proxyサーバーのURL>"
export NO_PROXY="127.0.0.0/8,10.0.0.0/8,192.168.0.0/16,localhost,*.local"
export http_proxy="<proxyサーバーのURL>"
export https_proxy="<proxyサーバーのURL>"
export no_proxy="127.0.0.0/8,10.0.0.0/8,192.168.0.0/16,localhost,*.local"
  • HTTP_PROXY、http_proxy: http でアクセスするサイト用のプロキシサーバーの設定
  • HTTPS_PROXY、https_proxy: https でアクセスするサイトの用のプロキシサーバー の設定
  • NO_PROXY、no_proxy: プロキシの除外対象となるサーバー名またはIPアドレス

Network Utilities

ncat (fc40) - Concatenate and redirect sockets

パッケージのインストール
# dnf install nmap-ncat
利用方法
  • 疎通確認
    $ ncat -vz [-u] [-4] {<host-name>|<ip-addr>} <port-no>

    オプションの説明

    • -v: 詳細を表示する
    • -z: 接続状態を報告してすぐに復帰する
    • -u: UDP で接続する。このオプションを指定しない場合は TCP で接続する。
    • -4: IPv4 で接続する
  • メッセージの受信と応答
    # ncat -l [-u] [-4] [{-o|-x} <filename>] <port-no>

    オプションの説明

    • -l: 指定されたポート番号で受信したメッセージを表示し、標準入力からの入力を 応答する
    • -z -u -4: 疎通確認に同じ
    • -o filename: 送受信のメッセージをfilenameで指定したファイルに保存する
    • -x filename: 送受信のメッセージを16進ダンプ形式でfilenameで指定した ファイルに保存する
  • メッセージの送信と応答の表示
    $ ncat [-s <ip-addr>] [-u] [-4] [{-o|-x} <filename>] \
      {<host-name>|<ip-addr>} <port-no>

    オプションの説明

    • -s ip-addr: 送信元IPアドレスを指定する
    • -z -u -4: 疎通確認に同じ
    • {-o|-x} filename: メッセージの受信と応答に同じ
参考文献

PortQry.exe (Windows) - command line port scanner

インストール

Windows Server では、PortQry.exe コマンドは実行可能である。それ以外の Windows OS の場合は、以下の手順により PortQry.exe インストールをする。

  1. PortQry コマンド ライン ポート スキャナー バージョン 2.0 のダウンロード から PortQryV2.exe をダウンロードする
  2. ダウンロードした PortQryV2.exe を実行し、解凍先のディレクトリ (例:C:\opt\PortQryV2)を指定してファイルを解凍する
利用方法

送信先のサーバー(host-name または ip-addr)、およびポート番号 (port-no)を指定して受信状態を確認するためのコマンドは以下のとおり。

> PortQry.exe -n {<host-name>|<ip-addr>} -e <port-no> [-nr] [-p {tcp|udp}] ^
  [-l <file-name>] [-y]

オプションの説明

  • -n {host-name|ip-addr}: 疎通確認の送信先サーバーをサーバー名 (host-name)、またはIPアドレス(ip-addr)で指定する
  • -e port-no: 疎通確認する送信先サーバーのポート番号(port-no)を指定する
  • -nr: 送信先サーバーをIPアドレス指定した場合に名前解決をスキップする
  • -p {tcp|udp} 疎通確認のプロトコルを指定する。省略時のプロトコルは TCP である
  • -l file-name: ログファイルの名前を指定する。このオプションを指定すると、 PortQry.exe が配置ディレクトリに指定されたファイル名のログファイルが作成 される
  • -y: ログファイルが既に存在していた場合に、上書き確認のメッセージをスキップ する

コマンドのお付当

  • LISTENING: 指定されたプロトコルのポート番号でリッスンしている
  • NOT LISTENING: 指定されたプロトコルのポート番号でリッスンしていない
  • FILTERED: 指定されたプロトコルのポート番号がフィルター処理されている可能性 があり、リッスンの可否が判定できない
参考文献

tcpdump (fc40) - command-line tool for monitoring network traffic

パッケージのインストール
# dnf install tcpdump
利用方法
  1. ネットワーク・インターフェースの確認
    $ tcpdump -D
    • 実行例
      tcpdump -D
      1.enp0s3 [Up, Running]
      2.enp0s8 [Up, Running]
      3.lo [Up, Running, Loopback]
      4.any (Pseudo-device that captures on all interfaces) [Up, Running]
      5.bluetooth-monitor (Bluetooth Linux Monitor) [none]
      6.nflog (Linux netfilter log (NFLOG) interface) [none]
      7.nfqueue (Linux netfilter queue (NFQUEUE) interface) [none]
      8.usbmon0 (Raw USB traffic, all USB buses) [none]
      9.usbmon1 (Raw USB traffic, bus number 1)
  2. パケットをキャプチャする場合の書式
    # tcpdump {-A|-x|-X} -s <size> -i <interface-name> -Q {in|out|inout} \
      ()<expression>

    オプションの説明

    • -A : パケットの内容をASCII 文字列で表示する
    • -x : パケットの内容を16進形式で表示する
    • -X : パケットの内容を16新形式とASCII文字列で表示する
    • -s bytes : パケットの内容を bytes で指定したバイト数まで表示する
    • -i interface-name : 指定したインターフェース名(eth0、enp0s3、wlp2s0 など)のインターフェースを通過するパケットを表示する。「-i any」を指定 すると全てのネットワーク・インターフェースが対象となる
    • -Q {in|out|inout} : キャプチャするパケットの方向(受信/送信/送受信)を 指定する
    • expression : キャプチャするパケットのフィルタ条件を指定する。指定方法の 詳細は「man pcap-filter」で確認のこと。条件は、「and」「or」による結合や、 「(...)」によるグループ化(「()」を使用する場合はダブルクォートで囲むか、 「\」で()のエスケープが必要)が可能である。
      • フィルタ条件の例
        • {tcp|udp} [{src|dst}] port port-no : 指定したTCP/UDPのポート番号のパケットを表示する。 「src port port-no」を指定した場合は、送信元ポート番号でフィルタ する。「dst port port-no」を指定した場合は、宛先ポート番号でフィルタ する。
        • [{src|dst}] host {host-name|ip-addr} : 送信元または宛先のホストのホスト名またはIPアドレスと一致するパケットを 表示する。「src host ...」を指定した場合は送信元ホストのホスト名/IP アドレスでフィルタする。「dst host ...」をしてした場合は宛先ホストの ホスト名/IPアドレスでフィルタする。
        • [{src|dst}] net network-addr : 送信元または宛先のネットワークアドレスと一致するパケットを表示する。 ネットワークアドレスは以下の形式で指定する。
          • xxx.xxx.xxx.xxx: ネットマスクが「255.255.255.255」の ネットワークアドレス
          • xxx.xxx.xxx : ネットマスクが「255.255.255.0」のネットワークアドレス
          • xxx.xxx : ネットマスクが「255.255.0.0」のネットワークアドレス
          • xxx : ネットマスクが「255.0.0.0」のネットワークアドレス
          • xxx.xxx.xxx.xxx/netmask-length : ネットマスク長指定の ネットワークアドレス
  3. キャプチャーコマンドの例
    • 全てのネットワーク・インターフェースに対して宛先ポート80番のパケットを キャプチャする
      # tcpdump -A -i any tcp dst port 80
      dropped privs to tcpdump
      tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
      listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
      ...
      23:00:15.617000 IP fedora-xfce.39602 > fedora-xfce.http: Flags [P.], seq 1:292, ack 1, win 512, options [nop,nop,TS val 3618419563 ecr 3618419563], length 291: HTTP: GET /git/example.git/info/lfs/locks?refspec=refs%2Fheads%2Fmaster HTTP/1.1
      E..W..@.@.@...86..86...P0#c....(...........
      ...k...kGET /git/example.git/info/lfs/locks?refspec=refs%2Fheads%2Fmaster HTTP/1.1
      Host: fedora-xfce.local
      User-Agent: git-lfs/2.10.0 (Fedora 32; linux amd64; go 1.14rc1)
      Accept: application/vnd.git-lfs+json; charset=utf-8
      Authorization: Basic eXVraW5vYnU6Z2l0cmVtb3Rl
      Accept-Encoding: gzip
      ...
    • WiFiを通過する宛先のTCPポートが80番のパケットを16進+ASCII形式で キャプチャする。キャプチャするパケットは1000バイトまでに制限する。
      # tcpdump -X -s 1000 -i wlp2s0 dst tcp port 80
      03:42:17.388092 IP localpc.local.59068 > nrt12s01-in-f3.1e100.net.http: Flags [P.], seq 1:505, ack 1, win 502, options [nop,nop,TS val 1697179037 ecr 1037253120], length 504: HTTP: GET / HTTP/1.1
          0x0000:  4500 022c 1755 4000 4006 c004 c0a8 030c  E..,.U@.@.......
          0x0010:  d83a c583 e6bc 0050 7c3f cb74 70df 8825  .:.....P|?.tp..%
          0x0020:  8018 01f6 123e 0000 0101 080a 6528 e59d  .....>......e(..
          0x0030:  3dd3 3a00 4745 5420 2f20 4854 5450 2f31  =.:.GET./.HTTP/1
          0x0040:  2e31 0d0a 486f 7374 3a20 7777 772e 676f  .1..Host:.www.go
          0x0050:  6f67 6c65 2e63 6f2e 6a70 0d0a 5573 6572  ogle.co.jp..User
          0x0060:  2d41 6765 6e74 3a20 4d6f 7a69 6c6c 612f  -Agent:.Mozilla/
          ...
    • 送信元ネットワークアドレスが「192.168.56.0/24」、UDPの宛先ポート番号が45688 または55200の受信パケットでネットワーク・インターフェース「enp0s8」を通過 するものの内容を16進+ASCII形式で先頭64バイトまで表示する
      # tcpdump -X -s 64 -i enp0s8 -Q in \
        "src net 192.168.56.0/24 and udp and (port 45688 or port 55200)"
参考文献

nmcli (fc32) - command-line tool for network setting

nmcli は、NetworkManager (network management daemon) のクライアントである。 nmcli及びNetworkManagerは、NetworkManager パッケージに含まれている。

備 考

connectionとdeviceについての違いは、以下のとおりである。

  • connection

    ネットワーク・インターフェースのデバイスの設定のことである。 起動時にこの設定がネットワーク・インターフェースのデバイスに設定される。 connectionの設定変更を反映したい場合は、NetworkManagerサービスを再起動 すること。

  • device

    ネットワーク・インターフェースのデバイスの現在の設定内容。deviceに対して modifyするとその設定は即座にデバイスに反映されるが、再起動するとその設定 内容は失われる。

connectionの追加と削除

  • device、connection の状態確認

    device の一覧表示

    $ nmcli device

    このコマンドを実行すると、デバイス名、接続タイプ、状態、コネクション名が 表示される。device に対して connection が設定されていない場合は、 コネクション名が「--」と表示される。

    connection の一覧表示

    $ nmcli connection

    このコマンドを実行すると、コネクション名、UUID、接続タイプ、デバイス名が 表示される。connection が up していない場合は、デバイス名が「--」と表示 される。

  • connection の追加

    device-name のデバイスに対する connection(名前は connection-name) を 作成する場合は、以下のコマンドを実行す。

    # nmcli connection add type {ethernet|wifi|...} ifname <device-name> \
      con-name <connection-name>
  • connection の削除

    connection名を指定して connection を削除する場合は、以下のコマンドを実行 する。

    # nmcli connection delete <connection-name>

ネットワーク接続の設定確認

  • ネットワーク接続設定の一覧
    $ nmcli connection show

    上記のコマンドを実行すると、NAME(ID)、UUID、TYPE、DEVICEの一覧が表示される。

  • ネットワーク接続設定の詳細表示
    $ nmcli connection show <connection-id>

    connection-idは、「nmcli connection show」コマンドで表示されたNAMEの 値を指定する。

ネットワーク接続の設定

  1. 設定コマンド

    「nmcli connection modify connnection-id attribute value [ attribute value ...]」の形式でネットワーク接続の設定項目を設定する。 attribute は、「ネットワーク接続設定の詳細表示」で確認できる。

  2. 設定の有効化
    • ネットワーク・インターフェース毎に有効化する

      ネットワーク・スクリプト(/etc/sysconfig/network-scripts ディレクトリ 配下のファイル)を直接編集した場合は、以下のコマンドを実行して NetworkManager に設定を再読み込みさせる。

      # nmcli connection reload

      以下のコマンドを実行して、ネットワーク接続を再開する。

      # nmcli connection up <connection-id>
    • ネットワーク・スクリプトを含めた全ての設定の有効化
      # systemctl restart NetworkManager

設定例

  • IPv4をDHCPによる自動設定にする
    # nmcli connection modify <connection-id> ipv4.method auto
  • IPv4のIPアドレス、マスク、デフォルトゲートウェイ、DNSサーバを設定する
    # nmcli connection modify <connection-id> ipv4.method manual \
      ipv4.addresses <ipaddress>/<mask>[,<ipaddress>/<mask>...] \
      ipv4.gateway <ipaddress> ipv4.dns <ipaddress>[,<ipaddress>...]

    maskは、「xxx.xxx.xxx.xxx」の形式でも、ネットワークアドレスの上位ビット数で 指定しても良い。

  • IPv6を無効化する
    # nmcli connection modify <connection-id> ipv6.method disabled
  • 静的ルートを設定する
    # nmcli connection modify <connection-id> ipv4.routes \
      "<ip>[/<prefix>] <next-hop> [<metric>] [<attribute>=<value> \
      [<attribute>=<value> ...]]"

    next-hop は、宛先のアドレスが ip/prefix の場合の送信先(ゲートウェイ ・ルータ、またはインターフェース)のIPアドレスである。コンマで区切って複数の ルートを設定することも可能である。

    以下のコマンドを実行すると、

    # mcli connection modify enp0s3 +ipv4.routes \
      "192.0.2.0/24 198.51.100.1, 203.0.113.0/24 198.51.100.1"

    ネットワークインターフェース enp0s3 に以下の静的ルートが既存の設定に追加 される。

    • 192.0.2.0/24 => 198.51.100.1
    • 203.0.113.0/24 => 198.51.100.1
参考文献

notify-send (fc30) - create a notification

パッケージのインストール

# dnf install libnotify

通知の発行

以下のコマンドを実行すろと、GUI Desktopにタイトルと通知メッセージがポップアップ 表示される。

$ notiry-send [<タイトル>] <通知メッセージ>

オプションを指定すると、アイコンの種類、表示が消えるまでの時間(ミリ秒)などが指定 できる。詳細は「notify-send --help」で確認のこと。

notification daemon のインストール

GUI Desktopにメッセージを表示するためには、notification daemonをインストール する必要がある。Desktop Environmentによって、以下のパッケージをインストールする。

GUI環境 notification daemon
LXDE 他 notification-daemon
MATE mate-notification-daemon
Xfce xfce4-notifyd

TOPICS

  1. daemon から通知を発行する
    1. はじめに

      notify-send は、コマンドを実行したユーザーが現在画面を開いている X Window に 対してメッセージが送信されるので、daemon から現在開かれている X Window に 対して一斉にメッセージを送信するのは難しい。ログインユーザーとそのユーザーが 開いているDisplay番号を汎用的に取得する方法がないため、非効率であるが現在 ログインしているユーザーと画面が開いている X Window のDisplay番号を別々に 取得して、その組み合わせで通知を発行する方法で一斉通知を実装する。

    2. 現在ログインしているユーザーの取得
      # ps -e -o user h | sort | uniq
    3. 現在開いている画面のDisplay番号の取得
      # find /tmp -type f -name '.X*-lock' | sed -e 's/.*\.X//g' -e 's/-lock$//g'

      X Window を開くと、/tmp/.XDisplay No-lock というファイルが作成されるので、 このファイル名から画面ID(の「:」の右側の数字)を取得する。

    4. 通知の発行
      # for loggedin in `ps -e -o user h | sort | uniq`; do \
          if [ `cat /etc/shadow | grep -e "^${loggedin}:[^\*^\!]" | wc -l` -gt 0 ]; then \
            for dispno in `find /tmp -type f -name '.X*-lock' | \
              sed -e 's/.*\.X//g' -e 's/-lock$//g'`; do \
              sudo -u $loggedin DISPLAY=:$dispno \
                  DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u $loggedin)/bus \
                  notify-send <タイトル> <メッセージ>; \
            done; \
          fi; \
        done
  2. アイコン名

    notify-send は、「-i アイコン名」オプションを指定して、ポップアップ したメッセージに表示するアイコンを指定可能である。指定できるアイコン名は、 以下のリンクを参照のこと。


ntpdate (fc25) - NTP client

備 考

Fedora 16よりデフォルトのNTP Client/Serverはchronyになった。

パッケージのインストール

# dnf install ntpdate

設定

  1. NTPサーバーの設定

    /etc/ntp/step-tickers ファイルに NTPサーバ のホスト名を設定する

  2. 時刻自動同期の設定

    以下のコマンドを実行して、ntpdate service を有効にする

    # systemctl enable ntpdate.service

openjdk (fc31)

openjdkは GPL v2 クラスパス例外(コピーレフト無し)のライセンスで提供される javaの実装である。

パッケージのインストール

インストールするパッケージの名前は、JDKのバージョンによって以下のようになって いる。

Version Java Runtime Environment
1.8.0 java-1.8.0-openjdk
11.0 java-11-openjdk

また、開発用、headless環境用に以下のパッケージがある。

  • xxx-devel

    javacコマンドなど、開発に必要なコマンド、ライブラリを提供するパッケージ

  • xxx-headless

    音声、画面のない環境(非GUI環境)を提供するパッケージ。 なお、JRE(Java Runtime Environment)のパッケージは、headlessのパッケージに 対してGUIサポート用の機能を追加したものになっている。

これらのパッケージを用途に応じて選択して、「dnf install パッケージ名」 コマンドでインストールする。

Javaのバージョンの切り替え

openjdkは、システムに複数のバージョンをインストールできる(バージョンごとに パッケージ名が違うため)ので、デフォルトのバージョンを切り換える場合は、 以下のように update-alternatives コマンドを実行する。

  • JRE(or headless)の切り替え
    # update-alternatives --config java

    上記のコマンドを実行すると、javaコマンドを切り換えるための一覧が表示される ので、番号を入力して目的のバージョンのものを選択する。

  • JDKの切り替え
    # update-alternatives --config javac

    上記のコマンドを実行すると、javacコマンドを切り換えるための一覧が表示される ので、番号を入力して目的のバージョンのものを選択する。

Red Hat OpenJDK Life Cycle and Support Policy

に Redhat OpenJDKのサポート期間の説明がある。 Windows版でも Linux版と同じ期間のサポート(長期サポート)となっている。

Windows版のダウンロード

  • RedHat OpenJDK

    Download Red Hat OpenJDK から Windows版の OpenJDK をダウンロード可能である。ただし、ダウンロードの前に Red Hat account への慈善登録が必要である。

    注 意

    Red Hat account の登録に会社名を指定すると、会社を代表して Red Hat account の 契約に同意することになるので、注意すること。

  • Amazon Corretto

    Amazon Corretto の 「Amazon Corretto xx をダウンロードする」ボタン(リンク)から、Linux版の他に、 Windows版、MAC OS版の OpenJDK をダウンロードできる。ダウンロードにあたり、 事前のユーザ登録の必要はない。

OpenJDK のサポート期間


PAM (fc43)

PAM は Pluggable Authentication Module の略語である。 PAM はユーザー認証のための柔軟な仕組みを提供するものである。

参考文献


pandoc (fc31) - general markup converter

パッケージのインストール

以下のコマンドを実行して、パッケージをインストールする。

# dnf install pandoc

フォーマットの変換

$ pandoc -f <input-format> -t <output-format> [-o <output-file>] [<input-file>]...

引数の説明

  • -f input-format

    入力フォーマットを指定する。指定可能なフォーマットは以下のとおり。

    • commonmark (CommonMark Markdown)
    • creole (Creole 1.0)
    • docbook (DocBook)
    • docx (Word docx)
    • epub (EPUB)
    • fb2 (FictionBook2 e-book)
    • gfm (GitHub-Flavored Markdown), or the deprecated and less accurate markdown_github; use markdown_github only if you need extensions not supported in gfm.
    • haddock (Haddock markup)
    • html (HTML)
    • jats (JATS XML)
    • json (JSON version of native AST)
    • latex (LaTeX)
    • markdown (Pandoc's Markdown)
    • markdown_mmd (MultiMarkdown)
    • markdown_phpextra (PHP Markdown Extra)
    • markdown_strict (original unextended Markdown)
    • mediawiki (MediaWiki markup)
    • man (roff man)
    • muse (Muse)
    • native (native Haskell)
    • odt (ODT)
    • opml (OPML)
    • org (Emacs Org mode)
    • rst (reStructuredText)
    • t2t (txt2tags)
    • textile (Textile)
    • tikiwiki (TikiWiki markup)
    • twiki (TWiki markup)
    • vimwiki (Vimwiki)
  • -t output-format

    出力フォーマットを指定する。指定可能なフォーマットは以下のとおり。

    • asciidoc (AsciiDoc)
    • beamer (LaTeX beamer slide show)
    • commonmark (CommonMark Markdown)
    • context (ConTeXt)
    • docbook or docbook4 (DocBook 4)
    • docbook5 (DocBook 5)
    • docx (Word docx)
    • dokuwiki (DokuWiki markup)
    • epub or epub3 (EPUB v3 book)
    • epub2 (EPUB v2)
    • fb2 (FictionBook2 e-book)
    • gfm (GitHub-Flavored Markdown), or the deprecated and less accurate markdown_github; use markdown_github only if you need extensions not supported in gfm.
    • haddock (Haddock markup)
    • html or html5 (HTML, i.e. HTML5/XHTML polyglot markup)
    • html4 (XHTML 1.0 Transitional)
    • icml (InDesign ICML)
    • jats (JATS XML)
    • json (JSON version of native AST)
    • latex (LaTeX)
    • man (roff man)
    • markdown (Pandoc's Markdown)
    • markdown_mmd (MultiMarkdown)
    • markdown_phpextra (PHP Markdown Extra)
    • markdown_strict (original unextended Markdown)
    • mediawiki (MediaWiki markup)
    • ms (roff ms)
    • muse (Muse),
    • native (native Haskell),
    • odt (OpenOffice text document)
    • opml (OPML)
    • opendocument (OpenDocument)
    • org (Emacs Org mode)
    • plain (plain text),
    • pptx (PowerPoint slide show)
    • rst (reStructuredText)
    • rtf (Rich Text Format)
    • texinfo (GNU Texinfo)
    • textile (Textile)
    • slideous (Slideous HTML and JavaScript slide show)
    • slidy (Slidy HTML and JavaScript slide show)
    • dzslides (DZSlides HTML5 + JavaScript slide show),
    • revealjs (reveal.js HTML5 + JavaScript slide show)
    • s5 (S5 HTML and JavaScript slide show)
    • tei (TEI Simple)
    • zimwiki (ZimWiki markup)
      注 意
      • odt、docx、epub は「-o -」を指定しないと標準出力に出力されない
      • HTMLに変換する場合で、stand-alone dociment (<head>及び<body>タグを含む HTML)を生成する場合は -s フラグを指定すること。
  • -o output-file

    出力ファイルを指定する。このオプションを省略すると変換結果は標準出力に出力される。

  • input-file
    • 入力ファイルを指定する。入力ファイルの指定を省略すると、標準入力から読み取った 内容を変換する。
    • 複数の入力ファイルを指定すると、ファイルを連結してから変換を開始する。 --file-scope オプションを指定すると、入力したファイル毎に変換を行う。
  • DocBook から Markdownへ変換する
    $ pandoc -f dockbook -t markdown -o foo.md foo.docbook
  • Markdown から HTMLに変換する
    $ pandoc -f markdown -t html -s -o foo.html foo.md
  • Markdown のドキュメントを HTML に変換して lynx で表示する
    $ pandoc -f markdown -t html -s foo.md | lynx -stdin
  • Markdown のドキュメントを HTML に変換して w3m で表示する
    $ pandoc -f markdown -t html -s foo.md | w3m -T test/html

password generator (fc31)

pwdmake

  • 提供パッケージ

    libpwquality

  • コマンド・パラメータ

    pwmake entropy-bits

  • 実行例

    pwmake 80 ==> yD4NP@k)@j^yKoz@w

  • 補足説明

    man によれば、entropy-bitsは最低56にすべきであり、パスワード破りが パスワードのハッシュまたはパスワードそのものにアクセスすることを想定する 場合は、entropy-bitsは80から128を指定すべきとある。

pwqgen

  • 提供パッケージ

    passwdqc

  • コマンド・パラメータ

    pwqgen [random=random-bits]

  • 実行例

    pwqgen random=24 ==> split-junior

  • 補足説明

    pqqgenは可読性のある(覚えることが可能な)パスワードを生成するコマンドで ある。パラメータの指定を省略した場合は、「random=47」を指定したものと 見做される。random-bitsの値は、24〜85の間で指定すること。

pwgen

  • 提供パッケージ

    pwgen

  • コマンド・パラメータ

    pwgen [-A] [-0] [-y] [-s] [pw-len] [pw-num]

    • -A : 大文字を含めない
    • -0 : 数値を含めない
    • -y : 記号を含める
    • -s : 完全にランダムなパスワードを生成する
    • pw-len : パスワードの長さを指定する
    • pw-num : 生成するパスワードの数を指定する
  • 実行例

    pwgen ==>
    ceiceeC0 oi8Phav4 och4eiDe Yah8Eove ahX3Upha faxohS4s Aisohw2y aeNg2uow
    ...

  • 補足説明

    pwgenは記憶可能なパスワードを生成するコマンドである。パラメータを省略 すると、大文字と数字を含む8文字のパスワードを160個表示する。


php (fc32)

パッケージのインストール

以下のコマンドを実行して、パッケージをインストールする。

# dnf install php

インストールが終わると、/etc/httpd/conf.modules.d/15-php.conf、 /etc/httpd/conf.d/php.conf ファイルが作成される。

  • /etc/httpd/conf.modules.d/15-php.conf の設定内容
    <IfModule !mod_php5.c>
      <IfModule prefork.c>
        LoadModule php7_module modules/libphp7.so
      </IfModule>
    </IfModule>
    <IfModule !mod_php5.c>
      <IfModule !prefork.c>
        # ZTS module is not supported, so FPM is preferred
        # LoadModule php7_module modules/libphp7-zts.so
      </IfModule>
    </IfModule>
  • /etc/httpd/conf.d/php.conf の設定内容
    <Files ".user.ini">
        Require all denied
    </Files>
    AddType text/html .php
    DirectoryIndex index.php
    <IfModule !mod_php5.c>
      <IfModule !mod_php7.c>
        SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
        <FilesMatch \.(php|phar)$>
            SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
        </FilesMatch>
      </IfModule>
    </IfModule>
    <IfModule  mod_php7.c>
        <FilesMatch \.(php|phar)$>
            SetHandler application/x-httpd-php
        </FilesMatch>
        php_value session.save_handler "files"
        php_value session.save_path    "/var/lib/php/session"
        php_value soap.wsdl_cache_dir  "/var/lib/php/wsdlcache"
    </IfModule>

Xdebugのインストール

Xdeubgは、PHPのデバッグ機能を提供する。

  1. パッケージのインストール

    以下のコマンドを実行して、パッケージをインストールする。

    # dnf install php-pecl-xdebug

    インストールが終わると、/etc/php.d/15-xdebug.ini が作成され、以下の内容が 設定される。

    zend_extension=xdebug.so
  2. デバッグの設定
    項目名 説明 既定値
    xdebug.remote_enable Xdebugがリモート・クライアントに 接続できるようにtrueを設定する false
    xdebug.remote_host リモート・クライアントのホスト名 またはIPアドレスを設定する localhost
    xdebug.remote_port リモート・クライアントの待ち受け ポート番号を設定する 9000
    xdebug.remote_connect_back trueにするとリモート・クライアント の接続先 ホスト名、またはIPアドレス はhttpヘッダより取得し、 xdebug.remote_hostの設定は無視する false

podman (fc37) - docker compatible container

Fedora 31 及び CentOS 8 より docker パッケージが廃止された。そこで代わりに podman パッケージを使用することにする。なお、podman-docker パッケージの 導入により docker コマンドがそのまま利用できるので、ここでは docker パッケージ と違いのある部分だけを説明する。

パッケージのインストール

以下のコマンドを実行して、パッケージをインストールする。

# dnf install podman podman-docker [rsyslog]
  • podman - podman 本体のパッケージ
  • podman-docker - docker コマンドを提供するパッケージ
  • rsyslog - systemd によるコンテナの自動起動のために必要なパッケージ
    注 意

    docker パッケージから podman パッケージへの切り替え手順は以下のとおり。

    1. docker サービスを停止する
      # systemctl stop docker
    2. docker パッケージを削除する
      # dnf remove docker
    3. podman、podman-docker、golang、rsyslog パッケージをインストールする
      # dnf install podman podman-docker golang rsyslog
    4. docker image のインストール・ディレクトリの削除
      # rm -rf /var/lib/docker/

プロキシの設定

  • システムレベルのプロキシ設定
    • プロキシ経由で外部にアクセスする環境では、System-Wide Proxy Settings の設定をすること。
    • この podman コマンドがプロキシサーバーを参照できるようになる。また、 podman create / start などで コンテナの生成時/起動した時にプロキシ設定の 環境変数が コンテナ内に自動生成される。

systemd によるコンテナーの起動

docker パッケージでは、docker run コマンドに「--restart=always」を指定する ことで、システム起動時にコンテナーを自動起動していたが、podman は以下の手順に より、systemd でコンテナーを自動起動することができる。

  1. SELinuxのブール値の設定
    # setsebool -P container_manage_cgroup on

    -P オプションを省略すると設定内容は自壊機同時に反映されない。次回起動以降も 設定を反映死体場合は -P オプションを設定すること。

  2. rsyslog.serviceファイルの編集 ※ fc32より不要

    /usr/lib/systemd/system/rsyslog.service ファイルを開き、[Install]セクション に以下の1行を設定して、root権限のユーザーで 「systemctl enable --now rsyslog.service」コマンドを実行する。

    Alias=syslog.service
  3. コンテナの作成

    --name container-name オプションを指定して docker create コマンドを実行 する。以下は、イメージ名が docker-image の docker image を使用して、 コンテナ名が container-name のコンテナを実行するコマンドの例である。

    # docker create --name <container-name> -p 8080:80 <docker-image>
  4. Unitファイルの作成

    /usr/lib/systemd/system ディレクトリの下に Unit ファイルを配置してroot 権限のユーザーで「systemctl enable --now Unit-name」コマンドを実行 する。

    [Unit]
    Description=xxxx container serivice
    Wants=syslog.service
    After=network.target
    
    [Service]
    Restart=always
    ExecStart=/usr/bin/podman start -a <container-name>
    ExecStop=/usr/bin/podman stop -t 10 <container-name>
    
    [Install]
    WantedBy=multi-user.target

    [container-name.service]

    Unitファイルの記述上の注意点は以下のとおり。

    • podman start 及び podman stop コマンドには、docker run コマンドで指定した コンテナ名を指定すること。
    • [Unit]セクションには、「Wants=syslog.service」を設定する。
      • プロキシサーバを使用している環境では、[Unit]セクションに環境変数 「HTTP_PROXY」、「HTTPS_PROXY」、「NO_PROXY」を設定してプロキシの 設定をすること。設定方法については、「Docker proxy settings」を 参照すること。
    • [Install]セクションには、「WantedBy=multi-user.target」を設定する。
備 考

CentOS 8 において、docker runコマンドで「--network host」を指定した場合 SELinuxでアクセス違反が発生するので、以下の手順でポリシーを作成して システムに適用する。

  1. container_init.te ファイルの作成
    module container_init 1.0.0;
    require {
      type init_t;
      type container_runtime_tmpfs_t;
      class dir read;
    }
    #============= init_t ==============
    allow init_t container_runtime_tmpfs_t:dir read;

    [container_init.te ファイル]

  2. モジュールのコンパイル
    $ checkmodule -m -o container_init.mod container_init.te
  3. パッケージの作成
    $ semodule_package -o container_init.pp -m container_init.mod
  4. パッケージのインストール
    # semodule [-X <優先度>] -i container_init.pp
参考文献
  1. 第6章 Podman で systemd サービスとしてコンテナーを実行
  2. Using Systemd with Podman containers | podman.io

Using docker-compose

  1. パッケージのインストール

    以下のコマンドを実行して、必要なパッケージをインストールする。

    • docker-compose パッケージが存在する場合
      # dnf install docker-compose
    • docker-compose パッケージが存在しない場合
      # pip3 install docker-compose
  2. podman サービスの起動

    podman サービスが起動していないと、docker-compose コマンドの実行に失敗する ので、以下のコマンドを実行して podman サービスの自動起動を設定すること。

    # systemctl enable --now podman.service
  3. プロキシの設定
    • podman サービスのプロキシ設定

      /etc/systemd/system/podman.service.d/proxy.conf ファイルに以下の 内容を設定する。

      [Service]
      Environment="HTTP_PROXY=<プロキシサーバーのURL>"
      Environment="HTTPS_PROXY=<プロキシサーバーのURL>"
      Environment="NO_PROXY=<IPアドレス>,<ネットワークアドレス>,<ホスト名>"
      Environment="http_proxy=<プロキシサーバーのURL>"
      Environment="https_proxy=<プロキシサーバーのURL>"
      Environment="no_proxy=<IPアドレス>,<ネットワークアドレス>,<ホスト名>"
      • NO_PROXY に設定するホスト名は、ワイルドカード「*」を指定できる。
    • ~/.docker/config.json の設定

      docker-compose の一部のコマンド(run コマンドなど)はこの設定が必要。 設定手順は、Docker proxy settingsの「docker cli に対するproxyの設定」 を設定すること。

    備考
    • podman を使用しない環境での docker-compose では、docker-compose で Docker イメージを作成すると、Pythonのパッケージがインストールできない 事象が発生したが、この環境(podman を使用した環境)では、上記のプロキシ 設定により、Python モジュールのインストールが問題なくできている。

Rootless docker-compose

  1. docker-compose のインストール

    Using docker-compose の手順に従って docker-compose パッケージを インストールする。

  2. podman.socket サービスの自動起動設定

    以下のコマンドを実行して、rootless で podman.socket サービスの自動起動の 設定とサービスの起動を行う。

    $ systemctl --user enable --now podman.socket
  3. Podman API ソケットのパスの確認

    以下のコマンドを実行して、ソケットのパスを確認する。

    $ systemctl --user status podman.socket
    ● podman.socket - Podman API Socket
         Loaded: loaded (/usr/lib/systemd/user/podman.socket; enabled; preset: dis>
         Active: active (listening) since Sun 2023-01-08 22:42:38 JST; 8s ago
          Until: Sun 2023-01-08 22:42:38 JST; 8s ago
       Triggers: ● podman.service
           Docs: man:podman-system-service(1)
         Listen: /run/user/<UID>/podman/podman.sock (Stream)
         ...

    出力結果の「Listen:」にソケットのパスが表示される。なお、UIDは実行 ユーザーのユーザーIDを表わす。

  4. 環境変数の設定

    以下のコマンドを実行して、DOCKER_HOST 環境変数に Podman API ソケットを 「unix:ソケットのパス」の形式で設定する。

    $ export DOCKER_HOST=unix:/run/user/<UID>/podman/podman.sock

    ログイン時に環境変数を自動設定する場合は、~/.bashrc に上記のコマンドを 設定すること。

  5. docker-compose コマンドの実行

    docker-compose.yml ファイルが存在するディレクトリに移動して、docker-compose コマンドを実行する。

    【コマンドの実行例】

    $ docker-compose up -d
参考文献

postgresql (fc32) - PostgreSQL server 12

パッケージのインストール

以下のコマンドを実行して、パッケージをインストールする。

# dnf install postgresql-server
注 意

パッケージをアンインストールした場合は、/var/lib/psql/data ディレクトリに データベースのデータが残ったままとなっているので、注意すること。

インストール後の設定

  1. PostgreSQL database cluster の初期化
    # postgresql-setup --initdb
  2. PostgreSQL database server の自動起動設定
    # systemctl enable postgresql
  3. PostgreSQL database server の起動
    # systemctl start postgresql
参考文献

リモート接続の設定

  1. /var/lib/pgsql/data/postgresql.conf ファイル
    • 待ち受けアドレスの設定

      規定の設定では、クライアントからの接続の待ち受けアドレスは、localhost となっているので、リモートからの接続はできない。待ち受けアドレス (listen address)に localhost 以外のアドレスを加えるために、以下のように listen_addresses にコンマ区切りで待ち受けるIPアドレスを指定する。

      listen_addresses = 'localhost,<ip-address>[,<ip-address>]'
  2. /var/lib/pgsql/data/pg_hba.conf ファイル

    クライアント認証の設定(接続元のアドレス、ユーザー、認証方法)をする。

    • パッケージインストール時の設定
      • Unix ソケット

        全てのユーザに対して、OSのユーザ認証をする

      • localhost あらの接続 (IPv4、IOv6)

        全てのユーザに対して、OSのユーザ認証をする

    • TCP/IP接続時の設定
      • データベースのユーザ認証を使用する場合の設定例
        host    all             all             192.168.56.0/24            md5

        すべてのデータベースとユーザについて、192.168.56.0/24 からの接続を許可 する。ユーザ認証はデータベースに設定されたユーザーとパスワードを使用 する。

        host    all             all             192.168.56.0/24            ident

        すべてのデータベースとユーザについて、192.168.56.0/24 からの接続を許可 する。ユーザ認証は OS のユーザ名、パスワードを使用する。

参考文献

データベース単位のバックアップとリストア

  1. SQLコマンドによるバックアップとリストア

    pg_dump コマンドは、デフォルトではデータベースのバックアップをSQLコマンドで 出力する。つまり、create table コマンド、copy コマンドなどをファイルに出力 する。

    • データベースのバックアップ

      以下のコマンドを実行して、指定したデータベース名のデータベースを リダイレクト先のファイルにバックアップする。

      $ sudo -u postgres pg_dump <db-name> > <dump-file-path>
      pg_dump optionの説明
      • -c --if-exists

        -c オプションを指定すると、指定したデータベースを drop するための 「drop database」文を出力する。--if-exists オプションも同時に指定して リストアするときに drop 対象のデータベースが存在する場合は 「drop database」文を実行しないようにすること。

      • -C

        指定したデータベースを作成するための「create database」文を出力する。 このオプションは -c オプションと一緒に設定すべきである。

      • -s (または --section=pre-data --section=post-data)

        データベース定義のみをバックアップ・リストアする(テーブルのデータ 以外をバックアップ・リストアの対象にする)。

      • -a (または --section=data)

        テーブルのデータのみをバックアップ・リストアする。

      • -t table-name [-t table-name] ...

        指定したテーブルのみをバックアップ・リストアする。-t オプションを複数 指定して、複数のテーブルを指定することができる。また table-name は ワイルドカード(*)のを使用することができる。このオプションを指定すると 指定したテーブルが依存するデータベース・オブジェクトをバックアップ しないので、初期化されたデータベースに対して完全なリストアを保証する ものではないことに注意すること。

    • データベースのリストア(pg_dump で -C オプションを指定した場合)
      1. データベース・オーナーの作成

        リストア先の PostgreSQL server にリストア対象のデータベースのオーナー (データベース・ユーザー)が存在しない場合は、以下のコマンドを実行して データベース・オーナーを作成する。

        $ sudo -u postgres psql -c "create user <db-owner>;"
      2. データベースのリストア

        pg_dump コマンドで出力したdump-file-path(pg_dump コマンドで -C オプションを指定して出力したダンプ・ファイル)をリダイレクトして、その 内容をリストアする。

        $ sudo -u postgres psql < <dump-file-path>

        リストアの時間を短縮したい場合は、Speeding up restoring PostgreSQL の手順を参照のこと。

    • データベースのリストア(pg_dump で -C オプションを指定しなかった場合)
      1. データベースの再作成

        リストア先の PostgreSQL server にリストア対象のデータベースが存在する 場合は、以下のコマンドを実行してそのデータベースを削除する。

        $ sudo -u postgres psql -c "drop database <db-name>;"

        以下のコマンドを実行して、リストア対象のデータベースを新規に作成する。

        $ sudo -u postgres psql -c "create database <db-name>;"
      2. データベース・オーナーの設定

        pd_dump コマンドで -C オプションを指定しないで主力したダンプ・ファイル からリストアを行うと、リストア対象のデータベースのオーナーは復元され ないので、手動でデータベース・オーナーを設定する。

        リストア先の PostgreSQL server にデータベース・オーナーのデータベース・ ユーザーが存在しない場合は、以下のコマンドを実行してデータベース・ オーナーを作成する。

        $ sudo -u postgres psql -c "create user <db-owner>;"

        次に以下のコマンドを実行して、復元対象のデータベースにオーナーを設定 する。

        $ sudo -u postgres psql -c "alter database <db-name> owner to <db-owner>;"
      3. データベースのリストア

        psql コマンドにリストア対象のデータベースを指定し、pg_dump コマンドで 出力したdump-file-path(pg_dump コマンドで -C オプションを指定しない で出力したダンプ・ファイル)をリダイレクトして、その内容をリストア する。

        リストアの時間を短縮したい場合は、Speeding up restoring PostgreSQL の手順を参照のこと。

        $ sudo -u postgres psql <dv-name> < <dump-file-path>
        注 意

        psql コマンドの引数にデータベースを指定しないでリストアを行うと、 postgres ユーザの接続先データベースである postgres データベースに ダンプ・ファイルの内容がリストアされてしまうので注意すること。

  2. カスタム・フォーマットによるバックアップとリストア

    -Fc オプションを指定してカスタム・フォーマットでデータベースをバックアップ すると、リストアする時に一部の情報のリストア(スキーマのみ、データのみの リストアや、テーブルを指定してのリストア)が可能になる。

    • データベースのバックアップ
      $ sudo -u postgres pg_dump -Fc <db-name> > <dump-file-path>

      pg_dump optionで説明したオプション(ただし、-c、-C オプション除く)を 指定してバックアップの内容を絞り込むことが可能である。ただし、 バックアップしたファイルの管理を考慮すると、 バックアップはオプションを 指定せずに行い、リストアするときにリストア内容を絞り込む方が良いだろう。

    • データベースのリストア

      カスタム・フォーマットでデータベースをバックアップした場合は、pg_restore コマンドを使用してデータベースをリストアする。

      1. データベースの再作成

        データベースのリストア(pg_dump で -C オプションを指定しなかった場合) と同様な手順で、データベースを再作成(空のデータベースの作成)する。

      2. データベース・オーナーの設定

        データベースのリストア(pg_dump で -C オプションを指定しなかった場合) と同様な手順で、データベース・オーナーの設定をする。

      3. データベースのリストア

        pg_restore コマンドに -d オプションでリストアするデータベース名を指定 してデータベースをリストアする。

        $ sudo -u postgres pg_restore -d <db-name> <dump-file-path>

        pg_dump optionで説明したオプション(ただし、-c、-C オプション除く) を指定してリストアの内容を絞り込むことが可能である。

        リストアの時間を短縮したい場合は、Speeding up restoring PostgreSQL の手順を参照のこと。

    • リストアコマンドの例
      1. データベース定義のみをリストアする
        $ sudo -u postgres pg_restore -d <db-name> -s <dump-file-path>
      2. データベースのデータのみをリストアする

        データベースの制約条件(外部キー制約)などをリストアすると、レコードを 復元するテーブルの順番によってはエラーが発生するので、以下のように --section=pre-data オプションを指定して pg_restore コマンドを実行して、 post-dataの定義(インデックス、トリガー、ルール、検証されたチェックを 除く制約)以外のデータベース定義がリストアされた状態で、データベースの データを復元する。

        $ sudo -u postgres pg_restore -d <db-name> --section=pre-data <dump-file-path>

        データベースのデータの復元は以下のように、--section=data オプションを 指定して pg_restore コマンドを実行する(--secion=data の代わりに -a を 指定しても良い)。

        $ sudo -u postgres pg_restore -d <db-name> --section=data <dump-file-path>

        復元されたデータがデータベースの制約条件に違反しない状態になったら、 --section=post-data オプションを指定して pg_restore コマンドを実行 すれば、データベースの復元が完了する。

参考文献

データベース全てのバックアップとリストア

  • 全てのデータベースのバックアップ

    pg_dumpall コマンドを使用すると、グローバル・データ(ロール、 テーブルスペース)を含め、データベース・サーバーのデータベース全てをSQL コマンドの形式でファイルに出力する。

    以下のコマンドを実行して、データベース・サーバーのデータベース全てを バックアップする。

    $ sudo -u postgres pg_dumpall > <dump-file-path>

    pg_dumpall コマンドでバックアップするデータベースを個別に指定することは できないが、以下のオプションを指定してバックアップする内容を指定することが 可能である。

    • -c --if-exists

      -c オプションを指定するとデータベースを drop してからリストアするために、 「drop database」文を出力する。また --if-exists オプションも同時に指定 してデータベースが存在しない場合はデータベースの drop をしないように する。

    • -s

      データベース定義のみを出力する(テーブルのデータ以外を出力する)

    • -a

      テーブルのデータのみを出力する

  • データベースのリストア

    以下のコマンドを実行して、pg_dumpall コマンドでバックアップした内容を リストアする。

    $ sudo -u postgres psql < <dump-file-path>

    上記のコマンドを実行すると、pg_dumpall コマンドでバックアップした データベースのユーザー及びデータベースのすべてがリストアされる。 リストアされるデータベース・ユーザーが既にデータベース・サーバーに存在する 場合は、エラーが出力されるがデータベースのリストアは行われるため、エラーは 気にしなくて良い。

    備 考

    pg_dumpall コマンドで -c オプションを指定しなかった場合は、リストアする データベースがデータベース・サーバーに既に存在するとリストアに失敗する。 この場合は、以下のコマンドを実行してデータベースを削除してから データベースをリストアすること。

    $ sudo -u postgres psql -c "drop database <db-name>;"

    なお、データベースのオーナーに設定するデータベース・ユーザーが データベース・サーバーに設定済であっても削除しなくても良い。

参考文献

Speeding up restoring PostgreSQL

  • リストア実行時に fsync を無効にする
    1. postgresql.conf の編集 (fsyncの無効化)

      /var/lib/pgsql/data/postgresql.conf を vi 等で開き、「fsync = off」を設定 して、以下のコマンドによりPostgreSQLを再起動する。

      # systemctl restart postgresql
    2. リストア・コマンドの実行
    3. postgresql.conf の編集 (fsyncの設定を戻す)

      /var/lib/pgsql/data/postgresql.conf を vi 等で開き、「fsync = off」の 設定をする前の状態に戻して、PostgreSQLを再起動する。

サンプル データベース

  • PostgreSQL Sample Database

    インストール手順

    1. 「Download DVD Rental Sample Database」をクリックして dvdrental.zip を ダウンロードする
    2. コマンド「unzip dvdrental.zip」を実行してzipファイルを解凍し、 dvdrental.tar を取得する
    3. コマンド「sudo -u postgres psql -c "create database dvdrental;"」を 実行して、データベース「dvdrental」を作成する
    4. コマンド「sudo -u postgres pd_dump -d dvdrental dvdrental.tar」を実行 して、dvdrental.tar ファイルからデータベースをリストアする
  • https://www.postgresql.org/ftp/projects/pgFoundry/dbsamples/

postcard label printing (fc31) - LibreOffice差し込み印刷

はがき宛名書き(OpenOfficeのテンプレート)の取得

  1. https://osdn.net/projects/openoffice-docj/releases/59979 から はがき宛名書き.zip をダウンロードする
  2. unar パッケージをインストールしていない場合はインストール して、以下のコマンドを実行してzipファイルを解凍する。
    $ unar -o <作業ディレクトリ> はがき宛名書き.zip

    上記のコマンドを実行すると、作業ディレクトリの下に「はがき宛名書き」 ディレクトリが作成され、その下に下記のファイルが作成される。

    • Address.ods
    • Readme.txt
    • はがき宛名書き.odt

    なお、ZIPファイルの中に日本語のファイル名のファイルが含まれているので 「unzip」コマンドで解凍するとファイル名が文字化けするので注意すること。

差し込み印刷の準備から印刷まで

  1. 衡山毛筆フォントのインストール

    font installの「衡山毛筆フォント」の手順に従って 衡山毛筆フォントをインストールする。

  2. 「はがき宛名書き.odb」の作成
    1. LibreOffice Base を起動すると「データベース ウィザード」が開くので 「既存のデータベースに接続」を選択し、ドロップダウンリストから 「表計算ドキュメント」を選択して「次へ」ボタンを押す。
    2. 「ブラウズ」ボタンを押して、ファイル選択ダイアログから 「Adress.ods」を選択した後、「次へ」ボタンを押す。
    3. デフォルトの設定(LibreOfficeにデータを登録:はい、 データベースを保存したあとの処理:データベースを開いて編集)のまま 「完了」ボタンを押す。
    4. ファイル保存ダイアログが開くので、「Address.ods」と同じ ディレクトリに移動し、ファイル名に「はがき宛名書き.odb」を指定して 「保存」ボタンを押す。
    5. LibreOffice Baseを終了する。
  3. 差し込み印刷の実行
    1. LibreOfficeで「はがき宛名書き.odt」を開く。
    2. ファイルメニューから「印刷」を選択する。「ドキュメントにアドレス データベースのフィールドが含まれています。差し込み印刷を実行しますか?」 という確認メッセージが表示されるので、「はい」ボタンを押す。
    3. 「差し込み印刷」ダイアログが表示されるので、フィルターで印刷対象の データを選択するなどして「OK」ボタンを押す。
    4. 「印刷」ダイアログが表示されるので、「LibreOffice Writer」タブを 選択し、「ページの背景」のチェックを外して「OK」ボタンを押して、印刷を 開始する。

差し込み印刷のカスタマイズ

  1. 住所の数字を漢数字に変換

    LibreOffice Calcを開き、住所のセルを参照して以下のようにセル関数を 定義する。

    =JIS(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(住所セル参照,"0","〇"),"1","一"),"2","二"),"3","三"),"4","四"),"5","五"),"6","六"),"7","七"),"8","八"),"9","九"),"-","ー"))
  2. 枠を使用して住所を印刷

    枠を使用すると、矩形領域と配置場所を指定することができる。Writerの テンプレートで枠を定義して住所を差し込み印刷するための手順は以下の通り。

    1. Writerの挿入メニューからフレーム⇒対話的に枠を挿入を選択して 枠の大きさと配置位置を指定して、枠を作成する。
    2. 枠を選択して、右クリックメニューで「アンカー」⇒「ページに」を 選択する
    3. 枠の中をクリックして、枠の中でカーソルが点滅していることを確認 したら、挿入メニューからフィールド⇒他のフィールドを選択して フィールドダイアログを開く
    4. フィールドダイアログの「データベース」タブを選択し、 フィールドタイプから「差し込み印刷フィールド」、データベースの選択 から はがき宛名書き⇒住所録データ⇒差込対象の項目 を選択する。
    5. フィールドを選択した状態で右クリックメニューから「段落」を 選択し、段落ダイアログを開いて以下の項目を設定する。
      • 配置タブを先駆し、「罫線で位置合せ」のチェックを外す。文字の配置の 行の位置を「中央」に設定する。
    6. 枠を選択し、右クリックメニューから「プロパティ」を選択して枠の プロパティ画面を開き、以下の項目を設定する。
      • 種類タブを選択し、「高さ」の「自動」にチェックが付いていることを 確認する。
      • オプションタブを選択し、「文字の方向」のドロップダウンリストから 「右から左 (縦書き)」を選択する。
      • 折り返しタブを選択し、「設定」で「折り返しなし」を選択する。また、間隔の 左右上下を全て「0cm」に設定する。
      • 外枠タブを選択し、外枠の線をなしに、内容までの間隔を0cmに設定る。
      • 透過性タブを選択し、「透過」のラジオボタンを選択して、値を「100%」に 設定する。
  3. 試行錯誤のあれこれ
    • レイアウト用の縦書きテキスト枠の追加手順
      1. Writerの挿入メニューからフレーム⇒対話的に枠を挿入を選択して 枠の大きさと配置位置を指定して、枠を作成する。
      2. 枠を選択して、右クリックメニューで「アンカー」⇒「ページに」を 選択する
      3. 枠が選択状態のまま右クリックメニューから「オプション」を選択 して枠画面を開き、以下の項目を設定する。
        • 「オプション」タブの「文字の方向」:右から左へ(縦書き)
        • 「外枠」タブ
          • 線を引く位置:プリセットから枠なしを選択
          • パディング:0 cm
    • レイアウト枠と文字の位置がずれた場合
      1. レイアウト枠を選択して右クリックメニューから「プロパティ」または 「位置とサイズ」を選択してダイアログを開く
      2. 「種類」タブの「位置」の縦横の基準を「ページ全体」全体にして、 「OK」ボタンを押す
      3. 位置を再調整する

Red Hat Enterprise Linux Compatible (fc42)

Fedora and Red Hat Enterprise Linux

Red Hat Linux Release Relase Date Based on
Red Hat Enterprise Linux 7 2014-06-10 Fedora 19
Red Hat Enterprise Linux 8 2019-05-07 Fedora 28
Red Hat Enterprise Linux 9 2022-05-17 Fedora 34
Red Hat Enterprise Linux 10 2025-05-20 Fedora 40
参考文献

Rocky Linux

  • Rocky Linux の特徴
    • 「アメリカのトップエンタープライズ Linux ディストリビューションとの間で、 バグをも含めて 100% の互換性を持つように設計されたコミュニティ商用OS」 (Rocky Linux Project より)
    • つまり、CentOS 8 Stream は アップストリームに転換したが、Rocky Linux は 従来の CentOS 8 と同じダウンストリームである
    • AWS、Google Cloud、Microsoft Azure と言った大手クラウドベンダーが スポンサーとなっている
参考文献

Remmina (fc43) - Remote Desktop client

パッケージのインストール

# dnf install remmina

RDPの設定

以下の手順を実行して、RDPの設定画面を開く。

  1. Remmina のメインウィンドウを開く。
  2. 画面上部の「Remminaメインメニュー」アイコンをクリックして「設定」を 選択して、「Remminaの設定」画面を開く。
  3. 設定画面の左側の項目から「RDP」を選択する。
RDPの接続先が Linux ホストの場合
  • キーボードレイアウト: 「自動検出」または「Japanese」
  • クライアントのキーボードマッピングを使用する: チェックを付ける

    「クライアントのキーボードマッピングを使用する」にチェックを付けないと、 キーボード右上の「\(|)」キーが無効になる。

RDPの接続先が Windows ホストの場合
  • キーボードレイアウト: 「Japanese」

    キーボードレイアウトに「自動検出」を設定すると、RDP接続先の Windows ホスト で「漢字」キーによる日本語入力への切り替えができない。

  • クライアントのキーボードマッピングを使用する: チェックを付けない

    この場合は、「漢字」キーによる日本語入力(ローマ字変換)が有効になるが、 キーボード右上の「\(|)」キーが無効になる。

    「クライアントのキーボードマッピングを使用する」にチェックを付けると、 「漢字」キーで日本語入力に切り替えても日本語入力(ローマ字変換)が有効と ならず、英数字しか入力できない。

接続先ホストごとの設定

以下の手順を実行して、接続先ホストごとの設定画面を開く。

  1. Remmina のメインウィンドウを開く。
  2. 接続先の一覧から設定対象のホストの業を選択して、右クリック>編集 を 選択して、「リモート接続プロファイル」画面を開く。
RDPの接続先が Windows ホストの場合

Windows ホストに RDP 接続した場合は、接続先の Windows の設定でディスプレイの 解像度が設定できないので、以下の設定をする。

  • 「基本設定」タブ
    • 解像度
      • カスタム: これを選択してディスプレイの解像度を設定する

Remote Desktop Service (fc29)

xrdpのインストール

以下のコマンドを実行して、xrdpをインストールする。なお、「tigervnc-server」 または「tigervnc-server-minimal」パッケージがインストールされていない場合は どちらかをインストールすること。

# dnf install xrdp xrdp-selinux

SELinuxの設定

備 考

xrdp-selinuxパッケージが提供されるようになったことから、SELinuxの設定は 不要になったと思われる。

以下のコマンドを実行して、xrdp、及びxrdp-sesmanに"bin_t"のラベル付けをして 制限のあるドメインへの移行をしないようにする。

# chcon -t bin_t /usr/sbin/xrdp /usr/sbin/xrdp-sesman

設定ファイルの編集

  • /etc/xrdp/xrdp.ini ファイルの編集

    「max_bpp=32」を「max_bpp=24」に変更して、色数を24に制限する。

  • /etc/xrdp/sesman.ini ファイルの編集

    「AllowRootLogin=true」を「AllowRootLogin=false」に変更して rootユーザーがRemote Desktop接続できないようにする。

xrdpの自動起動設定

以下のコマンドを実行して、xrdpが自動起動するように設定する。

# systemctl enable xrdp

ファイアウォールの設定

# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="<networkaddr>/<netmask>" port port="3389" protocol="tcp" accept'
# firewall-cmd --reload
  • networkaddr/netmaskには、「192.168.1.0/24」のように設定する
  • 上記の設定内容は以下の通りである。
    • publicゾーンに対して永続的な設定をする
    • networkaddr/netmaskからのIPV4の接続について、tcpポート3389を 許可する

TOPICS

  • Remote Desktop でログインできるがその後エラーとなる場合

    Remote Desktop でログインすると、「login successful for display ##」と表示 された後に「VNC error - problem connecting」と表示される場合は、接続先の ホストのログイン・ユーザーのホームディレクトリの下に「.Xclients」ファイルが 存在するか確認する。もし存在しなければ、以下の手順を実行する。

    1. 「vi .Xclients」コマンドを実行して、以下の内容を記述する。
      Desktop Environment 記述内容
      xfce startxfce4
      kde startkde
      lxde startlxde
      gnome gnome-session
      mate mate-session
      その他 <Desktop Environmentの名前>
    2. 「chmod a+x .Xclients」コマンドを実行して、.Xclients ファイルに 実行権限を設定する。

rpm-build (fc33)

RPMのビルド環境の設定

以下のコマンドを実行して、rpm-buildパッケージをインストールする。

# dnf install rpm-build

RPMのビルドは、一般ユーザ(root権限を持たないユーザ)で実行するので、ビルドを 実行するユーザーでログインして以下のコマンドを実行して、作業用のディレクトリ を作成する。

$ mkdir -p ${HOME}/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

RPMパッケージのビルド

  • アーカイブ・ファイルからビルドする場合

    ソースコード及びSPECファイルがアーカイブされたファイルは、以下のコマンドを 実行して、バイナリパッケージ(rpmファイル)、及びソースパッケージ (src.rpmファイル)を生成する。

    $ rpmbuild -ta <ファイルのパス>
  • SRPMからビルドする場合
    1. SRPMをダウンロードする

      ~/rpmbuild/SRPM ディレクトリに移動して、以下のコマンドを実行する。

      $ dnf download --source <パッケージ名>
    2. SRPMをインストールする

      以下のコマンドを実行して、SRPMからバイナリパッケージをビルドする。

      $ rpmbuild --rebuild <SRPMファイル名>

      つまり、ソースパッケージをインストールした後に準備、コンパイル、 インストールを行ってバイナリパッケージをビルドする。バイナリパッケージの ビルドが終わったら、SRPMより展開されたソース、specファイル、ビルド ディレクトリは削除される。

spec ファイルの作成

  1. spec ファイルの例
    %define make %__make
    
    # Basic information
    Name:           cello
    Version:        1.0
    Release:        1%{?dist}
    Summary:        Hello World example implemented in bash script
    License:        GPLv3+
    # See available group at https://vinelinux.org/docs/vine6/making-rpm/group-list.html
    Group:          System/Libraries
    URL:            https://www.example.com/%{name}
    
    # Required Information when building package
    Source0:        https://www.example.com/%{name}/releases/%{name}-%{version}.tar.gz
    Patch0:         cello-output-first-patch.patch
    BuildRoot:      %{_tmppath}/%{name}-%{version}-root
    
    # Define tags for package names and building.
    # do not building debug packages.
    %define debug_package %{nil}
    
    # Dependency information
    Requires:       foo
    BuildRequires:  foo-devel
    BuildRequires:  gcc
    BuildRequires:  make
    
    # Detail information
    %description
    The long-tail description for our Hello World Example implemented in C.
    
    %prep
    %setup -q
    
    %patch0
    
    %build
    %configure
    %make
    
    %install
    %make_install
    
    %clean
    rm -rf %buildroot
    
    %post -p /sbin/ldconfig
    
    %postun -p /sbin/ldconfig
    
    %files
    %defattr(-,root,root)
    %license LICENSE
    %dir /usr/lib/%{name}/
    %{_bindir}/%{name}
    %{_libdir}/*.a
    %{_libdir}/*.so
    %{_libdir}/*.la
    
    %changelog
    * Tue May 31 2016 Adam Miller <maxamillion@fedoraproject.org> - 1.0-1
    - First cello package

    spec file example

  2. Macro
    • Built-In RPM Macro の確認
      $ rpm --showrc
    • マクロの定義
      %define <name> <body>
    • マクロの参照
      • %{name}

        名前が name のマクロを実行/変数の値の返却をする。マクロが定義されて いない場合はエラーとなる。

      • %{?name}

        名前が name のマクロを実行/変数の値の返却をする。マクロが定義されて いない場合は何もしない。

  3. パッケージの構成要素
    1. パッケージ情報

      ソースコードをコンパイル、インストールする前に、パッケージの情報や、 ビルドに必要な情報を定義する。

      • Name - パッケージ名を指定する。設定内容は、%{name} で参照可能。
      • Version - パッケージのバージョンを指定する。設定内容は、%{version} で 参照可能。
      • Release - リリース番号(とディストリビューション名)を指定する。 設定内容は、%{release} で参照可能。
      • Summary - パッケージの概要(簡単な説明)を指定する。
      • License - ライセンスを指定する。
      • Group - パッケージの種類を指定する。最近は省略されることも多い。設定 可能なグループは、 Vine Linux で使用できるGroup一覧 を参照のこと。
      • URL - アプリケーションのホームページのURLを指定する。
      • Source<num> - ソースファイル名を指定する。複数のソースがある場合は、 0 から始まる番号を末尾に付ける。URLで指定すると、ファイル名の部分のみを 使用する。
      • Patch<num> - (省略可) パッチファイル名を指定する。指定方法は、 Source<num> と同様である。
      • BuildRoot - インストール先のルートディレクトリを指定する。例のように 指定した方が良い。%{buildroot} または $RPM_BUILD_ROOT で参照可能。
      • Requires - 作成したパッケージを実行するために必要なパッケージを指定 する。

        以下のコマンドを実行すると、コマンドやライブラリが依存している パッケージを表示することができる。

        $ rpm -qf `ldd <ファイルのパス> | grep '=>' \
          | sed  -e 's/^.* => //g' -e 's/ \(.*\)$//g'` | sort -u
      • BuildRequires - パッケージをビルドするために必要なパッケージを指定する。
      • %description - 詳細な説明を記述する。
    2. %prep section

      ソースコードのアーカイブファイルを解凍したり、パッチを適用したりする処理を 記述する。これらの処理は、%setup マクロ、%patch マクロにより実行する。

      • %setup マクロ

        %setup マクロは、Sourceタグで指定したソースコードのアーカイブファイルを 解凍した後に、「ビルド・ディレクトリ」(コンパイルやインストールを 実行するディレクトリ)に移動する処理を実行するものである。

        • 引数なしの場合は、ビルド・ディレクトリは、%{name}-%{version} となる。マクロを実行すると、Source0 タグでい指定したソースファイルを 解凍した後、ビルド・ディレクトリに移動する。
        • -n <dir-name> を指定すると、<dir-name> がビルド・ディレクトリと なる。マクロを実行すると、Source0 タグで指定したソースファイルを解凍 した後、ビルド・ディレクトリに移動する。
        • -b <num> を指定すると、ビルド・ディレクトリに移動する前に、 Source<num> タグで指定したソースファイルを解凍し、その後ビルド ・ディレクトリに移動する。
        • -a <num> を指定すると、ビルド・ディレクトリに移動してから、 Source<num> タグで設定したソースファイルを解凍する。
      • %patch マクロ

        %patch マクロは、Patch タグで指定したパッチファイルを適用する処理を 実行するものである。

        • 引数なしの場合は、Patch0 で指定したパッチファイルを使用して patch コマンドを実行する。
        • -P <num> を指定すると、Patch<num> タグで指定したパッチファイルを 使用して、patch コマンドを実行する。
        • -p <num> を指定すると、そのパラメータが patch コマンドにそのまま 渡される。
      参考文献
    3. %build section

      「make」コマンドに相当する処理を記述する。ビルド・ディレクトリに移動 した後に、%build section で記述した処理が実行される。

    4. %install section

      「make install」コマンドに相当する処理を記述する。ビルド・ディレクトリに 移動した後に、%install section で記述した処理が実行される。

      • %make_install マクロを実行すると、BuildRoot タグで指定したディレクトリ がインストール先のルートディレクトリになる。
      • make install コマンドや、install コマンドを直接記述する場合は、コマンド 引数にインストール先ルートディレクトリを指定すること。
        make installの例
        make install DESTDIR=<インストール先ルートディレクトリ>
    5. %files section

      BuildRoot タグで指定したインストール先ルートディレクトリの下に配置された ファイルの中で、パッケージに含めるものを指定する。%files section では、 以下のマクロを使用するか、ファイルやディレクトリのパスを指定する。

      • %defattr(mode,owner,group[,dir-mode])
        • これ以降の記述で指定されるファイル、ディレクトリのモード、オーナー、 グループの既定値を指定する
        • ディレクトリ、及びサブディレクトリにファイルとは異なるモードを 指定する場合は、4番目の引数 dir-mode を指定する。
        • 引数に「-」を指定すると、その項目は既定値の設定が行われない。
      • %license file-path

        ライセンスを説明したファイルを指定する。

      • %dir dir-patch

        指定したディレクトリのみ(配下にファイル、ディレクトリがない)を パッケージに含める。

      • %config file-path

        file-path をパッケージに含め、これが設定ファイルであることを示す。 パッケージをアップデートを実行した際、file-path のファイルが編集 されていたら、元のファイルは末尾に「.rpmsave」を付けた名前に変更して からパッケージのファイルを配置する。

        %config(noreplace) file-path を指定すると、パッケージのアップデート を実行した際、file-path のファイルが編集されていたら、元のファイル名 は変更せずに、パッケージからインストールされるファイルのファイル名の 末尾に「.rpmnew」を付けて配置する。

      ファイルやディレクトリの指定について

      • ワールドカード(部分一致を含む)を指定することができる。
      • ディレクトリを指定すると、その配下のファイル・ディレクトリもパッケージ に含まれる。
    6. %clean section

      ビルド・ディレクトリを削除する処理を記述する。例のように、ビルド・ ディレクトリを削除するスクリプトを記述すのが一般的である。

    7. %post section

      パッケージがインストール/更新された後に実行する処理を記述する。 パッケージが shared library をインストールした場合は、例のように ldconfig コマンドを実行する処理を記述する。

    8. %postun section

      パッケージが削除された後に実行する処理を記述する。パッケージが shared library を削除した場合は、例のように ldconfig コマンドを実行する処理を 記述する。

    9. %changelog section

      パッケージの改訂履歴を記述する。

  4. その他
    • 条件分岐

      分岐する条件が成立する場合の処理、成立しない場合の処理を次の書式で記述 することができる。

      %if <条件>
      <条件が成立する場合の処理>
      %else
      <条件が成立しない場合の処理>
      %endif

      条件は、条件式または 0か0意外の数値で指定する。 条件式は以下の形式で指定する。

      • 値1 == 値2

        値1値2 が等しい

      • 値1 != 値2

        値1値2 が異なる

      • 数値1 > 数値2

        数値1数値2 より大きい

      • 数値1 < 数値2

        数値1数値2 より小さい

      数値の場合は、0以外の場合は真、0の場合は偽となる。

      参考文献
    • dist タグの使い方

      dist タグの設定内容や、ディストリビューションに関連するタグについては、 下記の参考文献を参照のこと。

      参考文献
参考文献(rpmbuild全般)

ビルドに関連するトピックス

  • cmake を実行すると、エラーメッセージ CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found. が表示される

    解決方法

    • yum または dnf で 「group install "Development tools"」を実行してから、 cmake パッケージをインストールする。
    • または、gcc-c++、make パッケージをインストールしてから cmake パッケージを インストールする。

RPM Fusion Repository (fc25)

以下のコマンドを実行して、Fedora用のRPM Fusionのリポジトリを有効にする。

# dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
出 典

s-nail & sendmail (fc40)

パッケージのインストール

OSユーザーへのメール通知を行う場合は、メール送信に必要なパッケージを事前に インストールしておく必要がある。パッケージのインストール手順は以下のとおり。

  1. パッケージのインストール

    以下のコマンドを実行して、s-nail、sendmail パッケージをインストールする。

    # dnf install s-nail sendmail
  2. sendmail サービスの有効化
    # systemctl enable --now sendmail

これらのパッケージをインストールすれば、特にインストールしたパッケージの設定 なしで mailx コマンドで OSユーザーにメッセージを送信したり、OSユーザーが メッセージを確認したりできる。

備 考
  • sendmail の既定の設定

    既定の設定では、sendmail はローカルコンピューター以外のホストからの接続を 受け付けない。つまり、ローカルのメールクライアント(mailx)からの接続しか 受け付けない設定となっている。

  • mailx コマンドの利用方法

    参考文献「Solaris ユーザーズガイド (上級編) > 第 7 章 メールの使い方 > mailx の基本」を参照のこと。

参考文献

SELinux (fc27)

SELinuxの概要

DAC(任意アクセス制御:ファイルのアクセス権による制御)が行われた後に適用され、 プロセスが事前に許可されたオブジェクト(ファイル、ディレクトリ、デバイスなど) にしかアクセスできないようにする仕組みを提供する。SELinuxが有効な場合は、 アクセスが許可されていないプロセスとオブジェクトの組み合わせはエラーとなる。

  1. SELinuxの用語
    • ドメイン

      プロセスに対して割り当てられたラベル。プロセスとドメインの関連付けは、 「ドメイン遷移」によって決定される。

    • タイプ

      オブジェクト(ファイル、ディレクトリ、デバイスなど)に割り当てられた ラベル。

    • クラス

      オブジェクトの種類。ファイル、ディレクトリ、ソケットなどの種類を識別する。

    • TE (Type Enforcement)

      SELinuxのアクセス制御の定義。ドメインがアクセス可能なタイプとクラスに対する 権限を定義する。言い換えると、プロセスがアクセス可能なファイル/ ディレクトリとそれに対する操作(読み書き、実行など)を定義したものである。

    • ドメイン遷移

      プロセスのドメインは起動元のプロセスのドメインを引き継ぐが、起動元の プロセスのドメインと起動したコマンド(のファイルに設定されたラベル)を 指定して、起動後のプロセスのドメインを定義することができる。カーネルの ドメイン(kernel_t)からドメイン遷移を定義することにより個々の実行ファイル が実行されたときのプロセスのドメインを決定することができる。

    • RBAC (Role-Based Access Control)
      • SELinuxユーザー

        SELinuxのポリシーを設定するときに使用するユーザー。SELinuxユーザーを Linuxユーザーに関連付けて、SELinuxのポリシーを設定することになる。 Fedora /RedHat Linuxの規定の設定では、LinuxユーザーはSELinuxユーザーに よるアクセス制限をしないようになっている(正確にはLinuxユーザーの規定の SELinuxユーザーが「unconfined_u」に設定されており、このSELinuxユーザーに 対しては全てのドメインのアクセス許可ルールが適用されている)。

      • ロール

        ロールにドメインを関連付けて、そのドメインに対してTEの設定を行うことに より、ロールが実行できるプロセスや、ロールがアクセス可能なオブジェクト を制限することができる。また、ロールをLinuxユーザーに関連付けることに より、Linuxユーザー ⇒ SELinuxユーザー ⇒ ロール ⇒ ドメイン ⇒ TEの定義の 関連付けにより、Linuxユーザーが起動したプロセスのオブジェクトへの アクセス可否を設定することができる。ただし、Fedora 及び RedHat Linuxの SELinuxのポリシーはデフォルトでは、Linuxユーザーに対して全てのドメイン のアクセス制御が適用されているため、ロールでのアクセス制御を行う場面は あまりないと思われる。

      • ロール遷移

        TEの設定で「allow role1_r { role2_r ... }」とすると、role2_r ... の ロールに関連付けられたドメインのアクセス許可が適用される。ただし、 SELinuxユーザがrole2_r ... のロールに関連づけられていない場合は、ロール 遷移が有効にならないので注意が必要である。

      備 考
      • ドメイン、タイプについては、それぞれ「〜のラベル」という表現をして いるが、正しくは「プロセスのタイプ」、「オブジェクトのタイプ」である。 しかし、この表現だと「タイプ」の区別が分かりにくいため、「ラベル」と いう表現を使用した。
      • SELinuxユーザー、ロールの設定方法については、本セクションの最後の 「その他」を参照のこと。
  2. ポリシー適用の流れ

    システム起動時に、apacheユーザー(Linuxユーザー)で起動されたhttpdプロセスが、 /var/www/html ディレクトリ配下のコンテンツにアクセスできるようにするために、 SELinuxのポリシー(TE及びRMACの設定)がどのように設定されているかを説明 する。

    • 概要
      1. ドメイン遷移の設定により、httpdプロセスのドメイン(httpd_t)が決定 する。
      2. /var/www/html ディレクトリのラベル付けにより、オブジェクト (ファイル、ディレクトリ)のタイプ(httpd_sys_content_t)が決定する。
      3. TEの設定で、httpd_tドメインに対してhttpd_sys_content_tタイプの file、dirクラスに対して、read、openなどの操作を許可することにより、 httpdプロセスが/var/www/html ディレクトリ、及びその配下のファイル、 ディレクトリにアクセスすることが可能になる。ただし、Linuxユーザーと httpdプロセスの関連付け(後述)が行われないと、apacheユーザーで起動された httpdプロセスのアクセス制御は確立されないことに注意すること。
      4. Linuxユーザーとドメインとの関連付け

        以下の関連付けを行うことで、apacheユーザー(Linuxユーザー)とhttpdの ドメイン(httpd_t)を関連付けて、apacheユーザーで起動されたhttpdプロセス に対して、上記のアクセス制御の設定が適用されるようにする。

        1. LinuxユーザーとSELinuxユーザーの関連付け
        2. SELinuxユーザーとロールの関連付け
        3. ロールとドメインの関連付け
    • TE(Type Enforcement)の設定
      1. httpdプロセスのドメイン遷移
        TEの設定 定義の場所
        1 type_transition kernel_t init_exect : process init_t initモジュール
        2 type_transition init_t httpd_exec_t : process http_t apacheモジュール
        1. /usr/lib/systemd/systemd は「init_exec_t」のラベル付けがされている ので、システム起動時に systemd(service manager)が起動すると、この プロセスのドメインが「init_t」になる。
        2. /usr/sbin/httpd は「httpd_exec_t」のラベルが付与されているので、 systemd からhttpdが起動されると、起動されたプロセスのドメインが 「httpd_t」になる。
      2. ディレクトリ、ファイルのラベル付け

        httpd-filesystemパッケージのインストール時に、/var/www/html ディレクトリに「httpd_sys_content_t」のラベルが付与されている。従って、 この配下に作成されたディレクトリ、ファイルは明示的にラベルをつけない 限り、「httpd_sys_content_t」ラベルが付与されることになる。

      3. ドメインのアクセス許可の設定
        TEの設定 定義の場所
        1 allow httpd_t httpd_sys_content_t : file { read open ... }; apacheモジュール
        2 allow httpd_t httpd_sys_content_t : dir { read open ... }; apacheモジュール

        httpd_tドメインに対して、httpd_sys_content_tのラベルが付けられた ファイル、及びディレクトリに対して、read、open、その他の操作が許可 される。

      以上のTEの設定により、システム起動時にservice managerにより起動されたhttpd プロセスが、/var/www/html ディレクトリ配下のディレクトリ及びファイルへの アクセスがSELinuxにより許可されたことになる。

    • RBAC(Role-Based Access Control)
      1. LinuxユーザーとSELinuxユーザーの関連付け
        RBACの設定 定義の場所
        1 __default__:unconfined_u:s0-s0:c0.c1023 /etc/selinux/targeted/seusers

        /etc/selinux/targeted/seusers ファイルの設定により、apache Linuxユーザー はunconfined_u SELinuxユーザーに関連付けられている。

      2. SELinuxユーザーとロールの関連付け
        RBACの設定 定義の場所
        1 user unconfined_u roles { system_r unconfined_r } unconfineduserモジュール

        unconfined_u Linuxユーザーは、system_r、unconfined_r の2つのロールに 関連付けられている。

      3. ロールとドメインの関連付け
        RBACの設定 定義の場所
        1 role system_r types { httpd_t ... } apacheモジュール

        system_rロールは、httpd_tドメインに関連付けられている。

      以上のRBACの設定により、apache(Linuxユーザー) ⇒ unconfined_u (SELinuxユーザー) ⇒ system_r(ロール) ⇒ httpd_t(ドメイン)の関連付けが 成立し、apacheユーザーで起動されたプロセスは、TEのhttpd_tドメインの アクセス制御が適用されることになる。

    以上のTEの設定、及びRBACの設定により、システム起動時にservice managerに よってapacheユーザーで起動されたhttpdプロセスは、/var/www/html ディレクトリ 及びその配下のディレクトリ、ファイルに対してSELinuxによりアクセスが許可 されたことになる。

  3. モジュールの定義とインストールの流れ
    1. 前提

      RBACによるアクセス制御は行わない。

    2. 必要なパッケージのインストール
      #dnf install checkpolicy policycoreutils
    3. SELinuxポリシーの定義
      • モジュールのTEファイルを作成し、ドメインがアクセスできるオブジェクトと 権限を設定する。TEファイルの書式については、本セクションの 「Policy Package モジュール」を参照のこと。
      • プロセスに割り当てられたドメインを確認する場合は、 「ps -ZC <プロセス名>」コマンドを実行する。
      • ファイルに割り当てられたタイプを確認する場合は、「ls -Z ファイル名」 コマンドを実行する(ディレクトリの場合も同様)。
      • 既に設定されたモジュールの定義を参考にする場合は、root権限で 「semodule -E <モジュール名>」コマンドでモジュールの設定をパッケージ ファイルに抽出して、「sedismod <パッケージファイル名>」コマンドで モジュールの設定内容を確認する。
      • SELinuxのログ(SELinuxのアクセス拒否のログ)から拒否されたアクセスを 許可するためのポリシーを確認する場合は、ausearchコマンドとaudit2allow コマンドを実行する。
        # ausearch -c \<コマンド名\> | audit2allow -a

        [コマンドを指定してポリシーを確認するコマンドの例]

    4. パッケージの作成とインストール
      1. TEファイルの作成

        TEファイルにSELinux policyの定義を記述する。

      2. モジュールのコンパイル

        「checkmodule -m -o <モジュールファイル名> <TEファイル名>」 コマンドを実行して、モジュール・ファイルを作成する。

      3. パッケージの生成

        「semodule_package -o <パッケージファイル名> -m <モジュールファイル名>」 コマンドを実行して、パッケージファイルを作成する。

      4. パッケージのインストール

        root権限で「semodule -i <パッケージファイル名>」コマンドを実行して パッケージをインストールする。

SELinuxの状態とモード

  1. 一時的な切り替え
    • 状態(有効/無効)の切り替え

      SELinuxが原因でkernel panicが発生してシステムが起動できなくなった場合は、 以下の手順でSELinuxを一時的に無効にしてシステムを起動することができる。

      1. システム起動時にGRUBメニューが表示されたら、起動対象のカーネルを 選択して「e」キーを押してメニュー編集モードにする。
      2. 「linuxfi ...」の行の最後に空白を空けて「selinux=0」を追加する。
      3. Ctrl + x キーを押してカーネルを起動する。
      注 意

      SELinuxを無効化してシステムを起動した後、通常の手順でシステムを再起動 (SELinuxが有効な状態)すると、ファイル、ディレクトリのラベル付けがやり 直されてしまうため、「chcon」コマンドで設定したラベルの設定が失われて しまうので注意すること。

    • モードの切り替え

      SELinuxが有効な状態では、以下のコマンドでモードの確認と変更をすることが できる。

      1. モードの確認

        以下のコマンドを実行すると、SELinuxのモードを確認することができる。

        $ getenforce
        • Enforcing - SELinuxポリシーが適用されている。
        • Permissive - SELinuxポリシーは適用されないがSELinuxのアクセス拒否の ログは出力される。
        • Disabled - SELinuxは無効である(SELinuxポリシーは適用されずSELinux アクセス拒否のログも出力されない)。
      2. モードの変更

        以下のコマンドを実行すると、SELinuxのモードを変更することができる。

        # setenforce {0|1}
        • 1を指定 - Enforcingモードにする
        • 0を指定 - Permissiveモードにする
  2. 永続的な切り替え

    /etc/selinux/config ファイルを編集して、SELinuxのモード及び状態を設定する。 システムを再起動すると、設定が有効になる。

    • Enforcingモードに設定する
      SELINUX=enforcing
      SELINUXTYPE=targeted
    • Permissiveモードに設定する
      SELINUX=permissive
      SELINUXTYPE=targeted
    • SELinuxを無効にする
      SELINUX=disabled
      SELINUXTYPE=targeted
      注 意
      • 「SELINUX=disabled」とすると、SELinuxアクセス拒否のログも出力されなく なるので、この設定は薦められない。Permissiveモードで運用すべきで ある。
      • 「SELINUX=disabled」の状態から、EnforcingモードまたはPermissive モードに変更すると、ファイル・ディレクトリのラベル付けがやり直されて しまうため、「chcon」コマンドで設定したラベルの設定が失われてしまう ので注意すること。
    SELINUXTYPEについて

    「SELINUXTYPE=mls」とすると、Multi Level Security protectionとなり、 大変強力なアクセス制御を行うことができるが、素人では設定の手が負えない ので、設定は「SELINUXTYPE=targeted」のままとしておく。

情報収集ツール

  1. パッケージのインストール
    # dnf install setools-console
  2. sesearch ユーティリティ
    1. ドメインのallowルール表示

      以下のコマンドを実行すると、allowルールを表示する。

      $ sesearch --allow [{-ds|-rs} -s <source_type>] [{-dt|-rt} -t <target_type>] \
        [-c <object_class>] [-b <boolean_name>]
      • 「-ds -s <source_type>」 を指定すると指定されたドメイン(プロセスの ラベル)が許可されているルールを表示する。「-ds」の代わりに「-rs」を 指定すると正規表現にマッチしたものを表示する。
      • 「-dt -t <target_type>」を指定すると、指定されたタイプ(オブジェクトの ラベル)に許可されているルールを表示する。「-dt」の代わりに「-rt」を指定 すると正規表現にマッチしたものを表示する。
      • 「-c <object_class>」を指定すると、指定されたオブジェクトクラス (ファイル/ディレクトリ等)に一致するルールを表示する。
      • 「-b <boolean_name>」を指定すると、指定されたBOOL値で定義されたルールを 表示する。
      $ sesearch --allow -rs -s 'httpd.*_t' -dt -t httpd_sys_rw_content_t -c file

      ラベルが「httpd.*_t」にマッチするプロセスが、「httpd_sys_rw_content_t」 にラベル付けされたファイルに許可されているルールを表示する。

      備 考
      • 「--allow」だけを指定した場合は、全てのallowルールを表示する。
      • -ds/-rs/-dt/-rt オプションを指定しない場合 (例:sesearch -s <source_type>)は、attributeによるallowルールも 表示する。attributeについてっは、本セクションの最後の「その他」を 参照のこと。
    2. ドメイン遷移の表示

      以下のコマンドを実行すると、ドメイン遷移の設定が表示される。

      $ sesearch -T [[{-ds|-rs}] -s <source_type>] [[{-dt|-rt}] -t <target_type>] \
        [-c <object_class]
      • 「-s <source_type>」を指定すると、遷移元のドメインが指定された ドメインのものであるルールを表示する。
      • 「-t <target_type>」を指定すると、ドメイン遷移の対象となるプロセスの ファイルに付与されたラベルが指定されたものであるルールを表示する。
      • 「-c <object_class>」を指定すると、ドメイン遷移の変更対象となる クラスが指定されたものであるルールを表示する。
      • -ds、-rs、-dt、-rt オプションについては、「ドメインのallowルールの表示」 と同様である。
        • 「-c process」を指定すると、プロセスのラベルを変更するルール (ドメイン遷移のルール)を表示する。
        • 「-c dir」を指定すると、ディレクトリのラベルを変更するルールを表示 する。
    3. ロールのallowルールの表示

      以下のコマンドを実行すると、ロールのallowルールを表示する。

      $ sesearch --role_allow [[{-ds|-rs}] -s <source_role>] [[{-ds|-rs}] <target_role>
      • 「-s <source_role>」を指定すると、遷移元のロールが指定されたものである ルールを表示する。
      • 「-t <target_role>」を指定すると、遷移先のロールが指定されたものである ルールを表示する。
      • -ds、-rs、-dt、-rt オプションについては、「ドメインのallowルールの表示」 と同様である。
      備 考

      「alow <source_role> <target_role>」で設定されるルールは、 <source_role>のプロセスのロールを<target_role>のロールに切り替え 可能であるという意味である。

    4. ロール遷移の表示

      以下のコマンドを実行すると、ロール遷移の設定を表示する。

      $ sesearch --role_trans [[{-ds|-rs}] -s <source_role>] [[{-ds|-rs}] <target_type> \
        [-c <object_class>]
      • 「-s <source_role>」を指定すると、遷移元のロールが指定されたロールの ものであるルールを表示する。
      • 「-t <target_type>」を指定すると、ロール遷移の対象となるプロセスの ファイルに付与されたラベルが指定されたものであるルールを表示する。
      • 「-c <object_class>」を指定すると、ロール遷移の変更対象となるクラスが 指定されたものであるルールを表示する。ただし、ロール遷移の変更対象と なるクラスは「process」に限られるため、このオプションを指定する意味は ない。
      • -ds、-rs、-dt、-rt オプションについては、「ドメインのallowルールの表示」 と同様である。
  3. seinfo ユーティリティ
    • seinfo -x -b <bool値名>

      bool値の値を表示する。

    • seinfo -x -c <クラス名>

      クラス(ファイル、ディレクトリなど)の権限を表示する。

    • seinfo -x -t <タイプ名>

      タイプ名で指定されたドメイン、またはタイプを含むattributeを表示する。

    • seinfo -x -r <ロール名>

      ロールに関連付けられたドメインを表示する。

    • seinfo -x -u <SELinuxユーザー名>

      SELinuxユーザーに関連付けられたロールを表示する。

      備 考
      • 「-x」オプションを省略すると、bool値、クラス名などの名前のみを表示する。
      • <bool値>、<クラス名>などを省略すると、Policyで定義された全ての bool値、クラス名などを表示する。

ポリシー管理ツール

ポリシーの管理(SELinuxのラベルの設定、削除)は、semanage コマンドで行う。

  1. パケージのインストール
    # dnf install policycoreutils-python-utils
  2. ファイル、ディレクトリのラベル設定

    ファイル、ディレクトリに対してラベルを設定するためのコマンドを以下に示す。

    1. chcon コマンド

      chconコマンドはポリシー管理ツールではないが、これを使用して一時的に ファイルまたはディレクトリにラベルを付与することができる。

      # chcon [-R] [-h] -t <ラベル> <ファイル or ディレクトリ>
      • -R オプションを指定すると、再帰的にラベルを設定する。
      • -h オプションを指定すると、シンボリック・リンクそのものにラベルを設定 する。-h オプションを指定しない場合は、シンボリック・リンクの参照先に ラベルを設定する。
      • restorecon コマンドを実行すると、ファイル・ディレクトリのラベルは 「semanage fcontext」コマンドで設定したラベルに戻ってしまうことに注意 すること。

        [/var/www/htmlディレクトリに再帰的にラベルを設定する例]

        # chcon -R -h -t httpd_sys_content_t /var/www/html
    2. ファイルまたはディレクトリのラベル設定

      semanage fcontext コマンドを使用して、ファイルまたはラベルにタグを設定する ことができる。

      1. オブジェクトへのラベル設定を定義する
        # semanage fcontext -a -t <ラベル> "<ファイルまたはディレクトリの正規表現>"
        • ファイル /var/www/html/index.html にラベル httpd_sys_context_t を 設定する。
          # semanage fcontext -a -t httpd_sys_content_t "/var/www/html/index.html"
        • /var/www/html 及びその配下のファイルまたはディレクトリにラベル httpd_sys_context_t を再帰的に設定する。「(/.*)?」は、「/」から 始まる任意の文字列が0回または1回出現するという意味である。
          # semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
      2. 設定したラベルを有効にする

        以下のコマンドを実行して、設定したラベルを有効にする。

        # restorecon [-R] -v <ファイルまたはディレクトリ>
        • -R オプションを指定すると、指定したディレクトリとその配下のファイルや ディレクトリのラベルを有効にする。
        • -v オプションは設定されたラベルを表示するためのオプションである。
    3. ラベル設定の定義の確認

      以下のコマンドを実行すると、オブジェクト(ファイル、ディレクトリなど) へのラベル設定の定義の全てを出力する。

      # semanage fcontext -l [-C]
      • 「-C」オプションを指定すると、ローカル・カスタマイズ(semanage fcontextコマンドで定義した内容)のみを表示する。
      • ローカル・カスタマイズの設定内容は 「/etc/selinux/targeted/contexts/files」に保管されているが、このファイル を直接編集しないこと。
    4. ラベル設定の定義の削除
      1. ラベル設定の定義を削除する

        ラベル設定の定義の際に実行したコマンド「semanage fcontext -a ...」の 「-a」を「-d」に変えてコマンドを実行する。

        # semanage fcontext -d -t httpd_sys_content_t "/var/www/html(/.*)?"

        [ラベル定義削除のコマンドの例]

        「semanage fcontext -l -C」コマンドの結果をgrepで絞り込むなどして、 削除対象(ファイルまたはディレクトリの正規表現)を確認する。

      2. 削除した定義の反映

        以下のコマンドを実行して、ラベル定義の削除を有効にする。

        # restorecon [-R] -v <ファイルまたはディレクトリ>
        • コマンドのオプションは、「ファイルまたはディレクトリのラベル設定」を 参照すること。
  3. bool値の確認と設定

    SELinuxの設定は、モジュールを作成してTEの設定を行うことが基本だが、bool値の on/offを設定することにより、簡単にSELinuxのポリシーを設定することが可能で ある。

    1. bool値の一覧表示

      以下のコマンドを実行すると、SELinuxのbool値の名前、設定値(オン/オフ)、 デフォルト値、bool値の説明が一覧表示される。

      # semanage boolean -l
    2. bool値の定義内容確認
      $ sesearch -A -b <bool値の名前>
    3. bool値の設定

      以下のコマンドを実行して、bool値のオン/オフを設定する。

      # setsebool -P <bool値の名前> {on|off}
      bool値の設定の例
      # sesetbool -P httpd_unified on

      上記のコマンドを実行すると、httpd_t ドメインが httpd_sys_content_t タイプのディレクトリ、ファイルに対して、実行、読み込み、書き込みの操作を 可能にする。offの状態だと、httpd_t ドメインは、httpd_sys_content_t タイプのディレクトリ、ファイルに対して読み取り操作しかできない。

  4. ポート番号の追加

    ドメイン(プロセスに割り当てられたラベル)に関連付けられたポート番号の 設定は、semanage port コマンドで行う。

    1. ドメインに割り当てられたポート番号の確認
      # semanage port -l
    2. ドメインに関連付けるポート番号の追加
      # semanage port -a -t <ポートのタイプ> -p {tcp|udp} <ポート番号>

      Apache httpdのlistenポートに8080を追加するためのコマンドは以下のとおり。

      # semanage port -a -t http_port_t -p tcp 8088
    3. ドメインに関連づけられたポート番号の削除
      # semanage port -d -t <ポートのタイプ> -p {tcp|udp} <ポート番号>

      Apache httpdのlistenポートから8088を削除するためのコマンドは以下の とおり。

      # semanage port -d -t http_port_t -p tcp 8088

SELinuxのログ(audit daemon log)の検索

  • audit daemon logの検索

    エラーの原因となったコマンドと、開始日時を指定して、audit daemon logを検索 する場合は、以下のコマンドを実行する。

    # ausearch -c <コマンド> -ts MM/DD/YY
  • ログからSELinuxポリシー・ルールを表示する

    audit daemon logの内容から、TEファイルを作成するためのルールを表示するには、 以下のコマンドを実行する。

    # ausearch オプション ... | audit2allow -a

    上記のコマンドの出力例は以下の通りである。

    #============= httpd_sys_script_t ==============
    allow httpd_sys_script_t git_sys_content_t:dir search;
    
    #============= httpd_t ==============
    allow httpd_t git_sys_content_t:dir write;
    allow httpd_t git_sys_content_t:file map;
  • ログからモジュールを作成する

    以下のコマンドを実行すると、<モジュール名>.te ファイルと、 <モジュール名>.pp ファイルが生成される。

    # ausearch オプション ... | audit2allow -M <モジュール名>
    注 意
    • <モジュール名>は、「my-XXXX」の形式で付けることが推奨されている模様。
    • 「gitのプロセスと同様のアクセス許可をhttpdのプロセスにも与えたい」という ようなことを行いたい場合は、この方法ではトライ&エラーの繰り返しが続く ので、「semodule -E <モジュール名>」コマンド等を利用して、既存の設定を 確認してTEファイルを作成する手順を検討した方が良い。

Policy Package モジュール

  • モジュールの一覧表示
    # semodule --list=full

    モジュール名を絞りたい場合は、パイプラインで「grep」を実行するなどする。

  • モジュールの定義とインストール
    1. TE(Type Enforced)ファイルの記述

      以下の書式で、ドメイン名(プロセスのラベル)、タイプ名(ディレクトリ・ ファイルのラベル)を指定して、プロセスがクラス(ディレクトリ・ファイル)に 対して許可する操作を定義する。

      module <モジュール名> <バージョン>;
      # 定義済のドメイン、タイプ、クラス
      require {
          type <ドメイン名>;
          type <タイプ名>;
          class <クラス名> {<操作> ...};
      }
      # このモジュールで定義されたドメイン、タイプ
      type <ドメイン名>;
      type <タイプ名>;
      
      # プロセスがオブジェクトにアクセスを許可する設定
      allow <ドメイン名> <タイプ名> : <クラス名> {<操作> ...};
      ...

      [モジュールの定義の書式]

      備 考
      • モジュール定義は、ドメインのアクセス許可の設定の他に、SELinux ユーザー、ロール、ドメインそれぞれの関連付けの定義も可能である。 これらの定義方法は、本セクションの最後の「その他」 を参照のこと。
      • allowで複数のラベルや操作を指定する場合は、 「{ラベル1 ラベル2 ...}」のように記述する。

        例:「allow {httpd_t httpd_sys_script_t} git_sys_content_t : dir {read write ...}」

      • 何もない状態からTEファイルを記述するのは難易度が高いので、既存の設定 から流用したり、ausearchコマンドでSELinuxのログを検索するなどして TEファイルを記述する場合が多いと思われる。
      • <モジュール名>は、「my-XXXX」とするのが慣例のようである。
      • <バージョン>は、「1.0」「1.0.0」のようにする。
      • ディレクトリ・ファイルのラベル名が「XXXXX_rw_content_t」となっている 場合は、読み書き可能を許可することを意図している場合が多い。
      • ディレクトリ・ファイルのラベル名が「XXXXX_content_t」(「rwがない」)と なっている場合は、読み取りだけを許可することを意図している場合が多い。

      gitモジュールで git_script_t ドメインに対してディレクトリの操作を許可する 設定をしている例を以下に示す。

      module git 1.0.0;
      require {
        type var_t;
        class dir { ioctl read getattr lock search open };
        ...
      }
      type git_script_t;
      type git_script_exec_t;
      ...
      
      allow git_script_t git_script_exec_t : dir { ioctl read getattr lock search open };
      allow git_script_t var_t :  dir { getattr search open };
      ...

      [モジュール定義の例]

    2. モジュールのコンパイル

      以下のコマンドを実行して、<モジュール名>.te ファイルから <モジュール名>.mod ファイルを生成する。

      $ checkmodule -m -o <モジュール名>.mod <モジュール名>.te
    3. パッケージの生成

      以下のコマンドを実行して、<モジュール名>.mod ファイルから <モジュール名>.pp ファイルを生成する。

      $ semodule_package -o <モジュール名>.pp -m <モジュール名>.mod
    4. モジュール(パッケージ)のインストール

      以下のコマンドを実行して、<モジュール名>.pp ファイルをインストールする。

      # semodule [-X <優先度>] -i <モジュール名>.pp
      • <優先度>は、100, 300, 400などの数値を指定する。
      • -Xオプションを省略すると、優先度が400でモジュールがインストールされる。
      メ モ
      • Policy Packageのインストール先

        /var/lib/selinux/targeted/active/modules/<優先度> ディレクトリの下に モジュール名のディレクトリが作成され、その下にモジュールがインストール される。

  • モジュールの有効化、無効化
    # semodule {-d|-e} <モジュール名>

    有効化は-eオプション、無効化は-dオプションを指定する。<モジュール名>は、 モジュール一覧の表示で表示される名前を指定する。

  • インストール済みのモジュールの内容確認
    1. インストール済みのモジュールからパッケージを取得

      以下のコマンドを実行して、モジュールのパッケージ(ppファイル)をダウンロード する。

      # semodule -E <モジュール名>
    2. パッケージの内容を確認する
      $ sedismod <.ppファイルのパス>

      下記のようなメニューが表示されるので、表示させたい情報の項目を選択して 設定内容を確認する。

      Select a command:
      1)  display unconditional AVTAB
      2)  display conditional AVTAB
      3)  display users
      4)  display bools
      5)  display roles
      6)  display types, attributes, and aliases
      7)  display role transitions
      8)  display role allows
      9)  Display policycon
      0)  Display initial SIDs
      
      a)  Display avrule requirements
      b)  Display avrule declarations
      c)  Display policy capabilities
      l)  Link in a module
      u)  Display the unknown handling setting
      F)  Display filename_trans rules
      
      f)  set output file
      m)  display menu
      q)  quit
      
      Command ('m' for menu):  
      • 「1) display unconditional AVTAB」は、ドメインに対するallowルールを全て 表示する。
      • 「2) display conditional AVTAB」は、このモジュールで定義されたドメイン についてのallowルールを表示するらしい(マニュアルなどの情報が見つから ないので推測である)。

その他

  • attributeについて

    「attribute」は、複数のタイプ(ドメイン、オブジェクトのタイプ)を1つに まとめて扱うために使用する。以下にTEの定義の例を示す。

    module example 1.0;
    require {
      class file { read write ... };
    }
    # このモジュールで定義するattributeの宣言
    attribute my_domain;
    attribute my_content;
    # このモジュールで定義するドメイン、タイプ
    type my_exec1_t, my_domain;
    type my_exec2_t, my_domain;
    type my_content1_t, my_content;
    type my_content2_t, my_content;
    # attributeによるドメインのアクセス許可
    allow my_domain my_content : file { read write ... };

    [attributeを使用したTE定義の例]

    この例では、allowの「my_domain」は「{my_exec1_t my_exec2_t}」と同等で あり、また「my_content」は「{my_content1_t my_content2_t}」と同等である。

  • SELinuxユーザーの関連付け
    • SELinuxユーザーの関連付けの確認

      root権限で「semanage login -l」コマンドを実行して、Linuxユーザーがどの SELinuxユーザーに関連付けされているかを確認する。

    • SELinuxユーザーの関連付けの設定

      root権限で 「sudo semanage login -a -s <SELinuxユーザー名> <Linuxユーザー名>」 コマンドを実行して、SELinuxユーザーをLinuxユーザーに関連付ける。既に 関連付けられたLinuxユーザーを変更する場合は、root権限で 「semanage login -m -s <SELinuxユーザー> <Linuxユーザー>」コマンドを 実行する。

      注 意

      LinuxユーザーとSELinuxユーザーの関連付けは、1対1であることに注意する こと。

  • Linuxユーザーとロールの関連付け
    • Linuxユーザーとロールの関連付けの確認

      root権限で「semanage user -l」コマンドを実行して、Linuxユーザーがどの ロールに関連付けられているかを確認する。

    • Linuxユーザーとロールの関連付けの設定
      • senamageコマンドによる設定

        root権限で「semanage user -m -R "<ロール名> ..." <Linuxユーザー名>」 コマンドを実行して、Linuxユーザーとロールを関連付ける。

        # semanage user -m -R "system_r unconfined_r staff_r" staff_u

        [staff_u Linuxユーザーにロールを割り当てる例]

      • TE(モジュール)による設定

        TEの定義ファイルに以下の書式で定義して、モジュールをインストールする。

        module foo 1.0;
        # 既に定義されたロール
        require {
          role user_r;
          ...
        }
        # このモジュールで定義するロール
        role foo_r;
        ...
        # ユーザーとロールの関連付け
        user user_u roles {foo_r user_r ...};

        [ロール設定の例]

        備 考

        ユーザーとロールの関連付けは、「allow <ドメイン> ...」の後に記述 すること。

  • ロールとドメインの関連付け
    • ロールとドメインの関連付けの確認

      「seinfo -x -r <ロール名>」コマンドを実行して、ロールとドメインの 関連付けを確認する。

    • ロールとドメインの関連付けの設定
      • デフォルトドメインの設定

        /etc/selinux/targeted/contexts/default_type ファイルにロールとドメインの 関連付けの既定値が設定されている。

        auditadm_r:auditadm_t
        secadm_r:secadm_t
        sysadm_r:sysadm_t
        guest_r:guest_t
        xguest_r:xguest_t
        staff_r:staff_t
        unconfined_r:unconfined_t
        user_r:user_t

        [default_typeの内容]

      • TE(モジュール)による設定

        TEの定義ファイルに以下の書式で定義して、モジュールをインストールする。

        module foo 1.0;
        # 既に定義されたロール、タイプ(ラベル)
        require {
          role user_r;
          type bar_script_t;
          ...
        }
        # このモジュールで定義するロール、タイプ(ラベル)
        role foo_r;
        type foo_script_t;
        # ロールとドメインの関連付け
        role foo_r types {foo_script_t bar_script_t ...};
        # ロール遷移
        allow user_r foo_r;

        [ロール設定の例]

参 考

Shotcut (fc28) - a free, open source, cross-platform video editor

前提条件

RPM Fusion Repositoryが設定されていること。

パッケージのインストール

以下のコマンドを実行して、shotcut パッケージをインストールする。

# dnf install shotcut

使い方

DVD-Video用の動画を作成する手順は以下のとおり。

  1. 「File」メニューから「New」を選択して新規プロジェクトを作成する
  2. Video Trackの作成
    1. 画面下部の「Timeline」で右クリックメニューから「Add Video Track」を 選択して、Video Trackを作成する。
    2. 「File」メニューから「Open File...」を選択して、編集対象の動画 ファイルを開く。読み込まれた動画ファイルがプレビューに表示される。
    3. プレビュー画面を Video Track にドラッグ&ドロップする。
  3. Audio Trackの作成

    上記で Vedeo Trackに追加したビデオの音声とは別の音声を使用する場合は、 以下の手順で Audio Track を追加する。

    1. 画面下部の「Timeline」で右クリックメニューから「Add Audio Track」を 選択して、Audio Trackを作成する。
    2. 「File」メニューから「Open File...」を選択して、編集対象の音声 ファイルを開く。読み込まれた音声ファイルがプレビュー画面に表示 (白い画面)される。なお、音声は事前に量子化ビット16ビット、 サンプルレート48000に変換しておく。
    3. プレビュー画面を Audio Track にドラッグ&ドロップする。
  4. ビデオの編集
    • 「スピーカー」アイコンをクリックすると、そのトラックの音声の使用する/ しないが切り替わる。
    • 「Watch」アイコンをクリックすると、そのトラックの動画の使用する/しないが 切り替わる。
    • Timelineのバーをドラッグして移動し、Timelineのトラックで右クリックして メニューから「Split At Playhead」を選択すると、バーの位置でトラックが 分割される。
    • 画面上部左側に「Filters」タブが表示されていない場合は、「View」メニュー から「Filters」を選択して「Filters」タブを表示して、フェードイン、 フェードアウトなどの効果を設定する。
  5. Export

    以下の手順は、BDレコーダーで再生するための動画(高画質)をエクスポートするための 手順である。

    1. 画面上部左側に「Export」タブが表示されていない場合は、「View」メニュー から「Export」を選択して「Export」タブを表示させてそのタブを選択する。
    2. 「Export」タブの「Search」から「組み込み」「MPEG-2」の順に選択する
    3. 「Export」タブで以下の設定をする。
      • Format: mpegts (ファイル名 *.m2ts)

        FormatにDVDを選択した場合は、「Video」タブの「Resolution」のみを設定 すれば良い。

      • 「映像」タブ
        • 解像度: 1920x1080
        • アスペクト比: 16:9
        • フレーム/秒: 29.970030
        • 走査方式: プログレッシブ
        • インターレース解除: (最高)
        • インターレース補間: (最高)
        • Parallel 並列処理: チェックを付ける
      • 「コーデック」タブ
        • コーデック〜レートコントロール: 規定値のまま
        • ビットレート: 8M b/s
        • GDP: 150 frames
        • Bフレーム: 3
      • 「音声」タブ
        • チャンネル:2(ステレオ)
        • サンプルレート: 48000 Hz
        • コーデック: aac (DVD-Videoの場合はac3)
        • ビットレート: 384k b/s (DVD-Videoの場合はmax 256k)
    4. 「Export」タブ下部(隠れている場合あり)の「Export File」ボタンを 押して、編集結果をmpeg4形式のファイルにエクスポートする。

TOPICS

  • Exportに失敗して、ログに「/usr/bin/nice: `/usr/bin/qmelt': No such file or directory」が出力されている場合

    /usr/bin/mlt-melt のシンボリックリンクを /usr/bin/qmelt に付ける。

    # ln -s /usr/bin/mlt-melt /usr/bin/qmelt
  • DVD Videoのコーデック

    DVDを動画ファイルに変換する方法と基礎知識

    • 画質
      SD 720 x 480
      HD(720p) 1280 x 720
      Full HD 1920 x 1080
    • その他の規格
      動画ファイル形式 MPEG2 PS
      動画ビットレート 最高 9800kbps
      オーディオ ac3 Sample rate:48k Bitrate:128k - 256k
      コンテナ形式 VOB
      フレームレート 29.97fps

shred (fc40) - Erase harddisk data

以下コマンドを実行して、デバイス(/dev/hda など)に対して、回数を指定して ランダム書き込みを行った後、zeroを上書きしてデータを消去する。

# shred [-f] [-n <ランダム書込回数>] [-z] {<デバイス>|{ファイルパス}

例えば、/dev/hda に対してランダムデータを3回書き込みした後、0を上書きする には以下のコマンドを実行する。

# shred -n 3 -z /dev/hda

/foo/bar ファイルが書き込み可能になるようにアクセス権を設定してランダム データを4回書き込んだ後に0を上書きして、その後にファイルを削除する場合は 以下のコマンドを実行する。

# shred -f -n 4 -z -u /foo/bar

slack (fc40)

パッケージのインストール

  1. rpm ファイルのダウンロード

    https://slack.com/downloads より「RPM アプリをダウンロードする」の リンクをクリックして「slack-x.x.x-x.x.el8.x86_64.rpm」をダウンロードする。

  2. パッケージのインストール

    RPMファイルをダウンロードしたディレクトリに移動して、以下のコマンドを 実行し、slcak パッケージをインストールする。

    # dnf install ./slack-x.x.x-x.x.el8.x86_64.rpm

Slack へのログイン

  1. デスクトップ環境で slack を起動する
  2. 「Slack にサインインする」をクリックしてWebブラウザのサインイン画面を 開く
  3. メールアドレスを入力して、「メールアドレスでサインインする」をクリック する
  4. 「メールでコードを確認する」の画面で、上記のメールアドレスに届いた コードを入力する
  5. 初回利用時は「初めて Slack をご利用いただくようです」の画面が表示される ので、「ワークスペースを作成する」をクリックする
    1. 「Slack テンプレートを使い始める」画面が表示されるので、 「ワークスペースを作成する」をクリックする
    2. 「社名またはチーム名を教えてください」の画面が表示されるので、 ワークスペースの名前を入力して「次へ」をクリックする
    3. 「お名前を教えてください」の画面が表示されるので、アカウントの 名前を入力して「次へ」をクリックする
    4. チーム名チームにはほかに誰がいますか?」の画面が表示されるので、 以下の何れかを実行する
      • メンバーを追加する場合はそのメンバーのメールアドレスを入力して「次へ」 ボタンをクリックする
      • メンバーを追加しない場合は、「この手順をスキップする」をクリックする

        ⇒「招待せずにスキップしますか?」のメッセージダイアログが表示される ので、「ステップをスキップ」をクリックする

    5. 「チームで今取り組んでいることは何ですか?」に「チームのメンバーが あなたのテンプレートを参照する時最初に目にする名前」を入力して「次へ」を クリックする
    6. 「プランを選択して始めましょう」画面が表示されるので、 「フリープランで始める」をクリックする

Slack API の利用準備

アプリの作成とトークンの確認
  1. Slack アプリケーションを開いてログインする。
  2. Slack 画面左上のワークスペースのドロップダウンから 「ツールと設定 > アプリを管理する」を選択して、Webブラウザのアプリ管理画面 を開き、画面右上の「ビルド」をクリックする。
  3. alack api 画面((https://api.slack.com/apps/})が開くので、 「Create an App」ボタンをクリックする。
  4. Create an App ダイアログが開くので、「From scratch」を選択する。
  5. Name app & choose workspace ダイアログが開くので、以下の項目を入力して、 「Create App」ボタンをクリックする。
    • App Name

      「Message notification app」などのアプリの名前を入力する。

    • Pick a workspace to develop your app in

      連携するワークスペースを選択する。

  6. 作成したアプリの設定画面が表示されるので、画面左側のメニューから、 「Features > OAuth & Permissions」を選択して、「OAuth & Permissions」 画面を開き、以下の設定をする。
    1. Scopes
      • Bot Token Scopes

        「Add an OAuth scope」ボタンをクリックして、Web API に必要な権限を 選択する。

    2. OAuth Tokens
      1. 「Install to ワークKスペース名」ボタンをクリックする。
      2. 画面が切り替わって「アプリ名ワークスペース名 Slack ワークスペースにアクセスする権限をリクエストしています」の メッセージが表示されるので、「許可する」ボタンをクリックする。
      3. OAuth & Permissions 画面に戻るので、「OAuth Tokens > Bot User OAuth Token」よりトークンを確認する。
  7. チャンネルにアプリを登録する
    1. Slack アプリケーションを開き、APIと連携するチャンネルを選択して、 画面右上の「その他」メニューから「チャンネル詳細」を選択する。
    2. チャンネルの詳細画面がポップアップするので、「インテグレーション」 タブを選択し、App 項目の「アプリを追加する」ボタンをクリックして、 「ワークスペース内で」に表示されている追加したアプリの「追加」ボタンを クリックする。
参考文献
App 作成後のトークンの確認
  1. Slack アプリケーションを開いてログインする。
  2. Slack 画面左上のワークスペースのドロップダウンから 「ツールと設定 > アプリを管理する」を選択して、Webブラウザのアプリ管理画面 を開き、画面右上の「ビルド」をクリックする。
  3. App の一覧からトークンを確認したい App をクリックする。
  4. 画面左側のメニューから「Features > OAuth & Permissions」を選択して、 「OAuth Tokens > Bot User OAuth Token」に表示されているトークンを確認する。

無料プランの内容

無制限のメッセージとファイルの履歴 過去 90 日限定
チャンネルにおける外部の人との連携 1 対 1 のダイレクトメッセージのみ
音声や動画によるグループハドル ミーティング 1 対 1 のみ
無制限の canvas によるナレッジ共有 チャンネル canvas のみ
音声クリップと動画クリップ OK
無制限のアプリと自動化 10 件まで
サイドバーの整理のカスタマイズ NG

sox (fc41) - edit wav file

パッケージのインストール

以下のコマンドを実行して、soxパッケージをインストールする。

# dnf install sox

WAVファイルの編集あれこれ

  • ファイルの連結
    $ sox <in-file-1> <in-file-2> ... <out-file>
  • サンプルレートの変更
    • 一般的なコマンド
      $ sox <in-file> -r <サンプルレート> <out-file>
    • 量子化ビット数16で44.1k Hzにダウンサンプリングする例(soxのマニュアルより)

      default (high) quality resampling; overrides: steep filter, allow aliasing

      $ sox <in-file> -b 16 <out-file> rate -s -a 44100 dither -s
    • 量子化ビット数24でアップサンプリングする場合(soxのマニュアルより)

      very high quality resampling; overrides: intermediate phase, band-width 90%

      $ sox <in-file> -b 24 <out-file> rate -v -I -b 90 <サンプルレート>
      rate effectのquality optionの量子化ビット数による目安
      • -h (high) 16-bit
      • -v (very high) 24-bit
  • bit数の変更
    $ sox <in-file> -b <bit数> <out-file>
  • 正規化

    gain(音量)を指定したデシベル(マイナスの値を指定する)に正規化する。

    $ sox --norm=<db> <in-file> <out-file>

    デシベルの指定を省略した場合(--norm)、gainは0dbに正規化される。

  • 音声の切り取り
    • 開始位置(秒)、長さ(秒)を指定して音声を切り取る
      $ sox <in-file> <out-file> trim <start-position> <trim-length>
      • 切り出し長さを省略すると指定された開始位置より最後までを切り出す。
      • 開始位置、長さは「hh:mm:ss」のように時分秒で指定することも可能。
    • 開始位置(秒)、終了位置(秒)を指定して音声を切り取る
      $ sox <in-file> <out-file> trim <start-position> =<end-position>
      • 終了位置(秒)も「hh:mm:ss」の形式で時分秒を指定可能。
  • フェードイン、フェードアウト

    フェードインの長さ(秒)、フェードアウト開始位置(秒)、フェードアウトの長さ (秒)を指定して、フェードイン、フェードアウトする。

    $ sox <in-file> <out-file> fade <fadein-length> <stop-position> <fadeout-length>
    • フェードインの長さを0にするとフェードインをしない
    • フェードインの長さ、フェードアウト開始位置、フェードアウトの長さは 「01:23:45」のように時分秒で指定することもできる。
    • fadeの後ろに空白を入れて「q」「h」「t」、「l」、「p」を指定すると フェードイン、フェードアウトのカーブを指定できる。カーブの種類の意味は 以下の通り。
      • q : sineカーブの0-45度
      • h : sineカーブの0-90度
      • t : 直線
      • l : log曲線
      • p : 逆向きの放物線
  • フォーマットの変更
    $ sox <in-file> <out-file>

    ファイルの拡張子に応じて<input-file>を<output-file>に変換する。

    wavファイル foo.wav を flacファイル bar.flac に変換する。

    $ sox foo.wav bar.flac

    mp3ファイル foo.mp3 を wavファイル bar.wav に変換する。

    $ sox foo.mp3 bar.wav

ssh (fc30) - Secure Shell client

remote login

ログインユーザー(<user>)、接続先のホスト名またはIPアドレス(<hostname>)を 指定して、リモートのホストにログインする。

$ ssh [<user>@]<hostname>

Local port forwarding

local(このホスト)で待ち受けているリクエストをremoteにSSHでトンネリングして、 remoteからtergetに指定されたポート番号で転送するためのコマンドは以下のとおり。

$ ssh -[fN]L [<bind-addr>:]<local-port>:<target>:<target-port> [<user>@]<remote>

上記のコマンドを実行すると、localの<bind-addr>で指定されたIPアドレス、 local-portで指定されたポート番号で待ち受けたリクエストを<remote>で指定 されたホスト名またはIPアドレスのホストにSSHでトンネリングして、そこから <target>\で指定されたホスト名またはIPアドレスのホストの<target-port>で 指定したポート番号に転送する。

<bind-addr>を省略すると、localに割り当てられたの全ての ネットワーク・インターフェースでリクエストを待ち受ける。

           <bind-addr> ---------        ----------                 --------
client --------------> | local | -----> | remote | --------------> |target|
          <local-port> ---------  ssh   ----------   <target-port> --------

Dynamic application-level port forwarding (SOCS proxy)

local(このホスト)をSOCKS4/SOCS5 proxyサーバーとして、クライアントからの リクエストをremoteにSSHでトンネリングして、remoteからproxyの宛先に転送する ためのコマンドは以下のとおり。

$ ssh -[fN]D [<bind-addr:]<local-port> [<user>@]<remote>

上記のコマンドを実行すると、localの<bind-addr>で指定されたIPアドレス、 <local-port>で指定されたポート番号でSOCKS proxyのリクエストを待ち受け、 それを<remote>で指定されたホスト名またはIPアドレスのホストにSSHでトンネリング して、そこからproxyの宛先(target\)にリクエストを転送する。

           <bind-addr> ----------------        ----------
client --------------> | local        | -----> | remote | -----> target
          <local-port> | (SOCS proxy) |  ssh   ----------
                       ----------------

この場合、clientでは、SOCKS proxyサーバーの設定に<bind-addr>と<local-port> (socks5://<bind-addr>:<local-port>)を設定して、「http://<target>/...」 を実行すろと、<remote>からtargetのポート80にリクエストが転送される。

Remote port forwarding

remoteで待ち受けているリクエストをlocal(このホスト)にSSHでトンネリングして、 localからtargetに指定されたポートで転送するためのコマンドは以下のとおり。

$ ssh -[fN]R [<bind-addr>:]<remote-port>:<target>:<target-port> [<user>@]<remote>

上記のコマンドを実行すると、<remote>で指定されたホスト名またはIPアドレスの <bind-addr>で指定されたIPアドレス、<remote-port>で指定されたポート番号で 待ち受けたリクエストをlocal(このホスト)にSSHトンネリングして、そこから <target>で指定されたホスト名またはIPアドレスのホストの<target-port>で 指定されたポート番号に転送する。

<bind-addr>を省略すると、<remote>に割り当てられた全ての ネットワーク・インターフェースでリクエストを待ち受ける。

 ----------                 ---------        ---------- <bind-addr>
 | target | <-------------- | local | <----- | remote | <-------------- client
 ---------- <target-port>   ---------   ssh  ---------- <remote-port>

なお、デフォルトの状態では、remoteの待ち受けIPアドレスは、<bind-addr>を指定、 あるいは省略した場合でも「127.0.0.1」に設定され、他のホストからリクエストを 受け取ることはできない。上図のように他のホスト空のリクエストを受信可能にする ためには、/etc/ssh/sshd_config ファイルに「GatewayPorts yes」を設定すること。

Public key authentication

sshでリモートのホストにログインする場合は、指定されたユーザー(省略時は ローカルのユーザと同じ名前のユーザー)のパスワードの入力が強制される。以下の 手順で公開鍵/非公開鍵を作成を作成し、公開鍵をリモートのホストにコピーする ことによって、リモートのホストにログインする際にパスワードが不要になる。

  1. ローカルのホストで公開鍵/非公開鍵を作成する

    以下のコマンドを実行して、RSAの公開鍵/非公開鍵を作成する。

    $ ssh-keygen [-b <bits>]

    -b オプションはキーのビット数(1028、2048、4098などを指定する。 -b オプションを省略すると2048ビットのキーが作成される。ssh-keygen コマンドを 実行すると、以下の入力を求められる。

    • Enter file in which to save the key

      非公開鍵の保存場所(ファイル名)を入力する。 デフォルト(空白のままenterキーを押す)では、~/.ssh/id_rsa に非公開鍵が、 ~/.ssh/id_rsa.pub に公開鍵が保存される

    • Enter passphrase

      公開鍵/非公開鍵を使用するときに要求される passphrase を入力する。空白の ままenterキーを押すと passphrase なしで公開鍵/非公開鍵が作成される。 cron などでシステム起動時に自動的にsshを実行する場合は passphrase なし (空白のままenterキーを押す)とすること。

      passphrase を作成した場合は、リモートのホストにパスワードなしでログイン するために、非公開鍵を keychain manager で管理する必要があるが、システム 起動後最初にログインするときに passpharse の入力が必要となるため、cron 等 による ssh の自動実行の用途には適さない。

  2. リモートのホストに公開鍵をコピーする

    以下のコマンドを実行して、RSAの公開鍵をリモートのホストにコピーする。

    $ ssh-copy-id -i ~/.ssh/id_rsa.pub <user>@<remote-host>
    • RSA公開鍵の保存場所がデフォルトと異なる場合は、-i オプションで公開鍵の ファイルのパスを指定する。
    • <user>@<remote-host> は、リモートのホストにログインする際のユーザー、 ホスト名(またはIPアドレス)を指定する。
    • このコマンドを実行すると、リモートホストのユーザーのホームディレクトリ 配下の .ssh/authorized_keys ファイルに 公開鍵が追加される。
  3. sshのパスワード認証を無効にする

    ssh の認証を public key authentication に限定し、パスワード認証を無効に したい場合は、/etc/ssh/sshd_config ファイルを以下のように設定すること。

    PasswordAuthentication no

swap configurations (fc34)

swap の使用状況確認

$ cat /proc/swaps

zram

  • Fedora (from fc33)

    Fedora 33からswap領域はOS起動時に /usr/lib/systemd/zram-generator.conf の 設定に従い、ZRAMに作成れることになった。

    [zram0]
    zram-fraction = 1.0
    max-zram-size = 8192

    [zram-generator.conf の設定例]

    • zram-fraction

      利用可能な RAM サイズの何倍までを zram のデバイスに割当可能かを設定する。

    • maz-zram-size

      zram のデバイスのサイズの上限値を MiB 単位で指定する。

  • CentOS 7 / 8

    以下の手順で、システム起動時に zram swap を有効にするように構成する。

    1. /etc/modules-load.d/zram.conf の編集

      以下の行を追加する。

      zram
    2. /etc/modprobe.d/zram.conf の編集

      以下の行を追加する。

      options zram num_devices=1
    3. (オプション)/etc/fstab の編集

      swap 領域の設定を削除する。

      /dev/mapper/cl-swap swap swap defaults 0 0

      [削除対象の例]

    4. /usr/lib/systemd/system/zram.service ファイルの作成
      [Unit]
      Description=Swap with zram
      After=basic.target
      
      [Service]
      Type=oneshot 
      RemainAfterExit=true
      ExecStartPre=/sbin/zramctl /dev/zram0 --size 1536M
      ExecStartPre=/sbin/mkswap /dev/zram0
      ExecStart=/sbin/swapon /dev/zram0
      ExecStop=/sbin/swapoff /dev/zram0
      
      [Install]
      WantedBy=multi-user.target

      [設定例]

    5. zram サービスの有効化

      以下のコマンドを実行してzram サービスを有効化(起動時に実行)する。 --now オプションを指定すると、有効化とサービスの起動をする。

      # systemctl enable [--now] zram.service
参考文献

Logical Volume

  • 前提条件

    swap 領域の LV (Logical Volume) が作成されていること。LVの作成、拡張、縮小 については、LVM を参照のこと。

  • swap 領域の新規追加手順

    Logical Group Name: cl、Logical Volume Name: swap で swap 用の Logical Volume が作成されている場合に、これを swap 領域としてOSに認識させる 手順は以下のとおりである。

    1. swap 領域のフォーマット

      /dev/mapper/<Logical Group name>-<Logical Volume name> を指定して フォーマットする。

      # mkswap /dev/mapper/cl-swap
    2. Logical Volume のエントリー追加

      /dev/mapper/<Logical Group name>-<Logical Volume name> を swap 領域 として /etc/fstab ファイルに追加する。

      /dev/mapper/cl-swap swap swap defaults 0 0
    3. マウントユニット再生成
      # systemctl daemon-reload
    4. 追加した swap 領域のアクティブ化

      /dev/mapper/<Logical Group name>-<Logical Volume name> を指定して swapon コマンドを実行する。

      # swapon [-v] /dev/mapper/cl-swap
  • swap 領域のサイズ変更

    既に作成済みの swap 領域 /cev/mapper/cl-swap (Logical Group name: cl、 Logical Volume name: swap のブロックデバイス) のファイルシステムのサイズ 変更を OS に認識させる手順は以下のとおりである。

    1. swap 領域の無効化
      # swapoff [-v] /dev/mapper/cl-swap
    2. swap 領域のサイズ変更

      lvectend / lvreduce コマンドを実行して、swap 領域の Logical Volume を 拡大/縮小する。Logical Volume の拡大/縮小手順は、LVM を参照のこと。

    3. swap 領域のフォーマット
      # mkswap /dev/mapper/cl-swap
    4. swap 領域のアクティブ化
      # swapon [-v] /dev/mapper/cl-swap
参考文献

swap ファイル

  • swap ファイルの新規作成
    1. swap ファイルの作成

      以下のコマンドを実行して、指定された サイズの swap ファイルを作成する。

      # dd if=/dev/zero of=<swap-file-path> bs=1024 count=<swap-size(K)>
    2. swap ファイルのフォーマット
      # mkswap <swap-file-path>
    3. swap ファイルの読み込み禁止設定
      # chmod 0600 <swap-file-path>
    4. swap ファイルのエントリー追加

      以下の行を /etc/fstab ファイルに追加する。

      <swap-file-path> swap swap defaults 0 0
    5. マウントユニット再生成
      # systemctl daemon-reload
    6. 追加した swap ファイルの有効化
      # swapon [-v] <swap-file-path>
  • swap ファイルのサイズ変更

    既に swap ファイルとして稼働している swap ファイルのサイズを変更する手順は 以下のとおりである。

    1. swap ファイルの無効化
      # swapoff [v] <swap-file-path>
    2. swap ファイルのサイズ変更
      # dd if=/dev/zero of=<swap-file-path> bs=1024 count=<swap-size(K)>
    3. swap ファイルのフォーマット
      # mkswap <swap-file-path>
    4. swap ファイルの有効化
      # swapon [-v] <swap-file-path>
参考文献

sudo settings (fc25)

ユーザーへのsudo実行権限の許可

  1. sudoの実行をユーザーに許可する

    以下のコマンドを実行して、ユーザーの補助グループに「wheel」を追加することにより 指定したユーザーが全てのユーザー権限ですべてのコマンドを実行できるようにする。

    # usermod -aG wheel <ユーザー名>
    補 足

    既定値では、「%wheel ALL=(ALL) ALL」の設定により wheel グループのユーザーは、 すべてのユーザー権限で全てのコマンドが実行できるようになっている。

  2. ユーザー個別に許可の内容を設定

    root権限のユーザーでvisudoコマンドを実行して、以下の内容を設定する。

    • 「<ユーザー名> ALL=(ALL) ALL」行を追加して、ユーザー名に Super Userの実行権限を設定する。
    • viエディタと同様の操作で、変更内容の保存して終了する。
    補 足

    上記の例では、ユーザーに全ての実行権限を許可(全てのユーザーまたはグループ の実行権限で、全てのコマンドを実行可能)ているが、以下の書式によりユーザー ごとに実行ユーザーやグループを制限したり、コマンドを制限したりすることも 可能である。

    <ユーザー名> <ホスト名> = (<実行ユーザー名> : <実行グループ名>) <コマンド> [, <コマンド> ...]
    • 「<ユーザー名>」の代わりに「%<グループ名>」と記述して、グループに 対して許可を与えることが可能
    • 実行権限の許可をグループのみ指定する場合は、「(:<実行グループ名>)」とする
    • 「<実行ユーザー名>」、「<実行グループ名>」は、コンマで区切って複数の ユーザー名またはグループ名を指定することができる
    設定例

    scott ユーザーがsudoコマンドを実行して、rootユーザーの権限で dnf、rpm コマンドを実行できるようにするためには、visudo コマンドを使用して以下のように 設定する。

    scott ALL = (root) /usr/bin/dnf, /usr/bin/rpm

TLP (fc25) - Linux Advanced Power Management

TLPは「電池寿命を最適化する設定が初めから付いており、インストールだけすれば あとはもう忘れてかまいません。」との触れ込みの電源管理パッケージである。

  1. インストール

    以下のコマンドを実行して、TLPをインストールする。

    # dnf install tlp
  2. サービスの有効化

    以下のコマンドを実行して、tlp.service と tlp-sleep.service を有効化する。

    # systemctl enable tlp.service tlp-sleep.service
  3. systemd-rfkill.service の無効化

    以下のコマンドを実行して、systemd-rfkill.service を無効化する。

    # systemctl disable systemd-rfkill.service
  4. 利用の開始

    システムを再起動するか、以下のコマンドを実行する。

    # systemctl stop systemd-rfkill.service
    # tlp start

troubleshooting (fc40)

ログインしていなくても10分/30分ごとにシステムが再起動する

dconf-editorで電源管理の設定をする


Unit file (fc41)

Unitファイル概要

Unitファイルは、サービスの起動方法(UnitタイプがService)やタイマー機動の設定 (Unitタイプがtimer)、依存関係のグループ化(Unitタイプがtarget)を定義したもので ある。これ以外にもsocketの作成など様々な定義がある。 システム設定として定義するものは、/usr/lib/systemd/system ディレクトリの下に Unit名.Unitタイプ名 という名前でファイルを配置する。例えば、httpd service のUnitファイルは、/usr/lib/systemd/system/httpd.service に配置されて いる。

参 考

テンプレート

  • インスタンス

    Unitファイルは、通常Unit毎に作成するが、1つのUnitから複数のインスタンスを 起動する場合は、インスタンス毎に 「unit-name@instance-name.unit-type」 というファイル名でUnit ファイルを作成する。

  • テンプレート

    1つのUnitから複数のインスタンスを起動する場合、インスタンスに共通する設定を 「unit-name@.unit-type」というファイル名のUnitファイルに設定する。 systemdは、インスタンス名付のUnit名が指定された場合、インスタンス名付きの ファイル(unit-name@instance-name.unit-type)が存在しない 場合は、テンプレート(unit-name@.unit-type)の設定を使用する。

    Unitファイルはインスタンス名(%i)、Unit名(%n)等を変数で参照することができる のでインスタンスに依存する部分を変数で記述すれば、インスタンスに関係なく テンプレートに設定を集約することが可能になる。

  • テンプレートの参照

    インスタンス毎に固有の設定が存在するが、テンプレートに設定されたインスタンス 共通の設定を参照したい場合は、Unitファイルの先頭に 「.include Unitファイルの絶対パス」を記述してテンプレートの設定を 取り込むことが可能である。

参 考

サービスのUnitファイルの書き方

Unitファイルの構造

Unitファイルは、以下の3つのセクションで構成される。下記セクションで設定する 内容は、「参考」に示したドキュメントを参照すること。

  1. [Unit]セクション

    サービス(ユニット)の説明、ユニットをアクティブにする(サービスを起動する) 場合の他のユニットとの依存関係(一緒にサービスを開始するかどうか)を定義 する。

  2. [Service]セクション

    サービスの起動、終了コマンドを定義する。

  3. [Install]セクション

    systemctl enable (or disable) コマンドで使用される情報を定義する。有効化、 無効化する場合の依存関係を設定する。

参 考
Unitファイルの編集

Unitファイルの記述例を以下に示す。メモリのサイズは実行環境に合わせて調整する。

[Unit]
Description=Apache Tomcat Service
After=syslog.target network.target

[Service]
Type=forking
SuccessExitStatus=143
Environment="CATALINA_OPTS=-Xms1m -XX:MetaspaceSize=1m"
ExecStart=<Tomcatインストールディレクトリ>/bin/startup.sh
ExecStop=<Tomcatインストールディレクトリ>/bin/shutdown.sh

[Install]
WantedBy=multi-user.target
  1. [Unit]セクション
    1. Description=human-readable-name-for-the-unit

      Unitのラベル名を設定する

    2. 依存関係の設定
      • Requires=unit-name[ unit-name ...]

        このUnitが起動するときに一緒に起動すべきUnitを指定する。このUnitが起動 するとこのプロパティで指定されたUnitファイル名のUnitも一緒に起動される。 この設定は「After=」で設定されるUnitの起動順序とは独立した設定である (つまりサービスの起動順序を定義するものではない)。

        以下の場合は、このUnitは起動しない。

        • 「Required=」と「After=」の両方に設定されたUnitの起動に失敗した場合は このUnitは起動しない。
        • このプロパティに指定されたUnitの何れか1つが終了すると、こUnitも終了 する。
      • Requisite=unit-name[ unit-name ...]

        このプロパティで指定されたUnitのどれか1つでも起動していない場合は、この Unitは起動しない。

      • Wants=unit-name[ unit-name ...]

        「Requires=」と同様であるが、一緒に起動しようとしたUnitの起動に失敗 したり、Unitが停止しても、このUnitは停止することなく起動または実行した ままとなる。Unitの依存関係を定義する場合は、このプロパティを設定する ことが推奨されている。

    3. 起動順序の設定
      • Before=unit-name[ unit-name ...]

        このUnitの起動が完了してから、このプロパティで指定されたUnit(ただし 起動が有効となっているものだけ)が起動する。

      • After=unit-name[ unit-name ...]

        このプロパティで指定されたUnitが起動するように設定されている場合は、 それらのUnitの起動が完了してからこのUnitを起動する。

  2. [Service]セクション
    1. Type={simple|exec|forking|oneshot|dbus|notify|idle}
      • Type=simple

        Typeプロパティを指定しな場合の既定値。main service process (このプロセスでExecStart=で指定したコマンドはそこで実行される) をfork した後にUnitが開始する。「systemctl start」コマンドでこのUnitを起動した 場合、ExecStartプロパティで指定したコマンドの実行が失敗しても、Unitの 起動結果は正常と判断されることに注意すること。

      • Type=exec

        main service processの(ExecStart=で指定した)コマンドが実行された後に Unitが開始する。「systemctl start」コマンドでこのUnitを起動した場合、 ExecStartプロパティで指定したコマンドの実行が失敗した場合は、Unitの 起動結果はエラーとなる。

      • Type=forking

        ExecStartプロパティで指定したコマンドは、fork された子プロセスで実行 される。Unitは、ExecStartプロパティのコマンドをforkした親プロセスが 終了した後に開始する。これは伝統的なUnixサービスの起動方法である。

      • Type=oneshot

        Type=simpleの場合と似ているが、main service processが終了した後にUnitが 開始する。このTypeは「RemainAfterExit=」を使用する場合に有効である。 このTypeは、「Type=」、「ExecStart=」の両方共に設定されていない場合の 既定値である。

    2. サービス開始コマンド
      • ExecStart=commandlines

        サービス開始時に実行するコマンド(引数の指定も可能)を指定する。 コマンドの記述は、コンソールからコマンドを実行するときと同様である。

        • Typeプロパティに「oneshot」以外を指定した場合

          コマンドは1つだけ指定する。

        • 「Type=oneshot」を指定した場合

          セミコロンで区切るか、「ExecStart=」を複数設定することで複数の コマンドを指定できる。複数のコマンドを実行した場合は、指定した順番に 順次コマンドを実行するが、実行したコマンドの実行結果が失敗(fail)の 場合は後続のコマンドは実行されない。。

      • ExecStartPre=commandlines

        サービス開始時に、「ExecStart=」で指定したコマンドを実行する前に実行する コマンドを指定する。コマンドの指定方法は「ExecStart=」と同様である。 「ExecStart=」と異なり、「Type=」の設定に関係なく複数のコマンドを指定 することが可能である。

      • ExecStartPost=commandlines

        サービス開始時に「ExecStart=」で指定したコマンドを実行した後に実行する コマンドが実行れることを除き、「ExecStartPre=」と同様である。

    3. サービス終了コマンド
      • ExecStop=commandlines

        「ExecStart=」で開始したサービスを停止するためのコマンドを指定する。 コマンドの指定方法及び複数のコマンドの実行については「ExecStart=」と 同様である。

      • ExecStopPost=commandlines

        サービスを停止した後(即ち「ExecStop=」で指定したコマンドを実行した後) に実行するコマンドを指定する。コマンドの指定方法及び複数のコマンドの 実行については「ExecStart=」と同様である。

        このプロパティは、サービス開始、または停止に失敗した場合にクリーンアップ する用途を想定している。このプロパティで指定したコマンドの実行結果は、 サービスの結果コード及びサービスのメインプロセスの終了コードに反映 される。

    4. ExecReload=commandlines

      サービスがリロードするときのコマンドを指定する。コマンドの指定方法及び 複数のコマンドの実行については「ExecStart=」と同様である。ここで指定する コマンドはリロードのトリガーを実行するだけでなく、同期的にリロードの終了を 待つものにしなければいけない。

    5. コマンド実行ユーザーの設定
      • User=user-name
    6. タイムアウトの設定
      • TimeoutStartSec=time

        サービス・デーモンが起動完了を通知するまでに待つ時間を指定する。指定時間 内に通知が無かった場合は、サービス・デーモンはエラーとなりshut down される。

        プロパティの設定は、以下の書式で行う。

        • 秒の指定

          単位を付けずに、数値で「秒」を指定する。

        • 分秒の指定

          「<minutes>min <seconds>s」の形式で指定する(例:5min 20s)。

        • infinity

          タイムアウトしない。

        /etc/systemd/system.conf の「DefaultTimeoutStartSec=」を設定することで このプロパティの既定値を変更できる(Type=onshotの場合は既定値では無効に なることを除いて)。

      • TimeoutStopSec=time

        「TimeoutStartSec=」と同じ書式でタイムアウトの時間を設定する。ここで 指定したタイムアウトの時間は、以下のように適用される。

        • 「ExecStop=」で指定した個々のコマンドが終了するまでのタイムアウト。 タイムアウトを過ぎたコマンドがあると、後続のコマンドの実行をスキップ する。
        • サービス自身が停止するまでのタイムアウト。

        /etc/systemd/system.conf の「DefaultTimeoutStopSec=」を設定することで このプロパティの既定値を変更できる

      • TimeoutSec=time

        このプロパティを指定すると、「TimeoutStartSec=」と「TimeoutStopSec=」の 両方を指定したことになる。/etc/systemd/system.conf ファイルで規定値の 設定をすることはできない。

    7. SuccessExitStatus={exit-code|signal-name} [...]

      Service セクションの「ExecStop」オプションで指定したコマンドが0以外の ステータスを返すと、systemdにより終了されたサービスのステータスはエラーと なってしまう。0以外のステータスを返した場合でもサービス終了時のステータス を正常としたい場合は、このオプションに正常と見做す exit code または termimination signal name を指定する。

      SuccessExitStatus=1 2 8 SIGKILL
    8. 環境変数の設定
      • Environment="env-name=value" ...

        環境変数を設定する。"env-name1=var1" "env-name2=var2" の形式で1行に 複数の環境変数を設定することも、Environment= を複数回定義することも可能 である。

      • EnvironmentFile=file-path

        環境変数を定義したファイルのパスを指定する。

      注 意
      • 環境変数は、ExecStart プロパティなどに設定するコマンド文字列に対して 適用されず、「$変数名」の文字列そのものとして扱われる。なお、 コマンド引数に対しては「$変数名」は環境変数の値に展開される
    9. リソースの制限
      • 設定例
        CPUQuota=30%
        IOSchedulingPriority = 7
        CPUSchedulingPolicy = 5
        MemoryLimit=256M
        Nice = 19
      • CPUQuota

        プロセスのCPU利用率の上限値をパーセントで設定する。

      • IOSchedulingPriority

        0 (優先度最高) 〜 7 (優先度最低) の範囲で プロセスの I/O スケジュールの 優先度を設定する。

      • CPUSchedulingPolicy

        1 (優先度最低) 〜 99 (優先度最高) の範囲で プロセスの CPU スケジュールの 優先度を設定する。

      • MemoryLimit

        プロセスが使用するメモリの上限値を設定する。単位としてK, M, G, T を指定 可能である。

      • Nice

        プロセスのスケジュール優先度の既定値を -20 (優先度最高) 〜 19 (優先度最低) の範囲で設定する。

  3. [Install]セクション
    • Alias=alias-name[ alias-name ...]

      Unit名の別名を指定する。コンマで区切って複数の別名を指定することが可能。 このプロパティを設定すると、「systemctl enable」コマンドはシンボリック リンクを作成して、他の systemctl コマンドでUnit名の代わりに別名を使用する ことができるようになる。

    • RequiredBy=unit-name[ unit-name ...]

      このUnitの実行が必要であるUnitを指定する。このプロパティで指定したUnitの 何れか1つが起動したときに、このUnitも起動される。このプロパティは、 「Requires=」の逆の設定を意味するもので、foo.serviceのUnitファイルで 「Required=bar.service」と指定したものと、var.serviceのUnitファイルで 「Requires=foo.service」と指定したものと同じ意味になる。

      複数のUnitを指定する場合は、スペースで区切って指定する他に、プロパティを 複数回指定することも可能である。

    • WantedBy=unit-name[ unit-name ...]

      「RequiredBy=」と同様な設定であるが、「Requires=」の逆の設定を意味意味して いる。つまり、「RequiredBy=」と異なりこのUnitの起動に失敗したり、このUnit が停止したりしても、プロパティで指定したUnitの起動や実行には影響がない。

    • Also=unit-name[ unit-name ...]

      「systemctl enable」、「systemctl disable」コマンドを実行したときに、この Unitと一緒に enable / disable するUnitを指定する。

    • DefaultInstance=instance-name

      この設定は、Unit fileのテンプレートの場合に有効である。Unit名の代わりに テンプレートファイル名を指定した場合、このプロパティで指定された インスタンス名を指定したことになる。例えば getty@serviceに 「DefaultInstance=tty0」を設定した場合、Unit名に「getty@service」を指定 すろと、「getty@tty0.service」を指定したことになる。

備 考
  • コマンドの前に"-"を指定する

    例えば、「ExecStartPre=-commandlines」と設定すると、コマンド実行で エラーが発生してもエラーがなかったことにして次の処理に進む。

  • ファイルパスの前に"-"を指定する

    例えば、「EnvironmentFile=-/opt/foo/bar.conf」と指定すると、 /opt/foo/bar.conf ファイルが存在しなくてもエラーとせずに次の処理に進む。

参 考

タイマーのUnitファイルの書き方

タイマーUnitの概要

unit-name.timer ファイルを設定すると、そこで定義された起動タイミングで unit-name.service が起動(「systemctl start unit-nname.service」が実行) される。

Unitファイルの構造
  1. [Unit]セクション

    サービスと同様の設定をする。

  2. [Timer]セクション

    サービス起動のスケジュールや、タイマーから起動されるサービスの設定など。

  3. [Install]セクション

    サービスと同様の設定をする。

Unitファイルの編集

タイマーのUnitファイルの例を以下に示す。

[logrotate.timer]

[Unit]
Description=Daily rotation of log files
Documentation=man:logrotate(8) man:logrotate.conf(5)

[Timer]
OnCalendar=daily
RandomizedDelaySec=1h
Persistent=true

[Install]
WantedBy=timers.target
  • [Timer]セクション
    1. 起動スケジュールの設定(OnCalender オプション)

      OnCalender オプションでサービスを起動するスケジュールを設定する。

      • 毎時、毎日、毎週、毎月、毎年

        以下の設定をすると、指定した単位の最初(hourlyの場合は毎時0分)に サービスを起動する。

        OnCalender={hourly|daily|weekly|monthly|yearly}
      • 年月日時分秒

        以下の形式で設定すると、指定した年月日時分秒にサービスを起動する。

        OnCalender=[<曜日の指定>] <年>-<月>-<日> <時>:<分>:<秒>
        • の設定
          • 「*」を指定すると指定した単位は毎回起動する
          • 以下のの形式で範囲を指定することができる
            <from>..<to>
        • 曜日の指定

          を「*」、または範囲指定すると、曜日の指定 をすることで指定した 曜日にサービスを起動することができる。曜日の指定は、Mon, Tue, Wed, Thu, Fri, Sat, Sun を使用する。

          • 曜日の指定を以下の形式で指定すると、指定したリストの曜日に サービスを起動する。
            <曜日>,<曜日>,...
          • 曜日の指定を以下の形式で指定すると、指定した範囲の曜日にサービスを 起動する。
            <曜日>..<曜日>
    2. 遅延時間の設定(RandomizedDelaySec オプション)

      以下のように RandomizedDelaySec オプションを設定すると、スケジュールで 指定した時刻より遅延秒数までの間でランダムにサービスを起動することが できる。

      RandomizedDelaySec=<遅延秒数>

      遅延秒数 には秒数の他に、year、month、week、day、hour、min、sec といった 単位を指定することも可能である。

    3. Persistent オプション

      「Persistent=true」を設定すると、前回実行予定時刻からタイマーが起動する までの間にサービスが起動されてなかった場合は次回の実行予定時刻をまたずに サービスを起動する。このオプションは OnCalender オプションが設定された 場合に有効で、既定値は false である。

    4. 起動サービスの指定(Unit オプション)

      以下の設定で、unit-name にサービスのユニット名(.service を指定しない) を指定すると、このタイマーが起動するサービスを指定できる。

      Unit=<unit-name>

      既定の設定(このオプションを設定しない場合)は、タイマーのユニット名 (Unitファイルから拡張子「.timer」を除いたもの」のサービスがこのタイマー より起動される。

参 考

パッケージで提供されるUnitファイルの設定変更

パッケージから提供されるUnitファイル(unit-name.service、unit-name.timer) は、これを変更してもパッケージが更新されると上書きされてしまう。それを避ける ためには、以下の手順でUhitファイルの設定を変更する。

  1. 差分設定ファイルの作成

    /etc/systemd/system ディレクトリの下に「service-name.service.d」 (サービスの設定を変更する場合)、または「service-name.timer.d」(タイマーの 設定を変更する場合)ディレクトリを作成する。そして、そのディレクトリの下に 拡張子が「.conf」のファイルを作成する。

  2. 差分設定ファイルへの記述

    セクションと変更するオプションの設定を差分設定ファイルに記述する。

    • サービスの ExecStart オプションのように、1回しか設定を許されない オプションを変更する場合は、以下の「サービスの変更例」ように オプションの設定を削除してからオプションの変更をやり直す。
  • サービスの変更例

    [/etc/systemd/system/maldet.service.d/override.conf]

    [Unit]
    After=
    After=network.target clamd@scan.service
    
    [Service]
    ExecStart=
    ExecStart=/usr/local/maldetect/maldet --monitor /usr/local/maldetect/monitor_paths
  • タイマーの変更例

    [/etc/systemd/system/logrotate.timer.d/override.conf]

    [Timer]
    OnCalendar=hourly
    RandomizedDelaySec=5min
参 献

update-alternatives (fc33) - maintain symbolic links determining default commands

update-alternatives コマンドは、各種コマンドのシンボリック・リンクを切り換える ためのコマンドである。

シンボリック・リンクの一覧表示

$ update-alternatives --list

上記のコマンドを実行すると、update-alternatives で管理しているシンボリック ・リンクの一覧(シンボリック・リンク名とリンク先のファイルのパス)を表示する。

シンボリック・リンクの設定

# update-alternatives --config <シンボリック・リンク名>

上記のコマンドを実行すると、シンボリック・リンクの切り替え候補の一覧が表示 されるので、一覧の選択番号を入力してシンボリック・リンクの設定を切り替える。 以下の例は、「update-alternatives --config mkisofs」を実行した場合の画面表示 である。

 2 プログラムがあり 'mkisofs' を提供します。

   選択       コマンド
 -----------------------------------------------
 *+ 1           /usr/bin/xorriso
    2           /usr/bin/genisoimage

 Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

VideoCam Topics (fc32)

  1. kernel モジュールの確認
    # lsmod | grep uvcvideo

    uvcvideo kernel モジュールが表示されている場合は、Video Cameraが有効である。

  2. Video Camera の無効化
    # modprobe -r uvcvideo

    uvcvideo kernel モジュールを削除して、Video Cameraを無効にする。

  3. Video Camera の有効化
    # modprobe uvcvideo

    uvcvideo kernel モジュールを追加して、Video Cameraを有効にする。

  4. システム起動時に Video Camera を無効化

    uvcvideo kernel モジュールを削除しても、システム起動時にモジュールが読み 込まれてしまうので、システム起動直後は Video Camera が有効化されてしまう。 システム起動時に Video Camera を無効な状態にするためには、 /usr/lib/modprobe.d/dist-blacklist.conf ファイルに以下の行を追加する。

    blacklist uvcvideo

VirtualBox-7.2 (fc42)

パッケージのインストール

  1. VirtualBoxパッケージのインストール
    • RPM Fusion リポジトリからインストール
      1. パッケージのインストール

        RPM Fusion Repository を設定して、以下の コマンドにより VirtualBox をインストールする。

        $ sudo dnf install VirtualBox
      2. vboxusers グループへのユーザー追加

        以下のコマンドを実行して、原罪のユーザー(VirtualBoxを実行するユーザー) を vboxusers グループに追加する。

        $ sudo usermod -aG vboxusers $USER
    • VirtualBox.org の RPM パッケージからインストール
      1. RPM Fusion の VirtualBox をアンインストール

        RPM Fusion の VirtualBox がインストールされている場合は、以下のコマンド を実行して、VirtualBox のパッケージを削除する。

        $ sudo dnf remove VirtualBox VirtualBox-server
      2. ViirtualBox.org から RPM パッケージをダウンロードしてインストール

        https://www.virtualbox.org/wiki/Linux_Downloadsにアクセスして、 「Fedora」のリンクから RPM パッケージをダウンロードして以下のコマンド によりパッケージをインストールする。

        $ sudo dnf install ./VirtualBox-<virsion>_fedora<release>-1.x86_64.rpm
      3. vboxusers グループへのユーザー追加

        以下のコマンドを実行して、原罪のユーザー(VirtualBoxを実行するユーザー) を vboxusers グループに追加する。

        $ sudo usermod -aG vboxusers $USER
      4. VirtualBox リポジトリの設定

        以下のコマンドを実行して、GPGキーをインポートして、VirtualBox リポジトリの設定ファイルを配置する。

        ※リポジトリの設定をしてもリポジトリにアクセスできない

        $ sudo rpm --import https://www.virtualbox.org/download/oracle_vbox_2016.asc
        $ sudo curl -LO --output-dir /etc/yum.repos.d \
          https://download.virtualbox.org/virtualbox/rpm/fedora/virtualbox.repo
  2. カーネル・モジュールのビルド

    VirtualBoxをインストールした場合は 、以下のコマンドを実行して VirtualBox 用のカーネル・モジュールをビルドする。カーネルをアップグレードした時は、 カーネル・モジュールのビルドは自動的に行われる。

    注 意

    kernel module のビルドに必要な以下のパッケージをインストールしておくこと。

    • kernel-devel
    • gcc
    • make
    • perl
    • elfutils-libelf-devel (Fedora 27 以降に必要)
    • RPM Fusion リポジトリからインストールした場合
      # akmods --rebuild

      なお、VirtualBox パッケージをインストール/アップグレードすると、カーネル モジュールのビルドが自動的に行われる。

    • VirtualBox.org の RPM パッケージをインストールした場合
      # /sbin/vboxconfig
      備 考
      • vboxconfigコマンドを実行した結果エラーメッセージが表示された場合は、 /var/log/messages を確認して、「failed: modprobe vboxdrv failed.」が 出力されていれば、後続の処理を実行すれば問題ない。
      参考文献

Secure Bootへの対応

  1. キーペアの作成とキーの登録

    初めて VirtualBox をインストールした場合は、以下の手順を実施してキーペアを 作成し、public key を Secure Boot に登録する。

    • RPM Fusion リポジトリからインストールした場合
      1. public key の登録

        VirtualBoxパッケージのインストールにより、キーペアの public key の シンボリックリンクが /etc/pki/akmods/certs/public_key.der に作成される ので、以下のコマンドを実行してこれを Secure Boot に登録する。 「-P」オプションを指定すると root ユーザーのパスワードを使用して登録 するが、指定しない場合はパスワードの入力が要求される。

        # mokutil [-P] --import /etc/pki/akmods/certs/public_key.der
      2. システムの再起動とUEFIファームウェアへのpublic keyの登録

        public keyを Secure Boot に登録した後システムを再起動すると、UEFIの ファームウェアが「Shim UEFI key management」のメニューを表示するので、 何かキーを押して、以下の手順を実施する。

        1. Perform MOK management

          「Enroll MOK」を選択し、次に「Continue」を選択して次に進む。

        2. Enroll the key(s)?

          「Yes」を選択 ⇒ 「Password:」に「public key の登録」で入力した パスワードを入力 ⇒ 「Reboot」を選択してシステムを再起動する。

      参 考
    • VirtualBox.org の RPM パッケージからインストールした場合の手順
      1. X509キーペアの作成

        キーペアを保管するディレクトリに移動し、以下のコマンドを実行して X509 の キーペアを生成する。

        # mkdir -p /var/lib/shim-signed/mok
        # openssl req -nodes -new -x509 -newkey rsa:2048 -outform DER -addext \
          "extendedKeyUsage=codeSigning" -keyout /var/lib/shim-signed/mok/MOK.priv \
          -out /var/lib/shim-signed/mok/MOK.der
        • openssl パッケージが未インストールの場合は、 「sudo dnf install openssl」コマンドを実行して、openssl パッケージを インストールする。
        • openssl コマンドの実行で、キーのリクエスト情報の入力が要求されたら そのままリターンキーを押して既定値を設定することが可能である。
          Country Name (2 letter code) [XX]:
          State or Province Name (full name) []:
          Locality Name (eg, city) [Default City]:
          Organization Name (eg, company) [Default Company Ltd]:
          Organizational Unit Name (eg, section) []:
          Common Name (eg, your name or your server's hostname) []:
          Email Address []:
      2. public key の登録

        以下のコマンドを実行して public key を登録する。「-P」オプションを指定 するとrootユーザーのパスワードを使用して登録するが、指定しない場合は パスワードの入力が要求される。

        # mokutil [-P] --import /var/lib/shim-signed/mok/MOK.der
      3. システムの再起動とUEFIファームウェアへのpublic keyの登録

        システムを再起動し、「RPM Fusion リポジトリからインストールした場合」と 同様な手順を実施する。

      4. VirtualBox サービスの再起動

        public key の登録後システムが起動したら、以下のコマンドを実行して カーネル・モジュールをビルドして、VirtualBox サービスを再起動する。

        # rcvboxdrv setup
  2. カーネル・モジュールの署名とカーネルへの登録

    初めて VirtualBox をインストールする場合、または kernel をアップグレード した場合は、カーネル・モジュールの書名とカーネルの登録をする必要がある。 RPM Fusion、または VirtualBox.org のパッケージをインストールした場合は、 これらは自動的に行われる。

    参考までに、カーネル・モジュールの書名とカーネルへの登録を手動で行う場合の 手順を以下に示す。

    1. kernelバージョンの確認

      「uname -r」コマンドを実行し、その結果が最新バージョン (「ls /usr/src/kernels/」を実行してバージョンが最も新しいものを確認 する)でない場合は、システムを再起動する。

    2. カーネル・モジュールの署名

      private key及び署名要求ファイルを保存したディレクトリに移動して、以下の コマンドを実行し、vboxdrv.ko〜vboxnetflt.koを上記で作成した署名要求 ファイル(自己署名ファイル)で署名する。

      # /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 \
        ./MOK.priv ./MOK.der $(modinfo -n vboxdrv)
      # /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 \
        ./MOK.priv ./MOK.der $(modinfo -n vboxnetadp)
      # /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 \
        ./MOK.priv ./MOK.der $(modinfo -n vboxnetflt)
    3. カーネル・モジュールのカーネルへの登録
      # modprobe vboxdrv
      # modprobe vboxnetadp
      # modprobe vboxnetflt

      モジュールファイルの署名とカーネルへの登録を行うシェルスクリプトを以下に 示す。このシェルスクリプトは、root権限のユーザで実行すること。

      for module in $(dirname $(modinfo -n vboxdrv))/*; do \
        extension=${module##*.}; \
        if [ _$extension == _xz ]; then \
          xz -d ${module}; \
          /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \
            `dirname ${module}`/`basename -s .xz ${module}`; \
          xz `dirname ${module}`/`basename -s .xz ${module}`; \
        else \
          /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \
            ${module}; \
        fi; \
        modprobe `basename ${module} | sed 's/\..*$//g'`; \
      done
      備 考

      「modinfo vboxdrv」コマンドを実行した結果「Module vboxdrv not found.」 が表示される場合は、引数なしで「depmod」コマンドを実行すること。

    参 考
備 考
  • kernel module についてV

    irtualBox 6.1 から、vboxpci 廃止、vboxsf 追加となった模様。

参 考

TOPICS

  • Nested virtualization

    Virtual Box 6.1 より Intel アーキテクチャの nested virtualization が サポートされた。Virtual Box の設定画面で「ネステッドVT-x/AMD-Vを有効化」が 無効化されている場合は、以下のコマンドを実行して有効化することができる。

    $ vboxmanage modifyvm <VM-name> --nested-hw-virt on
    参 考
  • Windows 10 仮想マシンで Hyper-V プラットフォームが有効にならない

    「管理者として実行」で PowerShellを起動し、以下のコマンドを実行する。

    > Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
    (optional)
    > Enable-WindowsOptionalFeature -Online -FeatureName Containers -All
    > bcdedit /set hypervisorlaunchtype Auto
  • 可変サイズの仮想ディスクのファイル削除後にディスク容量を縮小する

    可変サイズの仮想ディスクは、ファイルを削除してもディスク容量は小さく ならない。ファイル削除後にディスク容量を縮小するためには、以下の手順を 実施する。

    1. ディスクの空きスペースを0埋めして削除

      ディスクを割り当てた仮想マシンを起動してログインし、縮小したいディスクの マウントディレクトリ配下の任意のディレクトリに移動して、以下のコマンドを 実行する。

      # dd if=/dev/zero of=zero bs=4k; \rm zero
    2. 仮想ディスク容量の縮小

      仮想マシンを停止して、以下のコマンドを実行する。

      $ vboxmanage modifymedium <仮想ディスクイメージファイルのパス> --compact
  • 仮想ディスクイメージを変換する

    VirtualBox マネージャーのツールから「メディア」を選択し、仮想ディスクの コピーを行う過程で、以下のような仮想ディスクイメージの変換を行うことが できる。

    • ファイルのタイプ(VDI、VHD、VMDK)の変更
    • 可変サイズのイメージから「全サイズの事前割当て」に変更
  • VBoxManage: error: VirtualBox can't operate in VMX root mode.

    仮想マシンを起動しようとすると以下のメッセージが表示されて起動できない 場合の対処方法を説明する。

    VBoxManage: error: VirtualBox can't operate in VMX root mode. Please disable the KVM kernel extension, recompile your kernel and reboot (VERR_VMX_IN_VMX_ROOT_MODE)

    • 対処方法

      以下のコマンドを実行した後に、仮想マシンを起動する。

      # modprobe -r kvm_intel
  • Fedora 42でVirtualBoxが起動しない(画面が表示されない)

    環境変数「LC_ALL=en_US.UTF-8」を設定して VirtualBox を起動すると VirtualBoxの画面が表示されるようになる。

    [VirutalBox 起動コマンド]

    $ LC_ALL=en_US.UTF-8 virtualbox > /dev/null 2>&1 &
    参 考
  • VirtualBox 7.2 で ゲストOSのNAT接続でのDNSの名前解決ができない

    VirtualBox 7.2 からは、NAT接続の場合は ホストOSに設定されたDNSサーバーを ゲストOSに設定するようになった。ホストOSが Fedora の場合(systemd-resolved サービスが起動している場合)は、ホストOSのDNSサーバーは「127.0.0.53」を 使用するため、ゲストOSのDNSサーバーも「127.0.0.53」が設定されることになる。

    ゲストOSから名前解決を有効にする貯めには、VirtualBox の NAT エンジンが提供 するDNSサーバー(有効なNATインターフェースが1つの場合は「10.0.2.3」)を ゲストOSが使用するようにDNSの設定をする必要がある。

    ゲストOSで systemd-resolved サービスが起動している場合は、 /etc/systemd/resolved.conf.d/50-vboxguest.conf ファイル(ファイル名は 拡張子が.confであれば他の名前でもよい)に以下の設定をする。

    [Resolve]
    DNS=10.0.2.3
    参考文献

VirtualBox Guest Addtions (fc30)

Guest Additions CD イメージからインストールする場合 (fc27)

FedoraにVirtualBox Guest Additionsをインストールする手順を以下に示す。

  1. インストールの準備

    以下のパッケージをインストールする。

    • kernel-devel
    • gcc
    • make
    • perl
    • bzip2
    • tar
    • elfutils-libelf-devel (Fedora 27 以降に必要)
    • libxcrypt-compat ※fc30以降で必要となる模様
  2. Guest Additions CD イメージの挿入
    1. Guest OSの「デバイス」「Guest Additions CD イメージの挿入」メニューを 選択する。
    2. 「VirtualBox Guest Additionsディスクイメージファイルが見つかり ません。インターネットからディスクイメージをダウンロードしますか?」の メッセージ・ダイアログが表示されるので、「ダウンロード」ボタンを押す。
    3. 「本当にVirtualBox Guest Additionsディスクイメージを https://download.virtualbox/... からダウンロードしますか?」のメッセージ・ ダイアログが表示されるので、「ダウンロード」ボタンを押す。
    4. 「ディスクイメージファイルを登録し、仮想光学ドライブに挿入 しますか?」のメッセージ・ダイアログが表示されるので、「挿入」ボタンを 押す。
  3. インストーラーの実行
    1. ファイルマネージャーから「VBox_GAs_x.x.x」をクリックして、CDイメージを マウントする。
    2. CDイメージのマウント・パスに移動し、以下のコマンドを実行する。
      # ./VBoxLinuxAdditions.run
  4. ユーザーグループの設定

    VirtualBoxマネージャーで設定した共有フォルダにアクセスする場合は、以下の コマンドを実行して、ログインユーザーを「vboxsf」グループに追加する。

    # usermod -aG vboxsf <ログインユーザー>
備 考
  • VirtualBoxマネージャーで設定した共有フォルダにアクセスするとSELinuxの 警告が発生する場合は、SELinux通知ブラウザーを開いて「詳細」ボタンを押して ログを表示し、記載されている内容に従って対処する。

    例:root権限で「/sbin/restorecon -v /etc/ld.so.cache」を実行する。

virtualbox-guest-additionsパッケージからインストールする場合 (fc28)

  1. インストールの準備

    RPM Fusion Repositoryの手順に従ってRPM Fusionのリポジトリにアクセス できるようにする。

  2. パッケージのインストール

    以下のコマンドを実行して、akmod-VirtualBoxパッケージ(RPM Fusionより)、 virtualbox-guest-additionsパッケージ(Fedora updatesより)とその 依存パッケージをインストールする。

    # dnf install akmod-VirtualBox virtualbox-guest-additions
  3. システム再起動
出 典
備 考

結局共有フォルダの参照はできなかった。

Test BuildのGuest Addtions CDイメージを使用する場合 (fc28)

  1. インストールの準備

    「Guest Additins CD イメージからインストールする場合」と同様に必要な パッケージをインストールする。

  2. 5.2.19 test buildsのGuest Additions CDイメージのダウンロード

    [https://www.virtualbox.org/wiki/Testbuilds]VirtualBox test builds より Latest 5.2.x test builds の「Guest Additions」のリンクから Guest Additions CDイメージをダウンロードする。

  3. Guest Additions CDイメージのマウント
    1. Oracle VM VirtualBox マネージャーで仮想マシンを選択し、「仮想マシン」 メニューから「設定」を選択して「設定」ダイアログを開く。
    2. 「ストレージ」を選択して、光学ドライブに対してダウンロードした Guest Additions CDイメージファイルを指定して、Guest Additions CDイメージを マウントする。
  4. インストーラーの実行

    「Guest Additions CD イメージからインストールする場合」と同様にGuest Addtion CDのインストーラーを実行する。

  5. システムの再起動
備 考

この方法で共有フォルダを参照することができた。


VLC media player (fc25)

前提条件

RPM Fusion Repositoryが設定されていること。

VLCのインストール

以下のコマンドを実行して、VLCをインストールする。

# dnf install vlc

なお、商用の(コピーガードがかかった)DVD再生はできない。


w3m (fc27) - text-based web browser

w3mは端末(Terminal emulator)からブラウジング可能なWeb Browserである。 画像、動画、音声には対応しないが(w3m-imgパッケージをインストールすれば画像の 表示が可能になる)、HTMLを整形してテキスト表示したりファイルをダウンロード することができる。Lynxと異なり表も整形して表示される。

インストール

# dnf install w3m

コマンド

  • w3m の起動
    • 1ページを表示
      $ w3m <URL>
    • タブで複数のページを表示
      $ w3m -N <URL> [ <URL> ... ]

    URLにファイルのパスを指定することも可能。

  • w3mの終了

    「q」をタイプする。

  • 起動後の主なコマンド
    コマンド 説明
    TAB 次のリンクにカーソルを移動
    ESC TAB 前のリンクにカーソルを移動
    SPC 次のページに移動
    b 前のページに移動
    RET カーソルの位置にあるリンク先を表示
    a カーソルの位置にあるリンク先のファイルをダウンロードする
    B 前のリンクの内容を表示
    s リンクの履歴を表示。表示された履歴をカーソルで移動してRETキーを 押すとその内容を表示する。
    Ctrl-u RET 検索やURLなどの入力モードから抜ける
    -- Shiftキーを押しながらマウスをドラッグすると、その範囲を選択 する。Terminal emulatorのメニューでコピーすれば、他の アプリケーションにペーストすることが可能。
    コマンドの補足
    • TAB - タブキー
    • ESC - エスケープキー
    • SPC - SPACEキー
    • ESC TAB - エスケープキーを押した後にTABキーを押す
    • Ctrl-u - コントロールキーを押しながらuキーを押す

w3m-img (fc27)

w3m-img パッケージは、w3m でHTMLを表示するときに、画像も表示できるように するためのパッケージである。

パッケージのインストール

# dnf install w3m-img

画像表示に対応するTerminal emulator

  • Fedora Spin Xfce 標準の Terminal emulatorである xfce4-terminal は、画像の インライン表示に対応しているが、システム再起動が必要である。
  • Gnome Terminalは画像のインライン表示に対応していない模様(未検証)。
  • xterm は、画像のインライン表示が可能である。

Windows 10 Preinstalled Product Key

PCにプレインストールされたWindows 10のProduct Keyは、以下のファイルに格納 されている。

/sys/firmware/acpi/tables/MSDM

以下のコマンドを実行することによって、Product Keyを確認することができる。

# hexdump -C /sys/firmware/acpi/tables/MSDM

Windows 10 theme (fc25)

  1. ダウンロード

    https://github.com/B00merang-Project/Windows-10/releases より以下の ファイルをダウンロードする。

    • Windows.10.Dark.v0.9.9.SP1.tar.gz
    • Windows.10.Icons.v0.5.tar.gz
  2. インストール
    • Windows.10.Dark.v0.9.9.SP1.tar.gz を /usr/share/themes ディレクトリの下に 解凍する。
    • Windows.10.Icons.v0.5.tar.gz を /usr/share/icons ディレクトリの下に 解凍する。
  3. スタイルの適用
    • 「アプリケーション」メニューから「設定」「外観」を選択して、「外観」画面を 表示する。
    • 「スタイル」タブで「Windows 10 Dark」を選択する
    • 「アイコン」タブで「Windows 10」を選択する

Wine topics (fc25)

Wineのインストール

wine及びwinetricksをインストールする。winetricksは、wineにdotnetなどの Windowsのシステムライブラリをインストールするためのツールである。

# dnf install wine

wineの環境変数

  • WINEPREFIX

    wineのデータを格納するディレクトリを指定する。この設定を省略すると、 wineのデータは、~/.wine ディレクトリに格納される。

  • WINEARCH

    Windowsのアーキテクチャを指定する。「win32」を指定するとWindows 32ビット、 「win64」を指定するとWindows 64ビットになる。

wineの初期設定

必要に応じて、WINEPREFIX、またはWINEARCH環境変数を設定した後に、「winecfg」 コマンドを実行して、wineの初期設定を行う。

winetricks及び関連パッケージのインストール

  • winetricksのインストール

    winetricks パッケージが使用できない場合は、以下のコマンドを実行して、 winetricks をダウンロードし、ダウンロードしたファイルに実行権限を付与する。

    # cd /usr/bin
    # wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
    # chmod a+x winetricks
  • 書庫展開ツールのインストール

    以下のコマンドを実行して、windowsのインストーラーが使用する書庫展開ツールを インストールする。

    # dnf install unzip cabextract

wodim (fc26) - format and record audio CD

パッケージのインストール

# dnf install wodim

CD-RWの(再)初期化

以下のコマンドを実行すると、CD-RWの(再)初期化を実行することができる。

$ wodim -v dev=/dev/cdrom blank=fast

「format=fast」の代わりに「blank=all」を指定すると、メディアを完全に初期化 する。

Audio CD の読み書き

※ CD-Text には対応していない

  1. Audio CD を読み込んでISOイメージに出力する
    $ readom dev=/dev/cdrom -clone -nocorr f=<ISOイメージファイル名>

    上記のコマンドを実行すると、Audio CD の ISOイメージファイルと、 「table of contents」(イメージファイル名の後ろに拡張子「.toc」が付いた ファイル)がカレントディレクトリに作成される。

  2. Audio CD の ISOイメージをCompact Diskに書き込む

    ISOイメージファイルと「table of contents」(ISOイメージファイル名の後ろに 拡張子「.toc」が付いたファイル)が存在するディレクトリに移動し、以下の コマンドを実行する。

    $ wodim dev=/dev/cdrom -raw96r -clone -v <ISOイメージファイル名>

WAVファイルのフォーマット変更

audio CDは、サンプリングが44100の16-bit digital audioのstereoである必要が ある。soxなどを使用して、WAVファイルのフォーマットをこの形式に変更する。

入力ファイルをサンプルレートが44100Hz、bit数が16のWAVファイルに変換し、 音量を正規化するためのコマンドの例です。

$ sox --norm <入力WAVファイル> -b 16 <出力WAVファイル> rate -s -a 44100 dither -s

WAVファイルの書き込み

以下のコマンドを実行して、WAVファイルをaudio CDに書き込んで、書き込み終了後に CDをejectする。-nofix オプションを指定すると、CDセッションを終了しないので、 WAVファイルを後で追加することができる。

$ wodim -v -nofix -eject dev=/dev/cdrom -audio -pad <WAVファイル> ...

音楽を再生できるようにするには、以下のコマンドを実行してCDセッションを 終了する。

$ wodim -v -fix -eject dev=/dev/cdrom

CD-TextのAudio CD複製

  1. Audio CDの内容をすべてコピーする

    下記のコマンドを実行すると、CDの情報をすべて出力し、cddbから取得した アルバム/トラック情報のエントリが複数見つかった場合は手動で選択し、すべての トラックをトラック別のファイルにwav形式で出力する。

    $ icedax dev=/dev/cdrom -vall cddb=0 -B -Owav
  2. .infファイルの以下の項目を編集する
    • Albumperformer : 演奏者
    • Performer : 作曲家
    • Albumtitle : CDのタイトル
    • Tracktitle : トラックのタイトル
  3. *.wavファイルと*.infファイルを使用してCD-TextのAudio CDを作成する

    下記のコマンドを実行すると、メディアの書き込みの進行状況を表示し、wavファイルの 拡張子を「.inf」に変更したファイルの内容でaudio optionを設定し(-useinfo)、 *.infファイルの内容でCD-Textの情報を書き込む(-text)。

    $ wodim dev=/dev/cdrom -v -dao -useinfo -text *.wav

Xfce menu customize (fc27)

メニュー項目の追加

  • XXX.appdata.xml の作成

    /usr/share/appdata または ~./local/share/appdata の下に 以下に示す <app-name>.appdata.xml ファイル(XXXはアプリケーション名)を 作成して、メニュー項目(アプリケーション)について記述する。なお、この ファイルがなくてもメニューに項目を追加することは可能である。

    <?xml version="1.0" encoding="UTF-8"?>
    <component type="desktop">
      <id>XXX.desktop</id>
      <project_license><<ライセンス>></project_license>
      <name><<アプリケーション名>></name>
      <summary><<概要説明>></summary>
      <description>
        <p>
          <<詳細な説明>>
        </p>
      </description>
      <url type="homepage"><<アプリケーションのホームページのURL>></url>
      <screenshots>
        <screenshot type="default"><<スクリーンショット画像のURL>></screenshot>
        <screenshot><<その他のスクリーンショット画像のURL>></screenshot>
      </screenshots>
    </component>

    以下の例はEclipseをメニュー項目として定義するために 「eclipse.appdata.xml」を記述した例である。

    <?xml version="1.0" encoding="UTF-8"?>
    <component type="desktop">
      <id>eclipse.desktop</id>
      <project_license>Eclipse Public License 2.0</project_license>
      <name>Eclipse</name>
      <summary>IDE for building integrated web and application development tooling</summary>
      <description>
        <p>
          Eclipse is a platform that has been designed from the ground up for
          building integrated web and application development tooling. By design,
          the platform does not provide a great deal of end user functionality by
          itself. The value of the platform is what it encourages: rapid development
          of integrated features based on a plug-in model.
        </p>
        <p>
          Eclipse provides a common user interface (UI) model for working with
          tools.  It is designed to run on multiple operating systems while
          providing robust integration with each underlying OS. Plug-ins can
          program to the Eclipse portable APIs and run unchanged on any of the
          supported operating systems.
        </p>
        <p> 
          At the core of Eclipse is an architecture for dynamic discovery, loading,
          and running of plug-ins. The platform handles the logistics of finding
          and running the right code. The platform UI provides a standard user
          navigation model. Each plug-in can then focus on doing a small number of
          tasks well. What kinds of tasks? Defining, testing, animating, publishing,
          compiling, debugging, diagramming...the only limit is your imagination.
        </p>
      </description>
      <url type="homepage">http://www.eclipse.org</url>
      <screenshots>
        <screenshot type="default">http://www.eclipse.org/screenshots/images/thumbnails/SDK-RedFlag_Linux.png</screenshot>
        <screenshot>http://www.eclipse.org/screenshots/images/thumbnails/JavaPerspective-WinXP.png</screenshot>
      </screenshots>
    </component>
  • XXX.desktop の作成

    /usr/share/applications または ~./local/share/applications の下に 以下に示す<app-name>.desktop ファイルを作成する。

    [Desktop Entry]
    Version=1.0
    Type=Application
    Name=<アプリケーション名>
    GenericName=<一般的な名称>
    Comment=<コメント>
    Icon=<アイコンファイルのパス>
    Categories=<カテゴリ1>;<カテゴリ2>;...;
    Path=<実行時のカレントディレクトリ>
    Exec=<実行ファイルのパス>
    TryExec=<再試行時の実行ファイルのパス>

    以下の例は、Eclipseを「開発」カテゴリに追加するために「eclipse.desktop」を 記述した例である。

    [Desktop Entry]
    Version=1.0
    Type=Application
    Name=Eclipse
    GenericName=Java IDE
    Comment=Eclipse Java IDE
    Icon=/opt/eclipse/icon.xpm
    Categories=GTK;Development;IDE;
    Path=/opt/eclipse
    Exec=/opt/eclipse/eclipse %U
    TryExec=/opt/eclipse/eclipse
  • メニュー表示の更新

    以下のコマンドを実行して、メニューの表示を更新して追加された項目が見える ようにする。

    $ xfdesktop --reload
参 考

xterm (fc27)

パッケージのインストール

以下のコマンドを実行して、パッケージをインストールする。

# dnf install xterm

xtermの設定について

xterm には設定のためのメニューが存在しないため、コマンドラインからの起動時に オプションを指定するか、~/.Xdefaults ファイルに X Windowsの設定の書式で 設定を記述することになる。以下のオプション

  • 前景色は白
  • 背景色は黒
  • 横100文字、縦30文字で表示
  • フォントのサイズは18

    を起動時、及び設定ファイルに設定する例を以下に示す。

  • 起動時にオプションで指定する場合
    $ xterm -fg white -bg black -g 100x30 -font *-fixed-*-*-*-18-*
  • ~/.Xdefaults に設定する場合
    xterm*foreground: white
    xterm*background: black
    xterm*geometry: 100x30
    xterm*font: *-fixed-*-*-*-18-*

    「xrdb ~/.Xdefaults」コマンドを実行して、設定をX Serverに反映させてから xtermを起動すること。


zoom (fc32)

インストール

  1. https://zoom.us/download?os=linux より Linux版 Zoomクライアントを ダウンロードする
    • Linuxタイプ:Fedora
    • OSアーキテクチャ:64ビット

    以上を指定して、「ダウンロード」ボタンとクリックする。

  2. パッケージをインストールする
    # dnf install zoom_x86_64.rpm

接続テスト

ブラウザ(Firefox)からhttps://zoom.us/testに接続して、カメラ、マイクの 接続確認をする。