以下のコマンドを実行して、386-ds-base パッケージをインストールする。
# dnf install 386-ds-base
# dnf install zip unzip [convmv]
zipファイルに格納されるファイル名のエンコーディングに UTF-8 以外のもの (Shift JIS など)を指定する場合は、convmv パッケージもインストールする。
# dnf install p7zip-plugins
# dnf install unar
アーカイブするファイルまたはディレクトリが存在するディレクトリに移動して、 以下のコマンドを実行する。
$ zip [-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
アーカイブするファイルまたはディレクトリが存在するディレクトリに移動するか、 -w オプションでアーカイブ対象のファイルまたはディレクトリが存在する ディレクトリを指定して、以下のコマンドを実行する。
$ 7z a [-p<password>] [-scs<charset>] <archive-file>.zip \
{<file-name>|<dir-name>} [...]$ unzip [-l] [-d <output-dir>] [-P <password>] [-O <charset>] <archive-file> \
[{<file-name>}|<dir-name>} ...]$ 7z {l|x} [-o<output-dir>] [-p<password>] [-scs<charset>] <archive-file>.zip \
[{<file-name>|<dir-name>} ...]$ unar [-o <output-dir>] [-p <password>] [-e <charset> <archive-file>] \
[{<file-name>}|<dir-name>} ...]以下のコマンドを実行して、パッケージをインストールする。
# dnf install httpd
httpd.conf で指定する設定項目のうち主なものを示す。
待ち受けるアドレスとポート番号を「アドレス:ポート番号」、または 「ポート番号」の形式で指定する。この項目は複数指定できるので、待ち受ける アドレス、ポートが複数ある場合は、それぞれを指定する。
リダイレクトするときにURLに使用するサーバ名とポート番号を 「サーバ名:ポート番号」の形式で設定する。指定を省略するとIPアドレス からの逆引きでサーバ名を取得する。サーバ名のみを指定した場合はリクエストの ポート番号をそのまま使用する。
エラー表示などで問い合わせ先(のメールアドレス)の表示内容を設定する。
応答ヘッダに設定するサーバ情報を指定する。セキュリティの観点から詳細な 情報の設定は推奨されないので、「ProductOnly」を指定した方が良い。
SSL/TLSの接続をサポートする場合は、以下のコマンドを実行してパッケージを インストールする。
# dnf install mod_ssl
openssl コマンドやkeytool コマンドを使用して、以下のファイルを準備する。
サーバ証明書の署名要求ファイルを作成するために必要な private key を作成 する。
自己認証局でサーバ証明書の署名を行った場合は、署名に使用した自己認証局の 証明書を取得しておく。
mod_ssl パケージをインストールすると、/etc/httpd/conf.d ディレクトリの下に ssl.conf ファイルが作成され、ポート番号443の<VirtualHost>ディレクティブが 作成されるので、そこに以下の項目を設定する。
「on」(既定値)を設定する。
サーバ証明書のファイルの絶対パスを指定する。サーバ証明書は、 /etc/pki/tls/certs/ ディレクトリの下に配置する。
サーバ証明書の署名要求ファイル作成時に使用した private key の絶対パスを 指定する。暗号化された private key を指定すると、サービス起動時に パスワード入力を要求されるので、httpd を自動起動する場合は、暗号化なしの private key のファイルを設定すること。private key は、 /etc/pki/tls/private/ ディレクトリの下に配置する。
自己認証局で署名した場合は、自己認証局の署名ファイルの絶対パスを指定する。 証明書は、/etc/pki/tls/certs/ ディレクトリの下に配置する。
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>
設定の注意点は以下のとおり。
Reverse Proxy の主な用途は、インターネットからファイアウォール内部のサーバに アクセスする場合に、そのサーバへのリクエストを中継するためにインターネット からアクセス可能なサーバを設置することである。
---------- ----------------- ----------- | Client | ---> | Reverse Proxy | ---> | Backend | | | | (Proxy) | | Server | ---------- ----------------- -----------
Reverse Proxyの設定手順は以下のとおり。
以下のコマンドを実行して、SELinuxへ httpd プロセスの権限を設定する。
# setsebool -P httpd_can_network_connect 1
httpdの設定ファイル(/etc/httpd/conf.d/mod_proxy.conf など)を作成して、 以下のディレクティブを設定する。
リバース・プロキシの場合は、Proxy Requestsを Off に設定して、Foward Proxy の機能を無効にする。
「ProxyPass path backend-url」を設定して、Reverse Proxy のリクエスト URLのパスが path から始まった場合に、リクエストURLのパスの path 部分を backend-url の後ろに付加して転送する。
Backend Server からリダイレクト応答が帰ってきた場合に、Location ヘッダの 内容を調整して Local Server が Client に応答を返すようにする。 「ProxyPassReverse path backend-url」(path、backend-urlは ProxyPassと 同じもの)を設定して、Background Server からの Location 応答 ヘッダの値の「backend-url」の部分を「path」に置換して Reverse Proxy が Client に応答を返すようにする。
「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 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]
上記の設定により、以下のことが行われる。
リバースプロキシの構成で Reverse Proxy のパスと Backend Server のリクエストURL のパスが異なる場合は、mod_proxy_html モジュールまたは mod_substitute モジュールのディレクティブを設定して、Backend Server のコンテンツの絶対パス (/から始まるURL)のリンクを書き換える必要がある。
mod_proxy_html モジュールのディレクティブを設定して、Backend Serverから 返された HTML のリンクの書き換えを設定する。設定手順は以下のとおり。
# dnf install mod_proxy_html
ディレクティブの値に「On」を設定して、HTML の書き変えを有効にする。
ディレクティブの値に、XML(xhtmlを含む)の文字エンコーディングが未定義の 場合に使用する既定値を設定する。
ディレクティブの値に「*」をして書き換え後の Charset に書き換え前と同じ ものを設定する。
ディレクティブの値に「unset Accept-Encoding」を設定して、Backend Server が gzip などの圧縮エンコードでコンテンツを返さないようにする。
リンク書き換え対象の HTML タグと属性を設定する。モジュール ドキュメント の「Examples from proxy-html.conf」の内容を設定する。
ディレクティブの値に「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_proxy_html モジュールでは、HTMLに埋め込まれた javascript の関数呼び出し の引数などは、書き換えることはできない。このような場合は、mod_substitute モジュールを使用して、コンテンツの書き変えを行なう。
ディレクティブの値に「SUBSTITUTE media-type [media-type ...]」を 指定して、コンテンツの書き換え対象となる media-type を指定する。
「ProxyPass "/foo" "http://example.com/bar"」を設定した場合に、 Backend Server からの応答の HTML 及び JavaScript を以下のように書き換え たいとする。
この場合の設定例を以下に示す。
#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 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の設定ファイル(/etc/httpd/conf.d/mod_proxy_balancer.conf など)を 作成して、以下のディレクティブを設定する。
「<Proxy "balancer://balancer-name">」を設定して、このセクションの 中に Balancer Member を設定して、Balancing Group(Load Balancer の リクエスト転送先のグループ)を定義する。
「BalancerMember backend-url [key=value [key=value ...]]」を 設定して Load Balancer が受信したリクエストを backend-url のURLに 転送する。backend-url の後ろに key=value を設定して、 BalancerMember パラメーターを設定することができる。BalancerMember パラメーターについては、 ProxyPass ディレクティブの「Worker|BalancerMember parameters」の項を参照のこと。
これは負荷分散の方式を指定する Balancer パラメータである。設定を 省略すると、mod_lbmethod_byrequests モジュールで提供される 「byrequests」(リクエスト単位で Backend Serverを振り分ける)が 設定される。
「<Location "path">」を設定して、このセクションの中で ProxyPass、 ProxyPassReverse ディレクティブを設定する。path には Load Balancer の リクエスト振り分け対象となるリクエストURLのパスを設定する。
Balancer パラメーターまたは BalancerMember パラメーターを設定する。
「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 "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>
Webアプリケーションのセッションごとに Backend Server を固定して load balancing するためには、stickysession Balancer パラメーター、route BalamcerMember パラメーター等を設定する。
[設定例]
<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>
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>Proxyの対象となるURL。URLの後ろにワイルドカード「*」を使用して、ディレクトリ 配下のURLを対象にできる。
<Proxy http://example.com/foo/*>
...
</Proxy><ProxyMatch>ディレクティブに設定するURLは正規表現で指定する。 ディレクティブの中の設定は、<Proxy>ディレクティブと同じである。
<ProxyMatch https?://example.com/foo/.*>
...
</ProxyMatch>httpdのエラーログ(/var/log/httpd/error_log)を開き、以下のように出力されて いる行を探す。
AH01797: client denied by server configuration: proxy:xxxxxxxxxx
この行の「proxy:」以降の出力結果(例は以下のとおり)で、必要と思われるものを <Proxy>ディレクティブまたは<ProxyMatch>ディレクティブに指定する。
Allow from には、Proxyの送信を許可するホスト名またはネットワークアドレスを 指定する。
ホスト名、またはネットワークアドレスを指定する。記述の書式は、 http://httpd.apache.org/docs/2.4/mod/mod_proxy.html#access を参照の こと。以下に設定例を示す。
以下のクライアントは、http://example.com/foo/* へのproxyを許可する。
<Proxy http://example.com/foo/*>
Order deny, allow
Deny from all
Allow from 192.168.56 10.1 .net.example.edu
</Proxy>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サーバ名>:<ポート番号>
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 (略称:SSI) は、CGI や動的なコンテンツ生成技術を使用 せずに、HTML にディレクティブを配置することで HTML に動的に生成された コンテンツを追加するものである。
SSIの理容手順は、 Apache チュートリアル: Server Side Includes 入門 を参照すること。以下では、SSI を有効にする手順とSSIを使用して Apache の サーバー変数を表示する例とHTTPリクエストヘッダを表示する例を示す。
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のサイトからバイナリを取得して、サービスとして設定する手順を示す。
http://tomcat.apache.org/ の「Download」ページから「Binary Distributions」 の zip 形式の Core ファイル(apache-tomcat-<version>.zip)を取得する。
取得したバイナリファイルをインストール先のディレクトリ(例:/opt)の下で 解凍する。バージョンアップ時にUnitファイルの書き換えを抑止するために /opt ディレクトリの下で「ln -sf tomcat-install-dir tomcat」コマンドを実行する。
JRE (Java Runtime Environment)をインストールする。以下のコマンドは、 OpenJDK 11の headless版(GUI機能を持たないもの)のインストール例である。
# dnf install java-11-openjdk-headless
/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]
CATALINA_OPTS などTomcat実行時に設定する環境変数が長くなる場合は、 config-file-path で指定したファイルに環境変数を設定する。ファイル・パスの 前に「-」を付けると、指定したファイルが存在しない場合でもエラーとはしない。
CATALINA_OPTS 環境変数を設定する。CATALINA_OPTS 環境変数は、Tomcat開始時 (ExecStart実行時)にJVM に渡される引数を指定する。上記の例では、Heep領域の 初期値と最大値を指定している。指定するメモリのサイズは、1Mバイト(1024バイト) の倍数で、単位k/m/gを付けて指定することができる。
Tomcat停止時(ExecStop実行時)はCATALINA_OPTSに設定された引数はJVNに 渡されない。Tomcat開始時/停止時共にJVNに引数を渡す場合は、JAVA_OPTS 環境変数にJVMに渡す引数を設定すること。
tomcatユーザでTomcatのサービスを実行する。この設定をした場合は、以下の 設定をして、tomcatグループでTomcatが実行可能となるようにする。
以下のコマンドを実行してtomcatユーザ及びグループは作成する。groupadd、 および useradd コマンドに -r オプションを付けて システムアカウント (IDが 999 以下のアカウント)を作成する。
# groupadd -r tomcat # useradd -d /opt/tomcat -g tomcat -s /sbin/nologin -r tomcat
以下のコマンドを実行して、Tomcatインストールディレクトリ、及びその配下の ファイル、ディレクトリに対してグループに tomcat を指定する。また、tomcat グループに対してディレクトリ、ファイルの読み取り権限を設定する。
# chgrp -R tomcat <tomcat-install-dir> # chmod -R g+r <tomcat-install-dir> # chmod g+x <tomcat-install-dir>/conf
以下のコマンドを実行して、tomcat-install-dir配下の logs、temp、webapps、 work ディレクトリに対し tomcat グループの書き込み権限を設定する。
# chmod -R g+w logs temp webapps work
この設定を省略すると、root権限でTomcatサービスを実行する。
Apache httpd でリクエストを受け付け、それを Tomcatに転送する場合は、Apache httpd の Remote Proxy の設定を行って実現する。
Apache httpd で SSL/TLS 接続を受け付け、コンテンツの復号を行った後に Tomcat に転送するための設定を以下に示す。
以下のコマンドを実行して、SELinuxへ httpd プロセスの権限を設定する。
# setsebool -P httpd_can_network_connect 1
SSL/TLS の要求を Tomcatに転送するための設定をする。
/etc/httpd/conf.d/ssl.conf ファイルの<Virtual Host>ディレクティブに 以下の設定をする。
On を指定すると、proxy先のホスト(Tomcat service)に送る host ヘッダ の内容を ProxyPass のURLに指定したホスト名の代わりに受信したリクエスト の host ヘッダの内容(ブラウザで指定したURLのホスト名)に設定する。 通常は Off(既定値) にすることが推奨されている。
「ProxyPass / http://localhost:8080/」を指定して、Apache httpd が が受信したリクエスト全てを Tomcat が待ち受けているポート番号8080に 転送する。
「ProxyPassReverse / http://localhost:8080/」を指定して、 リモート・サーバのリダイレクト要求を必ずクライアントが処理するように する。
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>
ポート番号 80 の VirtualHost ディレクティブの中で、http の 要求を https にリダイレクト(サーバ名、リクエストURIはそのままで)する設定を記述する。
<VirtualHost _default_:80>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>tomcatサービスで動く Web Application 全体に適用される設定を記述する。
Web Application個別に適用される設定を記述する。
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>
/>[設定例]
Tomcatは Apache Commons DBCP (Database connection pooling service) を サポートしている。以下に、Apache Tomcat User Guideの JNDI Resources How-To の要約を記載する。
接続対象のDBMSのJDBCドライバーを $CATALINA_HOME/lib ディレクトリの下に 配置する。
${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>
${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 を参照すること。
代表的なDBMSの設定礼については、 Database Connection Pool (DBCP 2) Configurations を参照のこと。
# dnf install audacious
メニューから「ファイル」→「設定」を選択して「Audaciousの設定」画面を開いて 設定をする。
最小構成でインストールした場合などで、Audioが有効になっていない場合にAudioを 有効にする手順を以下に示す。
# dnf install alsa-plugins-pulseaudio pavucontrol alsa-firmware
# usermod -aG audio <login-user>
AutoFS はリムーバブルメディアやネットワーク共有などが接続されたりアクセス されたときに自動でマウントするパッケージです。
# dnf install autofs
シェル組み込みコマンドを含めた Unix シェルの情報を記載する。
getops はシェルの組み込みコマンドで、シェル引数のチェックと引数値の取得を する機能を提供する。
getops flag_a[:][flag_b[:]] name
#!/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説明
BVE (Train Simulator)は、dotnet 3.5で実装されたWindowsゲームアプリケーション だが、これをwine上で動かすための手順を以下に示す。
以下のコマンドを実行して、wine及びwinetricksをインストールする。
# dnf install wine winetricks
インストールが終わったら、以下のコマンドを実行して、「Wine 設定」画面が 表示されたら画面を閉じる。
$ WINEPREFIX=<wine-data-dir> WINEARCH=win32 winecfg
wine-data-dir は、Wine のデータを格納するディレクトリのパスを 指定する。
Wine topicsの「winetricks及び関連パッケージのインストール」を 参照して、winetricks(winetricksパッケージが使用できない場合) と書庫展開 ツールをインストールする。
winetricks コマンドを実行して、以下のライブラリをインストールする。
実行するコマンドは、以下のとおり。
$ WINEPREFIX=<wine-data-dir> WINEARCH=win32 winetricks -q msxml3 dotnet35sp1 \ d3dx9_43 fakejapanese_ipamona
以下のURLから「古いバージョンのダウンロード ⇒Bve trainsim 5.7 (インストーラーなし)」と「京成千葉線シナリオデータ」を ダウンロードする。
ダウンロードしたら、それぞれのZIPファイルを解凍して、適切なディレクトリに 配置する。
$ ln -s /dev/ttyUSB0 com0
# usermod -a -G dialout <ログインユーザー>
追加したら、そのユーザーでログインし直す。
以下URLから路線データ、車両データのダウンロードページを取得する。
| ダウンロード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 ディレクトリ配下のファイル、ディレクトリをシナリオ ディレクトリの下に移動する。 |
| シナリオ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 配下のディレクトリをシナリオディレクトリの下に移動する |
BVE の実行環境をUSBから起動するための Live USB 作成手順を以下に示す。 なお、Live USB の作成手順の詳細は、 livecd-tools を参照すること。
/usr/share/spin-kickstarts ディレクトリから以下のファイルを作業 ディレクトリにコピーする。
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
以下のコマンドを実行して、ISO イメージファイル(Fedora-Live-Bvets.iso) 作成する。
# livecd-creator --verbose --config=fedora-live-bvets.ks \ --fslabel=Fedora-Live-Bvets
以下のように、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 の使い方」を参照 すること。
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 パッケージは、認証局の証明書のインストールを行うための update-ca-trust コマンドを提供するパッケージである。このパッケージは OSインストール時にインストールされている。
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パッケージは以下の場所に存在している。
ドライバーのrpmファイルが配置されているディレクトリに移動して、以下の コマンドを実行する。
# dnf install cnijfilter2-5.00-1.x86_64.rpm
以下のコマンドを実行して、CUPSデーモンを再起動する。
# systemctl restart cups.service
プリンタ本体のメニューでプリンターの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
以下のコマンドを指定して、登録名「MG7530LAN」のプリンターをデフォルト プリンターに設定する。
# /usr/sbin/lpadmin -d MG7530LAN
システムインストール時は、cupsサービスがdisableになっているので、root権限の ユーザで「systemctl staus cups」コマンドを実行し、statusがdisableとなって いる場合は「systemctl enable cups」コマンドを実行してcupsサービスを有効に すること。
# dnf install cdparanoia
「man cdparanoia」でマニュアルを表示すると、最後の方にコマンドの例が 示されている。
$ cdparanoia -B
$ cdparanoia "<開始トラック番号>-<終了トラック番号>"
$ cdparanoia "<開始トラック番号>-"
CentOS Stream は、Read Hat Enterprise Linux のアップストリーム ディストリビューションで、Fedora をベースにしている。詳細は Red Hat Enterprise Linux Compatibleを参照のこと。
https://www.centos.org/centos-stream/#download から「x86_64」の リンクをクリックして、インストールイメージを取得する。
epel-release パッケージをインストールして EPEL リポジトリを有効にした後、 Fedora Server Core Installation に準じてパッケージをインストールする。
インストールできないパッケージ
追加してインストールするパッケージ
CentOS 8は、当初 RedHat Enterprise Linuxと同じ 2029年12月までサポートされる 予定であったが、サポート期限が 2021年12月までに変更された。CentOSのホーム ページでは、CentOS Stream に移行するようにアナウンスされている。
CentOS 8 Stream への移行を決定する前に、以下のことについて検討すること。
CentOS 8 Stream へ移行する場合は、以下のコマンドを実行する。
# dnf swap centos-linux-repos centos-stream-repos # dnf distro-sync
Rocky Linuxを参照のこと。
# dnf upgrade -y
https://github.com/rocky-linux/rocky-tools にアクセスして「Code」 の右側矢印をクリック
⇒ 「Download ZIP」をクリック
⇒ rocky-tools-main.zip をダウンロード
⇒ zip を解凍して migrate2rocky.sh を取得
migrate2rocky.sh を配置したディレクトリに移動して、シェルスクリプト ファイルに実行権限を付与してシェルスクリプトを実行する。
# chmod +x migrate2rocky.sh # ./migrate2rocky.sh -r
「*-devel」パッケージをインストールできるようにするために、以下のコマンドを 実行して、「PowerTools」リポジトリを有効にする。
# dnf config-manager --set-enabled PowerTools
上記の方法でうまくいかない場合は、以下の方法でリポジトリの設定ファイルを 直接編集する。
/etc/yum.repos.d/CentOS-Linux-PowerTools.repo
enabled=1
# dnf install cheese
# dnf install chrony
| 用語 | 説明 |
|---|---|
| システムクロック | Linuxカーネルが保持しているクロック |
| ローカルクロック | NTPサーバー/クライアントが推定する正しい時刻。 NTPクライアントが接続されると、ローカルクロックの時刻を クライアントに報告する。 |
| ローカル リファレンスモード | NTPサーバーから取得した時刻を基にローカルクロックを設定 するのではなく、chronyc コマンドによりマニュアルで ローカルクロックを設定するモードのこと。 |
Chronyの既定の方式で、システムクロックの時刻調整を、システムクロックを わずかに早めたり遅らせたりしながら徐々にシステムクロックの時刻をローカル クロックの時刻に合わせる
システムクロックの時刻をすぐにローカルクロックの時刻に合わせる
NTPサーバーより定期的に時刻を受け取り、線形補間により正しい時刻を推定する。 複数のNTPサーバーに接続している場合は、重みを付けて推定値を計算する。
自身はNTPサーバーに接続することなく、ローカルクロックを手動で管理して運用 する。インターネットから閉じた環境での最上位サーバーとして運用することを 想定している。マスターサーバーとして運用する場合は、/etc/chrony.conf に local ディレクティブを設定すること。
自身はNTPクライアントとして他のNTPサーバーの時刻と同期しながら、接続された NTPクライアントにNTPサーバーとしてローカルクロックの時刻を知らせる。
NTPサーバーに接続し、そこから返された時刻で自身のホストの時刻を同期する。
/etc/chrony.conf を以下のように設定する。
pool <poolホスト名> iburst
または
server <NTPサーバ名> iburst ... ※複数のserverを指定可能
poolホスト名 にプールサーバー(使用可能なNTPサーバーのIPアドレスを取得 するためのサーバー)のホスト名を指定する。
NTPサーバ名 にNTPサーバのホスト名またはIPアドレスを指定する。複数の サーバーを指定して冗長構成とすることも可能である。
このオプションを指定すると、システム起動時(chronydデーモン起動時)に素早く NTPサーバと時刻同期をする。
driftfile /var/lib/chrony/drift
システム・クロックを補正するための統計情報を /var/lib/chrony/drift(既定値) に記録する。chrony デーモンが再起動すると、再起動前の統計情報をここから取得 して、統計情報を更新することが可能になる。ファイルが存在しない場合は、空の ファイルをオーナー/グループ「chrony:chrony」で作成しておくこと。
記録される統計情報は以下のとおり。
推定残差周波数。システムクロックが1秒経過する間に、ローカルクロックと 比較してどれだけ時刻が進んだ/遅れたかを100万分の1秒(マイクロ秒)単位で 表示する
推定誤差範囲。システムクロックとローカルクロックとの周波数の推定誤差の 範囲(1秒当たりのシステムクロックの進み/遅れ)をppm(100万分の1、 10の-6乗)の単位で表示する。
makestep <seconds> <limit-times>
chrony デーモン起動後に、システムクロックとローカルクロックと差が seconds 秒(小数点の指定が可能)を越えている場合、chrony デーモン起動後、最初の limit-times 回までの時刻同期のについては、step モードでシステムクロックを 時刻同期する。
この設定がない場合は、chrony デーモンは、slew モードで時刻同期を行うため、 システムクロックの時間が大幅にずれている場合は、時刻同期に大幅な時間を要する ことになる。システムクロックが大幅にずれている場合は、makestep ディレクティブを指定して素早く時刻を同期することが可能になる。
makestep 1.0 3
ファイアウォールでUDP ポート番号 123 の受信を許可し、/etc/chrony.conf を 以下のように設定する。
インターネットにアクセスできないネットワークで、NTPサーバーのマスターサーバー を設置する場合の /etc/chrony.conf の最小構成の設定は以下のとおり。
local [stratum <ホップ数>]
このサーバーのホップ数が指定されたホップ数以下の場合は、正常処理として ローカルクロックの時刻をそのままNTPクライアントに返す。これは、この サーバーが直接的/間接的に他のNTPサーバーに接続された場合でもローカル リファレンスモードとして動作させるための設定である。
なお、ホップ数は最上位のサーバーを1として、その下に接続するNTPサーバーの 階層が増す度に1つずつ増える。
manual
「chronyc settime yyyy-mm-dd hh:mm:ss」コマンドでローカルクロックを手動で 設定して、システムクロックの時刻同期を可能にする。
allow <network-addr>/<mask>
このNTPサーバーに接続を許可するNTPサーバー/クライアントのネットワーク アドレスを指定する。ネットワークのマスクは上位ビット数かサブネットマスクで 指定可能である。allow ディレクティブには、ネットワークアドレスの他に以下の ものも設定可能である。
「NTPクライアントの最小設定」に allow ディレクティブでこのNTPサーバーに接続 する NTPクライアントのネットワークアドレスを追加すれば、中継サーバーの最小 構成となる。
ここでは、孤立したネットワークでマスターサーバーとして運用(他のNTPサーバーと 時刻の同期をせずにマスターのNTPサーバーとして他のNTPサーバー/クライアントに 時刻を提供する)場合についての設定例 (17.4. 異なる環境での chrony の設定 - Red Hat Customer Portal) の詳細を説明する。
下記の設定は、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>
設定するディレクティブの説明は以下のとおり。
ホスト名「server2」のNTPサーバーに keyfile /etc/chrony.keys の ID 2 に 設定されたキーを使用して接続する。server ディレクティブには、自身以外の マスターサーバー(server2、server3)を指定した設定をすること。
システクロックとローカルクロックとの時間のずれの測定情報を保存するファイル のパスを設定する。
NTPサーバー接続時に認証に使用するキーのIDとのペアを格納するファイルの パスを指定する。この設定を行うと、他のNTPサーバー/クライアントがこの サーバーに接続する際に、IDとキーのペアによる認証が必要になる。keyfileには このサーバーに接続するNTPサーバー/クライアントの認証に使用するIDとキーの ペア、及びこのサーバーが他のNTPサーバーに接続する際に認証に使用するIDと キーのペアを設定する。
10 tulip 11 hyacinth 20 MD5 ASCII:crocus 25 SHA1 HEX:933F62BE1D604E68A81B557F18CFA200483F5B70 30 AES128 HEX:7EA62AE64D190114D46D5A082F948EC1
システム起動時に、自身以外のNTPサーバー(server2、server3)から正しい ローカルクロックを推定し、システムクロックの時刻との差が 10 秒以内であれば slew モードで時刻同期を行う。システムクロックの誤差が 10 秒を越えた 場合は、step モード ですぐにシステムクロックの時刻をローカルクロックの時刻 に同期する。何れの場合でもchrony デーモンの時刻の同期が終わってから、 起動時のブートシーケンスが実行されるので、時刻同期が行われる前にブート シーケンスの中でプログラムが時刻を参照することを防ぐことが可能になる。
local ディレクティブのオプションの説明は以下のとおり。
このサーバーのホップ数が8以下の場合は、ローカルリファレンスモードで 動作しする。万が一自身または直接/間接的に外部のNTPサーバーに接続 されても、確実にマスターサーバーとして機能させたい場合は、stratum オプションに大きなホップ数を指定すること。
複数のローカルリファレンスモードのNTPサーバーをOrphan モードで動かす。 serverディレクティブで複数のNTPサーバーを相互に接続すると、以下の ロジックで1台がマスターサーバー、それ以外はマスターサーバーに接続する NTPクライアントとして動作する。
chronyc (chronyデーモンのクライアント)から settime コマンドでシステム時刻を 手動で設定できるようにする。この設定がないと、chronyc で settime コマンドを 実行するとエラーになる。
このNTPサーバーに接続可能なNTPクライアントのIPアドレス、またはネットワーク アドレスを指定する。
この例では、自身以外のマスターサーバー server2、server3 のIPアドレスと、 接続を許可するNTPクライアントのネットワークアドレスを指定している。
上記の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
サーバー名「server1」のNTPサーバーに速やかに接続し、keyfile の ID 90 で 設定された認証キーで認証する。Orpah モードで構成される他のサーバー (server2、server3)についても同様に server ディレクティブをする。
「マスターサーバーの設定」と同じ
chrony デーモン起動時にシステムクロックの誤差が20秒を越えていた場合は、 マスターサーバー(server1、server2、server3)から取得した時刻で step モードで時刻同期する。
このサーバーに接続可能なNTPクライアントのネットワークアドレスを設定する。
ログファイルを /var/log/chrony ディレクトリに配置する。
measurements(NTPの測定結果)、statistics(回帰処理の統計場法)、 tracking(システム時刻の遅れ・進みの予測情報)の3種類のログファイルを 出力する。
このコマンドは、接続先の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サーバーの時刻と ローカルクロックの時刻との差である。時間の単位は以下のとおり。
[]の左側はローカルクロックの推定時刻計算のために適用された値、[]の中の 値は実際に計測された値を示す。
これ以外の項目については、参考資料の「chronyc(1) Manual Page」を参照のこと。
このコマンドは、接続先の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
接続先NTPサーバーとの時刻受信間隔
接続先NTPサーバーと自身のサーバーとの推定残差周波数(ppm、マイクロ秒単位) を表示する。推定残差周波数については、「NTPクライアントの最小設定」の driftfile ディレクティブの「Frequency」項目を参照のこと。
接続先NTPサーバーと自身のサーバーとの推定誤差範囲(ppm、マイクロ秒単位) を表示する。推定誤差範囲については、「NTPクライアントの最小設定」の driftfile ディレクティブの「Skew」項目を参照のこと。
接続先NTPサーバーと自身のサーバーのシステムクロックとの時刻の進み/遅れ
これ以外の項目については、参考資料の「chronyc(1) Manual Page」を参照のこと。
このコマンドは、システムクロックの性能情報を出力する。コマンドの出力例は 以下のとおり。
$ 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
現在このサーバーが接続しているNTPサーバー(参照サーバー)
最上位サーバーを1としたこのサーバーのホップ数
最後に参照サーバーからの時刻を基にこのサーバーの時刻の誤差を測定した時刻
システムクロックとローカルクロックとの時刻の差
最後にシステムクロックを修正した時点の参照サーバーとローカルクロックの 時刻との差
推定残差周波数。この値が driftfile に記録される。
現在選択されている参照サーバーの推定残差周波数(参照サーバーの時刻に対する このサーバーのシステムクロックの進み/遅れ具合)
推定誤差範囲。この値が driftfile に記録される。
これ以外の項目については、参考資料の「chronyc(1) Manual Page」を参照のこと。
/etc/chronyd.conf ファイルに「manual」が設定されている場合は、このコマンドで NTPサーバーに settime の引数で指定した時刻を設定することができる。
ClamAV(Clam AntiVirus)はOpen Sourceのウィルススキャナーである。ClamAVは複数の パッケージに分けて機能を提供している
ウィスルスキャンのコマンドや、clamd (ClamAV Daemon)のフロントエンドの機能を 提供する。
ウィルス定義を更新するコマンドを提供する。
clamd(ClamAV Daomon)を提供する。clamav-scanner自体は、clamdが使用する設定 ファイルを提供するパッケージで、clamd自体はこの依存パッケージである 「clamsv-server」が提供する。
clamavパッケージが提供する主なコマンドは、以下のとおり。
ファイルやディレクトリを指定して、ファイルをスキャンする。
clamd (clamAVのデーモン)のフロントエンドで、clamdにファイルのスキャンの 実行を指示する。
clamdをモニタリング(clamdscanによるスキャンの状況など)する。
以下のコマンドを実行して、clamavパッケージをインストールする。
# dnf install clamav
ディレクトリを再帰的にアクセスしてファイルのウィルススキャンを実行し、 感染ファイルが見つかったら退避先ディレクトリに移動するためのコマンドは 以下のとおり。
# clamscan -i --exclude=<スキャン除外dir> --move=<隔離先dir> -r <スキャン対象dir>
clamdscan は clamav パッケージで提供されるが、実行するためには clamd が実行 できるようになっている必要がある。clamdのインストールと設定手順は、 「ClamAV - clamd」を参照すること。
ディレクトリを再帰的に検索して、感染ファイルが見つかったら退避先 ディレクトリに移動するためのコマンドは以下のとおり。
# clamdscan [--config-file=<設定ファイルのパス>] [--log=<ログファイルのパス>] \ [--move=<隔離先dir>] [--fdpass [--multiscan]] <スキャン対象dir>
パラメータについて
設定ファイルのパスを指定する。省略すると /etc/clamd.conf (/etc/clamd.d/scan.conf へのリンク) から設定を読み込む。
ログファイルのパスを指定する。
このパラメータを指定すると、感染ファイルを指定したディレクトリに移動する。
スキャン対象のファイルのアクセス権をclamdに渡す。clamonacc と clamd が 異なるユーザーで実行されている場合、clamd が clamonacc と同じアクセス権 でスキャン対象のファイルにアクセスすることが可能になる。
--fdpass と一緒に指定可能なオプション。ディレクトリの内容を利用可能な スレッドを使用して並行してスキャンする。
コマンドからは検索除外ディレクトリは指定できない。除外ディレクトリは /etc/clamd.conf (のリンク先である /etc/clamd.d/scan.conf)に設定すること
/etc/logrotate.d/clamav ファイルに以下の内容を記述して、ログファイルの ローテーションを行い、ログファイルの肥大化を防ぐ。
var/log/clamdscan.log /var/log/clamonacc.log {
rotate 10
size 1M
missingok
nocompress
}ClamAV v0.102.0 より、On-Access Scanningは clamd デーモンではなく、clamonacc コマンド(clamdのクライアント)から実行することになった。
# clamonacc [--config-file=<設定ファイルのパス>] [--log=<ログファイルのパス>] \ [--move=<隔離先dir>] [--fdpass [--multiscan]]
パラメータの意味は、clamdscan コマンドと同様である。
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]]
clamonacc コマンドに「--log」オプションを追加する。また、clamd が local socket で待ち受けする場合は、--fdpass オプションを指定する。
次に、以下のコマンドを実行して、clamdサービスを自動起動するように設定する。
# systemctl enable clamonacc
ClamAV - clamd の「scan.conf ファイルの編集」を参照のこと。
「clamdscan」を参照のこと。
以下のコマンドを実行すると、画面にclamdの状況が表示される。
# clamdtop [<ホスト名> ...]
待ち受けるポート番号を指定する。規定のポート番号 3310 を設定する。
待ち受ける IPアドレスを指定する。ネットワークカードに設定された IPアドレスを設定する。繰り返して複数の IPアドレスの指定が可能。
ACアダプターが接続されている状態でシステムが起動し、5分後に以下の何れかの条件
に当てはまる場合にウィルスのスキャンを実行ための crontab の設定を以下に示す。
システム起動後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
以下のスクリプト(改行せずにcrontbに設定すること)は、次のことをおこなって いる。
@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「upower -e」の出力結果の中で、ACアダプターを示す文字列 (例:/org/freedesktop/UPower/devices/line_power_AC)のことである。
上記に示した clamscan、clamdscan コマンドが実行する内容は以下のとおり。
upwer コマンドを実行するためには、upower パッケージが必要なので、以下の コマンドによりパッケージをインストールしておくこと。
# dnf install upower
以下のコマンドを実行して、clamav-updateパッケージをインストールする。
# dnf install clamav-update
/etc/freshclam.conf ファイルをテキスト・エディタで開き、以下のように 編集する。
# Comment or remove the line below. Example
の「Example」の前に「#」を付けてコメントアウトする。
# Path to the log file (make sure it has proper permissions) # Default: disabled #UpdateLogFile /var/log/freshclam.log
の「#UpdateLogFile」の先頭文字「#」を削除する。
# 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」の先頭文字「#」を削除する。
以下の部分のコメントを外して、proxy serverのホスト名、ポート番号、 必要であれば認証のためのユーザ名とパスワードを設定する。
#HTTPProxyServer https://proxy.example.com #HTTPProxyPort 1234 #HTTPProxyUsername myusername #HTTPProxyPassword mypass
コメントにあるとおり、サーバー名の指定は、scheme://server-nameの 形式で行うこと。サーバー名のみを指定した場合は、「http://server-name」 (HTTP Proxy)を指定したことになる。
※最近のバージョンでは、初期設定としてのログファイルの作成は不要 ※むしろログファイル(freshclam.log)を事前に作成して clamav-freshclam サービスを起動すると、ログファイルのアクセス権違反のエラーが発生する
以下のコマンドを実行して、ログファイルを作成してファイルのアクセス権を 設定する。
# touch /var/log/freshclam.log # chmod 640 /var/log/freshclam.log # chown clamupdate:clamupdate /var/log/freshclam.log
以前のバージョンはパッケージに Unit ファイルが含まれていなかったが、 最近のバージョンでは、/usr/lib/systemd/system/clamav-freshclam.service ファイルがインストールされるようになった。
以下のコマンドを実行して、clamav-freshclam サービスを有効にする。
# systemctl enable clamav-freshclam
Wi-Fiに接続された状態でシステムを起動する場合は、Wi-Fi接続の設定で 「全てのユーザがこのネットワークに接続可能とする」を有効にすること。
ClamAV の CVD/CID データベースは、同一パブリックIPアドレスからのアクセスが 大量に発生するとアクセスを制限する。これを回避するためには、CVD/CID データベースのミラーサーバーを立てて、freshclam のクライアントは、この ミラーサーバーにアクセスするようにする。
# ln -sf /var/lib/clamav /var/www/html/clamav
/etc/freshclam.conf ファイルに以下の設定をする。
CompressLocalDatabase yes
以下のコマンドを実行して、httpd の受信ポートを許可する。
# firewall-cmd --permanent --add-port <server-port>/tcp # firewall-cmd --reload
/etc/freshclam.conf ファイルに以下の設定をする。
PrivateMirror http://<mirror-host>:<host-port>/clamav ScriptedUpdates no
サービスから freshclam を実行すると、SELinux の権限エラーが発生するので、 以下のローカルポリシーを作成して適用する。
[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;以下のコマンドを実行して、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
clamd (Clam AntiVirus Daemon) は、local socket、またはTCPポートを待ち受けて、 ディレクトリまたはファイルのスキャンを実行するデーモンである。デーモンの フロントエンドは、以下のものがある。
clamscanと同様にディレクトリやファイルのスキャンの実行、感染ファイルの 削除や移動を実行する。clamscanと同等の機能だが、スキャンの対象/除外の 設定は、/etc/clamd.conf で行う。ローカルのclamdのみアクセス可能。
ローカル、またはリモートのclmadに接続して、clamdの状況をモニターする。 複数のclamdに接続可能。
v0.102.0 から導入されたもので、以前は clamd デーモンで実行していた On-Access Scanning を実行するフロントエンドである。
telentコマンドで接続した後、「SCAN <ファイル/ディレクトリ>」、 「SHUTDOWN」 などのコマンドを入力して clamd のコマンドを直接実行する。 clamd のコマンドは、「man clamd」を参照のこと。
以下のコマンドを実行して、clamdパッケージをインストールする。
# dnf install clamd
/etc/clamd.d/scan.conf ファイルを以下のように設定する(OnAccessPreventを 有効にした設定)。ExcludePath 及び OnAccessExcludePath で除外するファイル・ ディレクトリは以下の基準で決める。
/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オプションで 指定したユーザ名を設定すること |
LocalSocket を使用すると、clamdscan、clamonacc コマンドは、ファイル ディスクリプタまたはストリームをソケットに渡し、clamd がスキャン対象の ファイルを読み込む。使用にあたっては、「LocalSocket 使用時の注意点」の 説明を参照のこと。
TCPSocket を使用すると、clamdscan、clamonacc コマンドは、ファイルの 内容(ストリーム)を TCP ポートに送信する。
clamd にファイルをストームで渡す場合は、LocakSocketのアクセス権や、 スキャン対象のファイルのアクセス権に関係なくファイルをスキャンする ことができる。しかし、clamdscan、clamonacc コマンド側でファイルの ストリームを生成するコストがかかるため、TCPSocket にファイル ディスクリプタを渡す場合に較べて処理時間が増大する傾向がある。
# chown clamscan:clamscan /var/log/clamd.scan
以下のコマンドを実行して、SELinuxのbool値を設定する。
# setsebool -P antivirus_can_scan_system 1
※最近は以下のローカル・ポリシーの設定は不要になった
以下の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
clamscan が設定を共有できるように、以下のコマンドを実行して、/etc/clamd.conf へのリンクを /etc/clamd.d/scan.conf に作成する。既に /etc/clamd.conf ファイルが存在する場合は、削除してからリンクを貼ること。
# cd /etc # ln -s clamd.d/scan.conf clamd.conf
freshclamがウィルス定義を更新したら clamd に通知するできるように、 NotifyClamd に clamd の設定ファイル「/etc/clamd.d/scan.conf」を設定する。
NotifyClamd /etc/clamd.d/scan.conf
clamonacc を実行すろと、このプロセスが常時CPUを100%近く使用し続ける。 clamonacc の Unitファイル(clamav-clamonacc.service)にプロセスが使用する CPU 使用量の上限を以下のように設定して、プロセスの CPU 使用率を下げる ことが可能である。
[/etc/systemd/system/clamav-clamonacc.service.d/override.conf]
[Service] CPUQuota=50%
clamd は、1GB以上のメモリを使用し、メモリの圧迫要因となる。clamd の Unitファイル(clamd@.service)にプロセスが使用するメモリの上限を以下の ように設定して、プロセスが使用するメモリを減らすことが可能である。
[/etc/systemd/system/clamd@.service.d/override.conf]
[Service] MemoryLimit=256M
clamdscan コマンドを使用する場合は、ウィルス検出ファイルの隔離先 ディレクトリのアクセス権のオーナーを「clamscan」、グループを「virusgroup」 に設定すする。退避先ディレクトリが /var/spool/quarantine の場合は、以下の コマンドを実行する。
# chown -R clamscan:virusgroup /var/spool/quarantine/
以下のコマンドを実行して、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」 が出力されていることを確認する。
VirusEvent で sudo コマンドから notify-send を実行するための設定手順は以下の とおりである。
「/etc/sudoers.d」ディレクトリの下に「clamscan」ファイルを作成して、以下の 内容を設定し、「su /usr/bin/notify-send」コマンドをパスワードなしで実行 できるようにする。
[/etc/sudoers.d/clamscan]
clamscan ALL = (ALL) NOPASSWD: SETENV: /usr/bin/notify-send
以下のシェルスクリプトを作成して実行権限を付与する。
[/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[/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 でコマンドを実行しないようにしている。
「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;以下のコマンドを実行して、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 を 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 ...
現在のところ、エラーの原因は不明である。
以下の手順を実施して、clamd を サービスから起動するのではなく、cron から起動することにより、sudo コマンドの PAM エラーを回避して notify-send コマンドによるウィルス検知の通知が可能になる。
以下のコマンドを実行して、clamd@scan サービスを無効化する。
# systemctl disable clamd@scan.service
「crontab -e」コマンドで以下の設定を追加して、システム起動時に cron から clamd を起動するようにする。
@reboot /usr/sbin/clamd -c /etc/clamd.d/scan.conf
clamscan ユーザーのユーザーID、グループIDを確認して記録する。
$ grep clamscan /etc/passwd /etc/group
以下のコマンドを実行して clamd サービスを停止した後に、clamscan ユーザー 及び clamscan グループを削除する。
# systemctl stop clamd@scan.service # userdel clamscan
GIDに「現在のユーザー設定の確認」で確認したグループIDを指定して、以下の コマンドを実行して、clamscan グループを作成する。
# groupadd -g <GID> 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
inodeの上限値に達した可能性が高いので、以下の手順を実行する。
ClamAVのGUIフロントエンド
以下のコマンドを実行して、clamtkパッケージをインストールする。ClamAVが インストールされていない場合は、clamav、clamav-update等のパッケージも インストールされる。
# dnf install clamtk
「clamtk」コマンドを実行してclamtkを起動し、設定アイコンをダブルクリックして clamtkの設定をする。下記の項目にチェックを入れると良い。
「ファイルをスキャン」、または「フォルダーをスキャン」のアイコンをダブル クリックして、チェック対象のファイル、またはフォルダーを指定してスキャンを 実行する。
# dnf install cronie
以下の書式でコマンドを実行する日時とコマンドを1行で指定する。設定は、 「crontab -e」コマンドを呼び出して行う。
<munite> <hour> <day> <month> <week> <command>
日時(minuteからweekまで)の指定には以下の指定の仕方がある。
<macro> <command>
# dnf install dconf-editor gnome-settings-daemon
dconf エディターの起動は、以下のコマンドにより行う。
$ dconf-editor
# 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'以下のコマンドを実行する。
# dbus-run-session gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0
以下のコマンドを実行する。
# dbus-run-session gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'
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> ...]
引数の説明
ブロックデバイスのサイズは読みやすいように M/G などの単位で表示されるが、 このオプションを指定するとバイト数そのものでサイズを表示する。
ファイルシステムの情報(ファイルシステムの種類、マウントポイント、UUIDなど) を表示する。これは、「-o NAME,FSTYPE,LABEL,UUID,FSAVAIL,FSUSE%,MOUNTPOINT」 を指定することと同じである。
ブロックデバイスを作成したデバイス(物理パーティション/Logical Volume)を 指定すると、そのデバイスの情報を表示する。
dosfstools, fatresize
# mkdosfs -F 32 -n <volume-label> /dev/<device-name>
引数の説明
# dosfslabel /dev/<device-name> <volume-label>
ファイルシステムを作成したデバイス(物理パーティション/Logical Volume)を 指定して、以下のコマンドを実行する。
# fatresize -s <size>[k|M|G|ki|Mi|Gi|max] /dev/<device-name>
引数の説明
バイト数の指定には、以下の単位を指定可能。iがつかない単位は10の累乗、 iがつく単位は2の累乗のサイズである(例:1k=10^3 byte、1ki=2^10 byte)。
「-s max」を指定すると、ファイルシステムを作成したデバイス (物理パーティション/Logical Volume)の領域全体にサイズを拡張する。
ntfsprogs
# mkntfs [-f] -L <volume-label> /dev/<device-name>
引数の説明
# ntfslabel /dev/<device-name> <volume-label>
# ntfsresize -i /dev/<device-name>
# 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>
e2fsprogs
ファイルシステムを作成したデバイスを指定して、以下のコマンドを実行する。
# 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 ...
# mke2fs -t {ext2|ext3|ext4} -L <volume-label> /dev/<device-name># e2label /dev/<device-name> <volume-label>
ファイルシステムを作成したデバイス(物理パーティション/Logical Volume)を 指定して、以下のコマンドを実行する。
# resize2fs /dev/<device-name> <size>[K|M|G]
ext4 ファイシステムは、e4defrag コマンドの実行によりファイルの断片化を 解消することができる。
# e4defrag -c {<file-path>|<dir-path>|/dev/<device-name>}# e4defrag {<file-path>|<dir-path>|/dev/<device-name>}xfsprogs
# mkfs -t xfs -L <volume-label> /dev/<device-name>
引数の説明
# xfs_admin -L <volume-label>
xfs ファイルシステムは、ファイルシステムのサイズを縮小できない。
以下のコマンドを実行すると、ファイルシステムを作成したデバイス (物理パーティション/Logical Volume)、またはマウントポイントを指定して、 ファイルシステムを作成したデバイスの容量までファイルシステムのサイズを拡張 する。
# xfs_growfs {/dev/<device-name>|<mount-point>}# xfs_fsr {<file-path|/dev/<device-name>} ...ファイル(ディレクトリではない)、またはファイルシステムを作成した デバイス(物理パーティション/Logical Volume)を指定してデフラグを実行する。
btrfs-progs
# mkfs -t btrfs -L <volume-label> /dev/<device-name>
引数の説明
btrfs の filesystem コマンドの label サブシステムコマンドを実行して Volume Label を変更する。
# btrfs filesystem label {/dev/<device-name>|<mount-point>} <volume-label>引数の説明
ファイルシステムのサイズの拡大/縮小は、btrfs の filesystem コマンドの resize サブコマンドでファイルシステムのサイズとマウントポイントを指定する。 コマンドの書式は以下のとおり。
# btrfs filesystem resize {[+|-]<size>[k|K|m|M|g|G|t|T] | max} <mount-point>サイズ変更の対象となるファイルシステムは、デバイスをするのではなく、 ファイルシステムをマウントしたマウントポイントを指定する。
birtfs の filesystem コマンドの defragment サブコマンドに ファイル、または ディレクトリ(複数指定可能)を指定してデフラグを実行する。
# birtfs filesystem defragment {<file-path>|<dir-path>} ...parted
# 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)
パーティションのリサイズとは、パーティションの終了位置を変更することである。 対話モードで 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以下のコマンドを実行して、パッケージをインストールする。
# dnf install thunar-volman gvfs
更新されたパッケージのインストールは、以下のコマンドを実行する。
# dnf upgrade [<パッケージ名> ...]
また、更新を除外するパッケージを指定する場合は、「-x <パッケージ名>」を 指定する。例えば、「kernel」で始まるパッケージの更新を除外する場合は、 「dnf -x 'kernel*' upgrade」を実行する。
<パッケージ名>は、以下の形式で指定が可能である。
「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
少なくともfc25では、dnfコマンドに「--security」オプションが存在しなかった ため、以下のようなコマンドを実行していた。
dnf -y upgrade `dnf -q updateinfo list updates security | \
sed -e 's/^.* //g' -e 's/\-[0-9].*$//g' | uniq` _DUMMY_# dnf history [<spec>...]
<spec>は、パッケージ名での設定(例:kernelで始まるパッケージの更新履歴は 「'kernel*'」を指定)、またはトランザクションIDの指定をする。 トランザクションIDの指定は、「<from_ID>...<to_ID>」の指定ができる。
# dnf history info [<spec>...]
# dnf history rollbaxck <spec>
<spec>には、トランザクション、またはパッケージ名を指定する。
指定したトランザクション番号より「後の」更新を取り消す。つまり、指定された トランザクション番号より後にインストール、更新されたパッケージを アンインストール若しくは前のバージョンに戻す。
該当するパッケージの変更が最後に適用されたトランザクションの トランザクション番号を指定した動きになる。
過去のバージョンを含め、RPMパッケージ、SRPMパッケージ、インストールISO イメージなどが確認できる。
EPELリポジトリの内容が確認できる。
/etc/dnf/vars/releasever ファイルにOSのバージョン(例:Fedora39の場合は 「39」)を設定する。
ディストリビューションによっては、releasever ファイルの設定だけでは、 OSバージョンの固定ができない場合がある。これは、リポジトリのミラー一覧を 取得したときに最新のバージョンしか取得できない場合に発生する。その場合は /etc/yum.repos.d ディレクトリ配下の「.repo」ファイルを以下のように編集 して対応する。
/etc/dnf/dnf.conf ファイルに 「excludepkgs=パッケージ名[,パッケージ名,...]」の形式で除外する パッケージの名前を設定する。パッケージ名は「*」の指定が可能である。
カーネル関連のパッケージの更新を抑止し、Red Hat Enterprise Linux 互換OSの マイナーバージョンのアップグレードを抑止したい場合は、/etc/dnf/dnf.conf ファイルに以下の設定(最後の行)を追加する。
[main] ... excludepkgs=kernel* redhat-release
# dnf install docker
dockerは1つのコマンドを実行するのに必要なファイルやデバイスを1つにまとめた もので、これを「イメージ」(image)と呼ぶ。また、イメージを実行したときの スナップショットを「コンテナ」(container)と呼ぶ。
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デーモンに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"
【説明】
root 権限のないユーザーが docker コマンドを実行すると、/var/run/docker.sock のアクセス権限エラーが発生するので、アクセスを許可するために以下のコマンド を実行して、docker コマンドを実行するユーザーを docker グループに参加 させる。
# usermod -aG docker <user-id>
Dockerfile を配置したディレクトリに移動して、以下のコマンドを実行する。
# docker build -t <image-name> --build-arg <env-name>=<value> ... .
# docker images [-q]
-q オプションを指定すると、イメージID のみを表示する。
# docker rmi {<image-name>|<image-id>}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>
# docker stop <container-name>
# docker start <container-name>
# docker ps [-a] [-q]
# docker rm {<container-name>|<container-id>}# docker save --output=<image-file> <image-name>
# docker load --input=<image-file>
<image-file>は、tar形式のファイルの他、tar.gz、tar.xz 形式のファイルを 指定することが可能である。
# docker export --output=<container-file> <container-name>
# cat <container-file> | docker import - <image-name>
または
# docker import <container-file> <image-name>
<container-file>は、tar形式のファイルの他、tar.gz、tar.xz 形式の ファイルを指定することが可能である。
作成するイメージの内容は、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 centos:7
docker build コマンドの --build-arg パラメータで指定する変数名(と変数の 既定値)を定義する。
「docker build --build-arg PROXY_URL ...」を実行する場合の変数名 「PROXY_URL」は以下のように定義する。
ARG PROXY_URL=http://foo:8080
Dokcerファイルの中で使用する環境変数の名前と値を指定する。環境変数ごとに 別々のコマンドを記述できるが、キャッシュの階層を減らすために1つの コマンドで複数の環境変数を設定することが推奨されている。
ENV HTTP_PROXY=http://foo:8080 HTTPS_PROXY=http://foo.8080
コンテキスト(docker build コマンドで指定したディレクトリ)に配置された src-path のファイルまたはディレクトリ、またはURLで指定したファイルを イメージのdest-pathで指定したファイルまたはディレクトリに追加する。
ADD foo.tar.xz /bar/ ADD http://foo.com/path/to/file /bar
コンテキスト(docker build コマンドで指定したディレクトリ)に配置された src-path のファイルまたはディレクトリをイメージのdest-pathで指定された ファイルまたはディレクトリにコピーする。
COPY http_conf/httpd.conf /etc/httpd/conf/
イメージを作成するためのコマンドを記述する。コマンドごとに別々のRUN コマンドを設定することが可能であるが、キャッシュの階層を減らすために、 コマンドを「&&」で連結して1つのRUNコマンドを設定することが推奨されて いる。
コンテナ実行時にリッスンするポートの番号を指定する。
コンテナ起動時に実行するコマンドを指定する。コンテナ起動時に実行する コマンドは1つだけである。コマンドにシェルスクリプトを指定すれば複数の コマンドを実行することが可能であるが、多用すべきではない。
下記の例では、コンテナ起動時に "/usr/sbin/httpd -k start" を実行する。
CMD ["/usr/sbin/httpd", "-k", "start"]
Dockerfile からイメージを生成するには、以下のように docker build コマンドを 実行する。
context-path で指定されたコンテクストのディレクトリに配置されている Dockerfile を使用してイメージを作成する。
context-path で指定したコンテキストのディレクトリに配置された Dockerfile の名前を指定してイメージを作成する。
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コンテナでcronを動かすためには、Dockerfileで以下の設定を行う。
以下に docker build コマンドの --build-arg パラメータで以下の環境変数が指定 された場合に、上記で述べた設定を実行する Dockerfile の例を示す。
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 -fdoxia-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>
引数の説明
出力がxml形式(xhtmlを含む)の場合、タグにインデントを付けて、読みやすい形で出力 する。
入力ファイルのフォーマットを指定する。指定可能なフォーマットは以下のとおり。
apt, confluence, docbook, fml, twiki, xdoc, xhtml
出力ファイルのフォーマットを指定する。指定可能なフォーマットは以下のとおり。
apt, docbook, fo, itext, latex, rtf, xdoc, xhtml
$ java -jar <jar-file-dir>/doxia-converter-1.2-jar-with-dependencies.jar \ -in <input-file> -from apt -out . -to xhtml
上記のコマンドを実行すると、カレント・ディレクトリの下に入力ファイル名の 後ろに「.xhtml」が追加されたファイルが作成され、そこに変換結果が保存される。
nkfパッケージがインストールされていない場合は、以下のコマンドを実行してnkf パッケージをインストールする。
# dnf install nkf
Doxia Converterは、英数字以外の文字はURLエンコーディング(#+4桁の数値)に 変換してしまうので、以下のコマンドを実行してURLエンコーディングを復号する。
$ nkf --numchar-input <変換元ファイルのパス> | tee <変換結果のファイルのパス>
変換されたxhtmlは、以下の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>$ 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)が作成され、 そこに変換結果が保存される。
$ pandoc -f docbook -t markdown -o <file-name>.md <file-name>.apt.docbook
# dnf install dvdbackup cdw
格納ディレクトリのパスを指定して以下のコマンドを実行すると、 格納ディレクトリの下にタイトル名のディレクトリが作成され、その下に DVDの内容が保存される。
$ dvdbackup -M -i /dev/cdrom -o <格納ディレクトリ>
なお、商用のDVD Videoなどはコピーガードがかかっているため、バックアップができない。
dvdbackupコマンドで指定した格納ディレクトリの下のタイトル名までの ディレクトリを指定して、以下のコマンドを実行してISOイメージのファイルを 作成する。
$ mkisofs -dvd-video -udf -o <ISOイメージファイルのパス> \ <格納ディレクトリ>/<タイトル名>
Blu-rayの場合は、-dvd-video オプションの代わりに -allow-limited-size オプションを指定する。
ISOイメージファイルのパスを指定して以下のコマンドを実行して、ISOイメージを DVDのメディアに焼く。
$ growisofs -dvd-compat -Z /dev/cdrom=<ISOイメージファイルのパス>
dvd+rw-formatはDVD-RW、DVD+RWなどのDVDメディアを初期化やファイルをDVDに記録 するためのコマンドを提供するパッケージである。
以下のコマンドを実行して、dvd+rw-toolsをインストールする。
# dnf install dvd+rw-tools
以下のコマンドを実行して、DVD-RWのメディアを初期化する。
$ dvd+rw-format -blank /dev/cdrom
「-blank」の代わりに「-blank=full」を指定すると、「full reformat」をする。
DVD single layer への書込みは、以下のコマンドを使用する。DVD double layer の場合は、「Blu-rayメディアの初期化と書き込み」の項目を参照すること。
$ growisofs -Z /dev/cdrom [-R] [-J] <ファイル/ディレクトリのパス> ...
Joliet and Rock-Ridge extension の DVDメディア(Windowsでメディアを使用 する場合等)に書き込む場合は、「-R -J」オプションも指定する。
$ growisofs -M /dev/cdrom [-R] [-J] <ファイル/ディレクトリのパス> ...
$ growisofs -dvd-compat -Z /dev/cdrom=<ISOイメージのパス>
DVDメディアと同じコマンドを実行する。
$ dvd+rw-format -format=full -ssa=max /dev/cdrom
http://fy.chalmers.se/~appro/linux/DVD+RW/Blu-ray/によると下記の情報あり
DVD書込みの場合と同じコマンドを使用し、「-overburn」オプションを付ける。 -overburn オプションは、4GB以上のデータを書き込むときに必要なオプションで ある。
$ growisofs -overburn -Z /dev/cdrom [-R] [-J] <ファイル/ディレクトリのパス> ...
Joliet and Rock-Ridge extension の DVDメディア(Windowsでメディアを使用 する場合等)に書き込む場合は、「-R -J」オプションも指定する。
-Z オプションの代わりに -M オプションを指定する。
DVDメディアと同じコマンドを実行する。
$ growisofs -dvd-compat -overburn -Z /dev/cdrom=<ISOイメージのパス>
RPM Fusion Repositoryの手順に従ってRPM Fusionのリポジトリに アクセスできるようになっていること。
以下のコマンドを実行して、DVDStyler をインストールする。
# dnf install dvdstyler
初回起動時に「language selection」ファイアログがポップアップするので、 「日本語」を選択する。
「構成」⇒「設定」メニュー から「設定」ダイアログを開く。
mkisofs コマンドを genisoimage コマンドに変更するか、 update-alternatives コマンドを実行して、mkisofs コマンドが /usr/bin/genisoimage を指すようにする。
画面左側のタブから「ファイルブラウザー」を選択して、動画ファイルを選択し、 画面下部の「動画ファイルをファイルブラウザーからここにドラッグします」と 表示されている場所にドラッグする。「このファイルにはPAL形式の映像が含まれて います。このファイルに合わせて、DVDの映像形式も PAL に変更しますか?」と 表示された場合は、「いいえ」ボタンを押すこと。
画面下部のタイトルアイコンを右クリックして、「プロパティ」を選択して タイトルの編集をする。
DVD Stylerは、解像度は縦480ピクセルまでしか指定できないが、動画を目的の解像度で mpeg2video形式で作成しておけば、DVD Stylerの映像プロパティで「コピー」を選択 して、元の動画をそのまま使用することができる。
Shotcutで解像度の高いmpeg2video形式の動画を作成する場合のExportの設定例を 以下に示す。
画面の構成比を16:9に設定してDVDのイメージを生成すると、下記のエラーが 発生する。
spumux: subgen-image.c:900: imgfix: Assertion `useimg' failed.
DVDイメージの生成は、画面の構成比を4:3に設定して行うこと。
BIOSの設定でSecure Bootが有効となっている場合は、hibernateが動作しない。 hibernateを動作させたい場合は、BIOSの設定でSecure Bootを無効にしてからシステムを 起動する。
extundelete は、ext3/ ext4 ファイルシステムで削除したファイルを復元するための コマンドである。
以下のコマンドを実行してパッケージをインストールする。
# dnf install extundelete
指定した時間以降に削除されたファイル/ディレクトリを復元するための コマンドは以下のとおり。
extundelete {--restore-all | --restore-file <file-path>
| --restore-directory <dir-path>} --after <dtime> [-o <dir-path>] <device>オプションの説明
# extundelete --restore-all --after `date +%s -d '-1 hour'` \ /dev/mapper/fedora-home
# 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 がマウントされたものとする。
# mount -o remount,ro /dev/mapper/fedora-home
# extundelete --restore-all --after `date +%s -d '-n minutes'` \ /dev/mapper/fedora-home
ドライバーのマニュアルは、「参考」のURLから表示すること。
セイコーエプソン株式会社のLinuxドライバーダウンロードについて からセイコーエプソン株式会社のLinuxドライバーダウンロードへ をクリックして「ドライバーダウンロード」のページを開き、以下の内容を入力して 検索する。
以下のドライバー(括弧内はファイル名)の「ダウンロード」ボタンをクリック ⇒ 「同意する」ボタンをクリック ⇒ *.x86_64.rpmのドライバーをダウンロードする。
# dnf install ./epson-inkjet-printer-escpr-1.7.8-1lsb3.2.x86_64.rpm
# systemctl restart cups
プリンター名を指定する。
設定する値は、以下の手順で取得する。
$ lpinfo --include-schemes dnssd -v
設定するファイルは、/usr/share/ppd/Epson/epson-inkjet-printer-escpr/ ディレクトリの下から、ファイル名にプリンターのモデル名が含まれている ものを選択する。
このオプションを指定して、プリンターを有効にする。
実行するコマンドは、以下のとおり。
# 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 コマンドより プリンターを追加する手順を採用した。
RPMパッケージをダウンロードしたディレクトリに移動して、以下のコマンドを 実行する。
# dnf install ./epson-printer-utility-1.1.1-1lsb3.2.x86_64.rpm
スキャナードライバーのインストール
$ tar xvfz epsonscan2-bundle-6.6.2.2.x86_64.rpm.tar.gz
# 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
ネットワークスキャナーの追加
以下のいずれかの方法で、「ネットワークスキャナーの追加」ダイアログ ボックスを開く。
プリンター本体のメニューでプリンターに設定されたIPアドレスを確認し、 その値を「ネットワークスキャナーの追加」ダイアログの「アドレス」に 設定して「追加」ボタンをクリックする。
セイコーエプソン株式会社のLinuxドライバーダウンロードについて からセイコーエプソン株式会社のLinuxドライバーダウンロードへ をクリックして「ドライバーダウンロード」のページを開き、以下の内容を入力して 検索する。
以下のドライバー(括弧内はファイル名)の「ダウンロード」ボタンをクリック ⇒ 「同意する」ボタンをクリック ⇒ 「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 |
# 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
# systemctl restart cups
プリンター名を指定する。
設定する値は、以下の手順で取得する。
$ lpinfo --include-schemes dnssd -v
設定するファイルは、/usr/share/ppd/epson-inkjet-printer-escpr2/Epson/ ディレクトリの下から、ファイル名にプリンターのモデル名が含まれている ものを選択する。
このオプションを指定して、プリンターを有効にする。
実行するコマンドは、以下のとおり。
# 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 コマンドより プリンターを追加する手順を採用した。
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
スキャナードライバーのインストール
$ tar xvfz epsonscan2-bundle-6.7.82.0.x86_64.rpm.tar.gz
# ./install.sh
上記のコマンドを実行すると、以下の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
ネットワークスキャナーの追加
以下のいずれかの方法で、「ネットワークスキャナーの追加」ダイアログ ボックスを開く。
プリンター本体のメニューでプリンターに設定されたIPアドレスを確認し、 その値を「ネットワークスキャナーの追加」ダイアログの「アドレス」に 設定して「追加」ボタンをクリックする。
64G SDXCカードをマウントできるようにするために必要なパッケージをインストール する。
RPM Fusion Repositoryの手順に従ってRPM Fusionのリポジトリに アクセスできるようになっていること。
以下のコマンドを実行して、exfatファイルシステムのマウントに必要なパッケージ をインストールする。
# dnf install exfat-utils fuse-exfat
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.
On Fedora 42, the boot-splash (plymouth) now defaults to using the EFI firmware framebuffer to show the boot-splash earlier during boot.
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: =>
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.
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.
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.
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 now receives updates from link:https://quay.io/fedora/fedora-coreos instead of the Fedora OSTree repository.
Fedora now provides WSL (Windows Subsystem for Linux) images. They are available for download on the Getfedora cloud page.
In this Fedora release the ansible package has been upgraded to version 11. There are many changes.
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.
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.
This update improves the way software packages are downloaded and installed on Fedora.
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.
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.
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.
Fedora 42 provides the bpfman package.
Starting in Fedora 42, Fedora Workstation now defaults to to IPv6_rpfilter=loose to allow connectivity checks to function as intended.
Fedora 42 replaces the Cockpit Navigator plugin with Cockpit Files.
Fedora 42 enables virtualization hosts to launch confidential virtual machines using AMD’s SEV-SNP technology.
Fedora now provides a mechanism for automatically loading binaries optimized for newer versions of the x86_64 architecture using glibc-hwcaps.
PostgreSQL version 15 will be retired from Fedora 42 since there are newer versions (16 and 17).
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.
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.
Fedora Linux live environments now use the Enhanced Read-Only FileSystem (EROFS), a modern, feature-rich read-only filesystem.
The pam_ssh_agent_auth package has been removed in Fedora 42 due to being outdated and rarely used.
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.
The default package manager in Fedora 41 is DNF 5.
RPM in Fedora 41 has been updated to version 4.20, which provides a number of improvements.
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.
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.
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.
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.
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.
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.
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.
Starting with Fedora 41, all supported versions of Kubernetes, CRI-O and CRI-Tools will be available concurrently.
TuneD replaced power-profiles-daemon as a default power profile management daemon for the following Fedora workstation spins:
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.
On Atomic Desktops, the policy controlling access to the rpm-ostree daemon has been updated.
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.
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.
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.
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.
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 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 in Fedora 41 no longer trusts SHA-1 signatures by default and blocks their creation as well.
Fedora package builds are now more deterministic, bringing the distribution closer to the goal of achieving fully reproducible builds for all of its packages.
The libvirt virtual network has been changed to prefer use of the nftables firewall backend instead of iptables.
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.
Support for OpenSSL engines is deprecated in Fedora 41.
There is now a bootable image available for Fedora IoT edition.
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.
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 has been deprecated and will be replaced by a new, more efficient tool.
Previously deprecated SSSD "files provider" feature that allows handling of local users has been removed in Fedora 40.
The minimal profile for Authselect is now replaced by local.
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.
The podman container engine has been upgraded to version 5, which provides multiple bug fixes and enhancements.
The ROCm stack for graphics processing unit (GPU) computation has been updated to version 6, which provides multiple bug fixes and enhancements.
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.
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.
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.
The wget command in Fedora 40 uses Wget2.
RFC 5527 is now enabled by default with an interval of 200 ms.
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.
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.
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:
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.
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.
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.
This Fedora update brings support for Raspberry Pi 4, including 4B, the 400 unit, and the Compute Module (CM) 4 IO Board.
Fedora 37 drops support for older ARM devices using the ARMv7 (also known as arm32 or armhfp) architecture.
Fedora Server provides now a virtual disk image to greatly facilitate installation of Fedora Server VMs.
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.
Fedora Cloud Base has been promoted to official status as a Fedora Edition.
Fedora CoreOS has been promoted to official status as a Fedora Edition.
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-*).
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 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 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.
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.
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.
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.
A new fbrnch (Fed Brunch) package provides a utility which helps simplify or semi-automate workflow processes for Fedora Packagers.
Fedora 42から43へアップグレードする手順は以下の通り
# dnf upgrade --refresh
# dnf install dnf-plugin-system-upgrade
# dnf system-upgrade download --refresh --releasever=43
上記のコマンドを実行すると、途中で以下の確認メッセージが表示されるので、 「y」を入力して処理を続ける。
--allowerasing オプションを指定して dnf system-upgrade download コマンドを実行する。--best --allowerasing オプションを付けると 詳細を確認することができる。
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」 コマンドを実行すること。
# dnf5 offline reboot
rpmconf は、パッケージの設定ファイルを変更した場合に、パッケージの アップグレードにより作成される .rpmnew ファイル(アップグレードされたファイル のバックアップ)、.rpmsave ファイル(変更したファイルのバックアップ)を検索する コマンドである。
# dnf install rpmconf
# rpmconf -a
.rpmnew、.rpmsave ファイルが存在する設定ファイルのそれぞれについて、現在の 設定ファイルをそのまま使用するか、.rpmnew または .rpmsave を使用するかを オプション選択画面で対話的に選択する。選択可能なオプションは以下のとおり。
remove-retired-packages は、廃止されたパッケージ(ディストリビューションの リポジトリから削除されたパッケージ)を削除するためのコマンドである。
# dnf install remove-retired-packages
# remove-retired-packages
廃止されたパッケージごとに削除するかどうかを対話的に選択する。
複数のバージョンがインストールされているパッケージは、以下のコマンドを実行 して確認できる。
# dnf repoquery --duplicates
複数バージョンのインストールを解消するためには、上記で表示されたパッケージ から不要なものをバージョン指定で削除するか、以下のコマンドを実行する。
# dnf distro-sync
Fedoraのバージョンアップに伴いディストリビューションのリポジトリから 存在しなくなったパッケージは、以下のコマンドを実行して確認できる。
# dnf list --extras
このコマンドにより、以下のパッケージが表示される。
以下のコマンドを実行すると、カーネル関連のパッケージを除くリポジトリに 存在しないパッケージを削除することができる。
# dnf remove $(dnf repoquery --extras --exclude=kernel,kernel-\*,kmod-\*)
直接インストールしたRPMパッケージを残した上で、未使用のパッケージ、つまり インストールしたどのパッケージからも依存関係にないパッケージを削除する ためには、以下のコマンドを実行する。
# dnf autoremove
# dnf install clean-rpm-gpg-pubkey
# clean-rpm-gpg-pubkey
# dnf install symlinks
指定したディレクトリ(以下の例は /usr ディレクトリ)を再帰的に調べて リンク先のファイル/ディレクトリが存在しないシンボリックリンクの一覧を 以下のコマンドにより確認する。
# symlinks -r /usr | grep dangling
指定したディレクトリ(以下の例は /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
rpm または dnf コマンドの使用中に渓谷が発生した場合は、RPM データベースが 壊れている可能性がある。RPM データベースを再作成するためには、 /usr/lib/sysimage/rpm ディレクトリをバックアップした後に以下のコマンドを実行 する。
# rpm --rebuilddb
system-upgrade dnf プラグインは、内部で「dnf distro-sync」コマンドを実行して いる。RPM パッケージの依存関係に問題が発生した場合は、「dnf distro-sync」 コマンドを実行することでインストールされたパッケージのバージョンを現在の Fedora のバージョンに合わせて、パッケージの依存関係の問題の解消を試すことが できる。
最小構成のGUI Server (LXDE Desktop)をインストールする手順を示す。
既定値(自動パーティション)のままインストールすると、ファイルシステムは xfs となるが、xfs はファイルサイズの縮小ができない。仮想ディスクの容量増減に 伴い、ファイルシステムのサイズも縮小させる場合は、以下の手順を実行する。
# dnf upgrade -y
デスクトップ環境を構成するためにインストールするパッケージについて説明 する。
以下に説明するパッケージの構成では、xrdp 等を使用してリモートデスク トップとしての使用は可能であるが、ローカルでGUIを使用することは できない。ローカルでGUIを使用する場合は、 base-x グループもインストール 対象に加えること。
以下のグループ IDを指定する。
| GUI環境 | グループ ID |
|---|---|
| LXDE | lxde-desktop |
| MATE | mate-desktop |
| Xfce | xfce-desktop |
| Cinnamon | cinnamon-desktop |
| Gnome | gnome-desktop |
| KDE | kde-desktop |
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 |
| その他 | 最小構成パッケージは不明 |
| 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 |
# systemctl set-default graphical.target
なお、GUI起動に変更しない場合(コンソール起動のまま)でも、Remote Desktopで 接続すればGUI表示することができる。
コンソール起動 (Run Level 3) に戻す場合は、以下のコマンドを実行する。
# systemctl set-default multi-user.target
/var/log/messages に下記のエラーメッセージが出力される場合は、 「dnf install dconf-editor」コマンドにより dconf-editor パッケージを インストールする。
kernel: traps: mate-panel[xxxxx] trap int3 ip:xxxxxxxxxxxx sp:xxxxxxxxxxxx error:0 in libglib-2.0.so.0
最小構成のパッケージと、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は、FTP(over SSL/TLSを含む)、SFTP、Storjプロトコルでファイルを 転送するためのGUIクライアントである。
# dnf install filezilla
# dnf install firejail
$ firejail <command> <command-options>
firewall-cmd は、firewalld (Dinamic Firewall Manager daemon)に対して 設定の実行/確認をするためのコマンドである。
firewall-cmd は、iptables と同様に、Linux カーネルの netfilter の設定をする ためのコマンドである。netfilter、firewalld に関する用語は以下のとおり。
パケットのフィルタリング規則のことで、netfilter には、以下の3つが組み 込まれている。
チェーンは netfilter によって実行されるアクションのことで、filter テーブル の場合は、以下のアクションがある。
firewalld の機能。ネットワーク・インターフェース、または CIDR (ネットワーク範囲)に割り当てられたもので、firewalld の設定の単位となるもの である。ゾーンに複数のネットワーク・インターフェースを割り当てることが可能 だが、ネットワーク・インターフェースは1つのゾーンのみ割り当て可能である。
firewalld では、drop、block、public、external、dmz、work、home、internal、 trusted のゾーンが事前に定義されている。
iptables は netfilter 組込テーブル、チェーンの機能を一通り設定することが 可能であるが、firewall-cmd は、filter テーブルの INPUT チェーンに対する設定 に特化した形となっている。ただし iptables と同等の設定を行いたい場合(OUTPUT、 FORWARDチェーンの設定をしたいなど)は、direct オプションを使用することで設定 することが可能である。
永続的な設定(システム起動時に適用される設定)をする。このオプションを 指定した場合は現在の設定には反映されない。現在の設定に反映したい場合は、 --reloadオプションを設定する。
設定の対象となるゾーンの名前を指定する。省略するとデフォルトゾーンが対象と なる。
# 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}送信元アドレス/ポート番号、ポートや、要素(サービス、ポート番号、プロトコル)と 一致した接続に対して、送信先(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}'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
# 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}」を指定すると、最初にマッチしたルールが適用 されるとそこでルールの評価が終了するので、優先度の小さいルールが優先される ことになる。
プロトコル(tcp/udp)と送信元のポート番号(--sportオプション)、送信先のポート 番号(--dportオプション)を指定する。「ポート番号:ポート番号」を指定すると ポート番号範囲の指定となる。
送信元/送信先ののアドレスまたはネットワークアドレスを指定する。<マスク>は 上位ビットすうか、「xxx.xxx.xxx.xxx」のどちらかの形式で指定する。コンマで 区切って複数のアドレスまたはネットワークアドレスを指定可能である。また、 オプションの前に「!」を指定すると、指定されたアドレスまたはネットワーク アドレスと一致しないものが対象となる。
パケットの受信/パケットの送信先のネットワーク・インターフェースを指定 する。このオプションを省略すると、すべてのネットワーク・インターフェース が対象となる。-i は INPUT、FORWARDチェーンの場合に指定可能、-o は OUTPUT、 FORWARDチェーンの場合に指定可能である。
-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
# firewall-cmd --permanent --direct \
--add-rule {ipv4|ipv6} nat POSTROUTING -o <interface-name> -j MASQUERADE# firewall-cmd --permanent --direct --add-rule {ipv4|ipv6} \
nat POSTROUTING -o <interface-name> -j SNAT --to-source <ipaddress># 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」となっている。このコマンドの設定結果は永続的である。
# dnf install flac
以下のコマンドを実行すると、wavファイルをflac形式に変換した結果をそれぞれ input-file1.flac、input-file2.flac に保存する。
$ flac <input-file1>.wav <input-file2>.wav ...
変換元のファイルは、*.wav の他に*.rf64、*.aiff、*.raw、*.oga を指定することが できる。
$ flac --output-prefix=<prefix> <input-file1>.wav <input-file2>.wav ...
このコマンドを実行すると、<prefix><input-file1>.flac、 <prefix><input-file2>.flac が生成される。
$ 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」となっている 場合に、ディレクトリ名とファイル名(拡張子の前)からタグを設定するための ものである。
インストールされているフォントを確認するためのツール。
以下のコマンドを実行して、font-manager パッケージをインストールする。
# dnf install font-manager
アプリケーション⇒アクセサリー⇒Font Manager から起動する。
https://opentype.jp/aoyagireisho.htm より aoyagireisyosimo_ttf_2_01.zip をダウンロードする。
以下のコマンドを実行する。
# 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
https://opentype.jp/kouzanmouhitufont.htm より KouzanMouhituFont.zip をダウンロードする。
以下のコマンドを実行して、フォントファイルの配置とフォントキャッシュの 更新を実行する。
# unar -o /usr/share/fonts/KouzanMouhituFont KouzanMouhituFont.zip # fc-cache -fv
https://moji.or.jp/ipafont/ipaex00401/より https://moji.or.jp/wp-content/ipafont/IPAexfont/IPAexfont00401.zipを ダウンロードする。
以下のコマンドを実行して、フォントファイルを配置する。
# unzip -d /usr/share/fonts/ IPAexfont00401.zip
以下のコマンドを実行して、不要なファイルを削除する。
# cd /usr/share/fonts/IPAexfont00401 # rm *.txt
以下のコマンドを実行して、フォントキャッシュを更新する。
# fc-cache -fv
ソースコードの表示に向くとされているフォント。
https://itouhiro.github.io/mixfont-mplus-ipa/migu/より migu-1m-20200307.zip をダウンロードする。
以下のコマンドを実行して、フォントファイルを配置する。
# 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
教育用漢字とかたかな、平仮名のみを収録した篆書体のフォント。
http://www.hakusyu.com/download_education.htmより Windows 用のフォント hktenkk.zipを ダウンロードする。
以下のコマンドを実行して、フォントファイルを配置し、フォントキャッシュを クリアする。
# unzip -d /usr/share/fonts hktenkk.zip # fc-cache -fv
年賀状で使用する文字に絞った篆書体のフォント。
http://www.hakusyu.com/download_shiki_winter.phpより Windows用のフォント hktenng.zip をダウンロードする。
以下のコマンドを実行して、フォントファイルを配置し、フォントキャッシュを クリアする。
# unzip -d /usr/share/fonts hktenng.zip # fc-cache -fv
システム起動時にカーネル・コマンドに以下のパラメータを設定する。
fsck.mode=force
レスキューディスク等でシステムを起動し、以下のコマンドを実行する。
# fsck -fpcDv /dev/<デバイス名>
レスキューディスク等でシステムを起動し、以下のコマンドを実行する。
以下コマンドを実行して、Volume Groupをスキャンする。
# vgscan
実行結果より、Volume Group名を確認する。例えば、以下のように出力された場合、 Volume Group名は「fedora」である。
Reading volume groups from cache. Found volume group "fedora" using metadata type lvm2
以下コマンドを実行して、Logical Volumeを確認する。
# lvscan
実行結果よりLogical Volumeを確認する。例えば、以下のように出力された場合、 2つのLogical Volumeが存在している。
ACTIVE '/dev/fedora/root' [929.02 GiB] inherit ACTIVE '/dev/fedora/swap' [7.86 GiB] inherit
lvscanの実行結果で「ACTIVE」と表示されていない場合は、Volume Group名を 指定して書きコマンドを実行し、Volume Groupを有効にする。
# vgchange -ay <Volume Group名>
Logical Volumeを指定してfsckを実行する。上記のlvscanの実行結果の場合、以下の コマンドを実行する。
# fsck -fpcDv /dev/fedora/root
gFTPは、FTP、SSH、FSPププロトコルでファイル転送をするためのGUIクライアントである。
# dnf install gftp
# dnf install gimp
文字をスキャナで取り込んで、文字の色を着色する手順は以下のとおり。
GNU Krell Monitors は、CPU、ディスク、ネットワークインターフェース等の稼働状況を モニターするGUIツールである。
以下のコマンドを実行してパッケージをインストールする。
# dnf install gkrellm
# dnf install glabels
以下のコマンドを実行して、システムモニターをインストールする。
# dnf install gnome-system-monitor
root権限で /etc/default/grub ファイルを以下のように編集する。
root権限で grub2-mkconfig コマンドを実行して、GRUB configuration file を 更新する。
# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfg
# dnf install icedax
$ icedax dev=/dev/cdrom -vall cddb=0 -B -Owav
Fedora 34 から、既定の Input Method が anthy になったらしい。 Rocky Linux 9 では、日本語入力は、ibus-anthy しか対応していない。
以下のコマンドを実行して、パッケージをインストールする。
# dnf install ibus-anthy
「霞」画面で変更を保存したときに、「Could nit load a pixbuf ...」エラー が発生する場合は、以下のコマンドを実行してから「霞」画面を開き直して 辞書の編集をやり直すこと。
# sudo update-mime-database /usr/share/mime
手書き文字入力機能が廃止になった。
以下のコマンドを実行して、パッケージをインストールする。
# dnf install ibus-mozc
JavaのUIを表示するとフォントが小さすぎて見えにくい場合は、環境変数 「GDK_SCALE」にフォントサイズの倍率を指定して、javaアプリケーションの実行 コマンドを実行する。フォントサイズを2倍にして画面表示する場合のコマンド実行 例は以下のとおりである。
$ GDK_SCALE=2.0 <Javaアプリケーション実行コマンド>
以下のコマンドを実行して、パッケージをインストールする。
# dnf install keychain
ログイン時に keychain を実行するために、~/.bash_profile に以下の行を追加する。
/usr/bin/keychain <非公開鍵のパス> ...
source ${HOME}/.keychain/${HOSTNAME}-shssh-keygen コマンドでRSA公開鍵をデフォルトのファイル名で作成した場合は、以下の ようになる。
/usr/bin/keychain ${HOME}/.ssh/id_rsa
source ${HOME}/.keychain/${HOSTNAME}-shなお、keychain コマンドで非公開鍵を読み込んだ場合、システム起動後に初回だけ passphase を聞いてくるので、ssh-keygen コマンドで公開鍵/非公開鍵を生成した ときに設定したpassphrase を入力すること。
以下のコマンドを実行して、kid3をインストールする。
# dnf install kid3
以下のコマンドを実行して、libguestfs-tools パッケージをインストールする。
# dnf install libguestfs-tools
以下のコマンドを実行して、SELinux boolean value を設定する。
# setsebool -P virt_use_fusefs 1
パッケージをインストールした場合は、システムを再起動する。以下のコマンドを 実行して、仮想マシンのファイルをマウントする。
$ guestmount -a <VHDファイルのパス> -m <マウントするVHDのパーティション> \
--rw <マウント先ディレクトリ>注意
$ guestmount -a windows.img -m /dev/sda1 --rw /mnt
$ guestumount <マウント先ディレクトリ>
Linux Malware Detect (LMD) は Linux のウィルススキャナーで、スキャナーが 軽量であることが特徴である。
以下のコマンドを実行して、ed、inotify-tools の2つのパッケージをインストール する。
$ sudo dnf install ed which inotify-tools perl cronie [checkpolicy policycoreutils]
SELinux が有効な環境の場合は、checkpolicy、policycoreutils パッケージも インストールすること。
$ tar xvfz linux-malware-detect-x.x.x.tar.gz
$ cd linux-malware-detect-x.x.x $ sudo ./install.sh
/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
この設定は以下のことを行う。
if [ -f "$syscnf" ]; then
source $syscnf
fiこれは、Inotiry monitoring 実行時に定期的に設定ファイルの再読み込みが 行われるが、その際に /etc/sysconfig/maldet の読み込みが行われない問題を 回避するための設定である。
このジョブは、以下のことを行う。
このサービスは、ユーザーホームディレクトリを対象に inotify monitoring を 行う。
Linux Malware Detect のログは /user/local/maldetect/logs ディレクトリに 出力されるが、/usr ディレクトリ配下では logrotate によるログの ローテーションができないので、ログの出力先を /var/log/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"
以下のコマンドを実行して、/var/log/maldet ディレクトリを作成する。
# mkdir /var/log/maldet
以下のコマンドを実行して、/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]
/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 の仕組みを利用して、ファイルの作成、 変更、移動が行われたことを検知してファイルをスキャンする機能である。
Linux Malware Detect がカーネルの inotify 機能により、ファイルの作成、変更、 移動の通知を受けとると、15秒後にそれまでに通知を受けた他のファイルと一緒に ウィルススキャンを行う。カーネルから通知を受けてからウィルススキャンを開始 するまでの間隔(秒)は、conf.maldet ファイルの「inotify_sleep=」で設定する ことができる。
/etc/sysctl.conf ファイルを編集して、下記の設定をする。設定値は、監視対象の ファイルの数に応じて 262144、524288、1048576 などを指定する。
fs.inotify.max_user_watches = <inode上限値>
作業ディレクトリに「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;$ 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種類の ファイルやディレクトリをスキャン対象から除外するために、以下の設定をする。
^/tmp/[0-9]*_[0-9]*-scantemp\.[0-9a-z]* ^/usr/local/maldetect[^/]*/tmp/.*
/usr/local/maldetect/monitor_paths ファイルにスキャン対象のディレクトリの 絶対パスを行区切りで設定する。また、
ルートディレクトリ(/)以下すべてのファイルを検索対象にする場合の 設定例は以下のとおり。
/
/dev、/proc ディレクトリ配下のファイルを検索対象から除外する場合は、 既定の設定の下に以下の設定を追加する。
... ^/dev/.* ^/proc/.* ^/var/log/.*
ルートディレクトリ(/)配下のディレクトリを列挙してスキャン対象を 指定する場合の設定例は以下のとおり。
/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. スキャン対象ディレクトリの読み取りエラーが発生する場合は、 そのディレクトリをスキャン対象から外すか、エラーが発生しない サブディレクトリをスキャン対象に指定する
/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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/usr/local/maldetect/conf.maldet ファイルを以下のように編集する。
... scan_ignore_root="0" ...
設定項目の説明
所有者が root のファイルもスキャン対象にする場合は、"0" を設定する。
その他の設定項目
ウィルスを検知したときにそのファイルを隔離する場合は、 「quarantine_hits="1"」を設定する。
プロキシサーバーを通してインターネットにアクセスする環境では、プロキシ サーバーのホスト名またはIPアドレスと、プロキシサーバーのポート番号を指定 する。
以下のコマンドを実行すると、UIDが500(conf.maldetのinotify_minuidで 設定された値)以上のユーザー・ホームディレクトリの監視を開始する。
# maldet --monitor users
以下のコマンドを実行すると、指定した絶対パスのディレクトリの監視を開始 する。
# maldet --monitor <dir-path>[,<dir-path,...]
ディレクトリのパスは絶対パスで指定する。また複数のディレクトリを監視する 場合は、それらのディレクトリの絶対パスをコンマ区切りで指定する。
監視対象のディレクトリの絶対パスを行区切りで記述したファイルの絶対パスを 指定して監視を開始するためのコマンドは以下のとおり。
# maldet --monitor <file-path>
以下のコマンドを実行すると、monitoringsサービス(現在監視実行中の セッション)を停止する。
# maldet --kill-monitor
現在実行中のmonitoringサービス(現在監視実行中のセッション)の監視 レポートは、日次の cron ジョブ(/etc/cron.daily/maldet)により自動的に 出力される。現在実行中のセッションの監視レポートをすぐに出力したい場合は、 以下のコマンドを実行する。
# maldet --monitor-report
出力したレポートは、以下のコマンドで表示(標準出力への出力)する。
# maldet --dump-report [<scan-id>]
SCAN ID の指定(scan-id)を省略すると、最後にスキャンされたセッションの レポートが表示される。SCAN ID の確認方法については 「スキャン結果のレポート表示」の説明を参照のこと。
--dump-report オプションの代わりに --report オプションを指定すると、 ファイル・ビューアーを使用して監視レポートを表示する。
レポートに下記のようなウィルスの検知が表示された場合で、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>
以下のコマンドを実行すると、監視レポート、隔離データ等を削除する。
# maldet -p または # maldet --purge
/usr/local/maldetect/conf.maldet ファイルを編集する。詳細は conf.maldet ファイルのコメントを参照のこと。
既定値は"1"が設定されているので、clamscan、clamdscan コマンドが利用可能で あればウィルスのスキャンに これらを使用する。ClamAV がインストールされている 場合で、ウィルススキャンに ClamAV のエンジンを使用しない場合は、 「scan_clamscan="0"」を設定する。
既定値は"1"が設定されているので、ファイルの所有者が root の場合はスキャンの 対象外となる。所有者が root のファイルもスキャン対象とする場合は、"1" を設定 する。
既定値は"0"が設定されているので、ウィルスを検知しても隔離せずにアラートを 発報するだけで、隔離を行わない。ウィルスを隔離(ファイルを隔離場所に移動 する)する場合は、「quarantine_hits="1"」を設定する。
プロキシサーバーを通じてインターネットにアクセスする環境の場合は、 「web_proxy="ホスト名:ポート番号"」を指定する。ホスト名、ポート番号 は、プロキシサーバーのホスト名またはIPアドレス、およびプロキシサーバーの ポート番号を指定すること。
プロキシサーバーを通してインターネットにアクセスする環境では、Linux Malware Detect のインストール直後はウィルス定義のシグネチャがダウンロードされて いないので、ウィルススキャンを実行することができない。従って、この設定で プロキシサーバーを指定した後に root 権限で「maldet --update」コマンドを 実行し、ウィルス定義のシグネチャをダウンロードすること。
ClamAV がインストールされていない場合、または ClamAV がインストールされて いても freshclam や clamd の設定が不十分で clamdscan コマンドが正常に実行 できない場合は、以下に示す手順を確認・実行すること。
以下のコマンドを実行して、clamav パッケージをインストールする。
# dnf install clamav
ローカルで clamd サービスを動かす場合は、「ClamAV - clamav-update」の 手順を実行して、clamav-update パッケージのインストールと、freshclam の 設定を行う。
ローカルで clamd サービスを動かす場合は、以下の手順を実施して clamd パッケージのインストールと clamd サービスの設定をする。
# dnf install clamd
/etc/clamd.d/scan.conf ファイルを以下のように編集する。
「ClamAV - clamd > その他の設定 > SELinuxの設定」の手順に従って、 SELinuxのbool値の設定と、ローカル・ポリシーの設定を行う。
「ClamAV - clamd > その他の設定 > /etc/freshclam.conf」の編集の 手順に従って、/etc/freshclam.conf ファイルの「NotifyClamd」ディレクティブ を以下のように設定する。
NotifyClamd /etc/clamd.d/scan.conf
以下のコマンドを実行して、clamd@scan サービスの自動起動を有効にして、 サービスを起動する。
# systemctl enable --now clamd@scan
/usr/local/maldetect/conf.maldet ファイルを以下のように編集する。
scan_clamscan="1"
conf.maldet ファイルに以下の設定を追加する。
scan_clamd_remote="1"
clamdscan コマンドの設定ファイルのパスを設定する。既定の設定は以下の とおりである。
remote_clamd_config="/etc/clamd.d/clamd.remote.conf"
/etc/clamd.d/clamd.remote.conf ファイルを作成して、以下の設定をする。
TCPSocket 3310 TCPAddr <remote-host-name>
/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/usr/local/maldetect/ignore_inotify ファイルに以下の行を追加する。
... ^/var/lib/clamav/.* ^/var/spool/quarantine/.*
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 の設定例を以下に示す。
前提条件
[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を参照のこと。
以下のコマンドを実行して、スキャン結果のレポート一覧を表示する。
# maldet --report list
一覧の項目は以下のとおり。
| SCANID | スキャン毎に付与されるID |
| RUNTIME | スキャンの実行時間 |
| FILES | スキャンしたファイルの数 |
| HITS | ウィルスを検知したファイルの数 |
| CLEANED | 検疫により無害化したファイルの数 |
レポート一覧で確認した 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 |
ウィルススキャンは、それぞれ以下のように実行した。
clamav-freshclam、clamd@scan サービスを実行、maldetサービスを停止した 状態で、「clamdscan --fdpass 検索対象ディレクトリ」コマンドを実行
conf.maldet ファイルで「scan_clamscan="0"」を設定し、clamav-freshclam、 clamd@scan、maldet サービスを停止した状態で、 「maldet --scan-all 検索対象ディレクトリ」コマンドを実行
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="1"」を設定して、メール通知を有効にする。
「email_addr="OSユーザー名"」を指定して、指定したOSユーザーにアラート 通知メールを送信する。複数のユーザーに通知する場合は、OSユーザー名を コンマ区切りで指定する。
OSユーザーへのメール通知を行う場合は、s-nail、sendmessage パッケージを インストールする必要がある。これらのパッケージをインストールすれば、特に インストールしたパッケージの設定なしで maldet がメール送信したり、OSの ユーザーが mailx コマンドでメールを確認したりできる。
メール通知に必要なパッケージのインストールや、mailx コマンドの利用方法に ついては、s-nail & sendmailを参照のこと。
# dnf install libreoffice
# dnf install libreoffice-langpack-ja
| Product | RSS (MiB) |
|---|---|
| Lynx | 9.0 |
| midori | 82.2 |
| Pale Moon | 210.9 |
| Firefox | 309.2 |
Lynxは端末(Terminal emulator)でHTMLを成形されたテキストに変換して表示するWeb ブラウザーである。画像、動画、音声には対応しない。また、表を整形して表示する こともできない。
以下のコマンドを実行して、パッケージをインストールする。
# dnf install lynx
以下のコマンドを実行して、パッケージをインストールする。
# dnf install midori
リポジトリのパッケージは、URL入力のために「/」を入力すると検索窓が開いて しまうため、このバグが修正された最新盤のソースからビルドする手順を以下に 示す。
https://github.com/midori-browser/core/archive/master.zipを ダウンロードして、ファイル名を「core-master.zip」に変更する。
以下のパッケージをインストールする。
実行するコマンドは以下のとおり。
# dnf install gcc cmake intltool vala libsoup-devel sqlite-devel \
webkit2gtk3-devel gcr-devel json-glib-devel libpeas-devel \
libarchive-devel libxml2-develCentOS 7 の場合は、以下のコマンドを実行してビルドに必要なパッケージを インストールする。
# yum install gcc cmake3 intltool vala libsoup-devel sqlite-devel \
webkitgtk4-devel gcr-devel json-glib-devel libpeas-devel \
libarchive-devel libxml2-devel# 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$ rpmbuild -ba <home-dir>/rpmbuild/SPECS/midori-core.spec
Pale Moon は、Mozilla Firefox から派生したマルチプラットフォームの軽量Web ブラウザである。バイナリは tarball で配布されており、いわゆる「ポータブル」 な運用が可能である。
Download Pale Moon for Linux より「ownload x64 - GTK3 tarball (direct download)」のリンクをクリックして 「palemoon-xx.xx.xx.linux-x86_64-gtk3.tar.xz」をダウンロードする。
以下のコマンド(xx.xx.xx はバージョン番号に読み替えること)を実行して、 /opt/palemoon ディレクトリの下にバイナリを配置する。
# tar xvfJC palemoon-xx.xx.xx.linux-x86_64-gtk3.tar.xz /opt
/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
以下のコマンドを実行して、.desktop ファイルのシボリックリンクを /usr/share/applications ディレクトリの下に作成する。
# ln -sf /opt/palemoon/palemoon.desktop /usr/share/applications
livecd-toolsは、Live CD の ISO イメージを作成したり、Live CD の ISOイメージ から Live USB を作成したりするためのツールのパッケージである。
# dnf install livecd-tools
livecd-creator は、kickstart ファイルに記述された内容から Live CD の ISO イメージを生成するためのコマンドである。
以下のコマンドを実行して、spin-kickstartsをインストールする。
# dnf install fedora-kickstarts
最小構成のイメージを作成する場合
/usr/share/spin-kickstarts ディレクトリから以下のファイルを作業 ディレクトリにコピーする。
作業ディレクトリに拡張子 .ks のファイル(例:fedora-live-server.ks) を作成し、以下の内容を設定する。
%packages セクション(%packages で始まり、%end で終わる部分)の前に Kickstart コマンドを記述して、以下の項目を設定する。
作成した Kickstart に取り込む Kickstart ファイルを 「%include file-path」の形式で指定する。以下の Kickstart ファイルを インクルードすること。
fedora-live-base.ks に設定されたパッケージに追加してインストールする パッケージ、グループを以下の形式で指定する。
指定したパッケージをインストールする。package-name の前に「-」を 付けると、そのパッケージは除外される。
指定したグループをインストールする。「@group-name」の前に「-」を 付けると、そのグループは除外される。
%post セクションは、ISOイメージのインストール後に、システムが再起動前に 実行する処理を記述するセクションである。
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 を開くこと。
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 をカスタマイズする場合
system-config-kickstart
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>]
livecd-iso-to-disk は、Live CD の ISO イメージ の内容をディスクに書き込む ツールである。Live CD の ISO イメージから Live USB を作成する手順を以下に 示す。
livecd-iso-to-disk ディスクコマンドで「--efi --format --reset-mbr」 オプションを指定する場合は、下記の1〜3の手順は不要である。
「mkdosfs -n volume名 /dev/partition-device」を 指定して、EFI System パーティションをFAAT32でフォーマットする。
以下の手順を実行して、EFI Systemパーティションの名前を 「EFI System Partition」に設定する。
root権限のユーザーで以下のコマンドを実行して、Live USBのISOイメージを USBデバイスに書き込む。
# livecd-iso-to-disk --efi --overlay-size-mb <size> <iso-image-path> \ <usb-part-device>
# 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 となる。
$ localectl status
$ localectl list-locales
「設定可能な言語の確認」で、「ja_JP.UTF-8」が表示されなかった場合は、 以下のコマンドを実行して、glibc-langpack-ja パッケージをインストールする。
# dnf install glibc-langpack-ja
以下のコマンドを実行して、言語に ja_JP.UTF-8 を設定する。
# localectl set-locale LANG=ja_JP.UTF-8
$ localectl list-keymaps
以下のコマンドを実行して、「設定可能なキーボードの確認」で表示された Keymap の中から Keymap を選択して、日本語キーボードの設定をする。
# localectl set-keymap {jp|jp106}timezone の設定は、シンボリックリンク /etc/localtime のリンク先を切り換える ことで設定するが、systemd パッケージに含まれる timezonectl コマンドで設定 することもできる。
$ timedatectl list-timezones
# timedatectl set-timezone Asia/Tokyo
logrotate は、/etc/logrotate.conf および /etc/logrotete.d ディレクトリ配下の 設定ファイルの設定に従ってログファイルのローテーションや圧縮を行なうサービス である。標準出力やエラー出力をログファイルにリダイレクトしている場合は、 logrotate によりログライルをローテーションすべきである。
以下のコマンドを実行して、パッケージをインストールする。
# dnf install logrotate
logrotate.service の 既定の設定では、「ProtectSystem=full」となっているため、 /usr、/etc、ブートローダーディレクトリ配下のディレクトリは、logrotate に 対して読み取り専用でマウントされる。そのため、logrotate によるログの ローテーションが失敗する。この問題に対応する方法は、ログの出力先を /usr、/etc 以外のディレクトリ(ブートローダーディレクトリを除く)に変更した上で、以下の 何れかの SELinux の設定をする。
/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
作業ディレクトリで、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};$ 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>
...
}
...すべてのログファイルに適用される 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」コマンドで指定するものと同じである。
# 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
}規定ではログファイルの最も短い周期は「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 を有効化した場合は、logrotate の設定ファイルに daily, weekly, ... が設定されていない場合の実行周期が daily から hourly に変わることに注意 すること。
規定ではログファイルの拡張子は、dateformatオプションに「-%Y%m%d」が設定 された状態となっている。そのため1日に2回以上ログファイルの名前変更が 発生した場合は、変更するログファイルの名前が重複するためファイル名の変更 に失敗する。その対策として、logrotateの設定ファイルに 「dateformat -%Y%m%d%H」などを設定すること。
物理的なディスクのパーティションに PE が割り当てられた状態。物理ディスクの パーティションをタイプ 8e(Linux LVM)で作成し、そのパーティションのデバイス を指定して、 pvcreate コマンドを実行すると、Physical Volume が作成される。
# pvcreate /dev/<device-name>
物理的にデータが格納される塊。デフォルトでは 4MB のサイズになる。
1つ、または複数の PV で構成された論理的なデータ領域で、従来の物理ディスクに 相当する。vgcreate コマンドを実行することで、VG が作成される。
# vgcreate <VG-name> /dev/<pv-dev-name> [/dev/<pv-dev-name> ...]
引数の説明
VG を分割した論理的なデータ領域で、カーネルからは通常のブロックデバイスと して認識される。この上にファイルシステムを作成する。lvcreate コマンドを実行 することで、既に作成したVG の上に LV が作成される。
# 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> ...]引数の説明
Logical Volume のサイズを指定する。サイズは数値の後に単位を付けることが 可能で、単位を省略すると「m」を指定したことになる。単位は、bBはバイト、 sSはセクター(512バイト)、kKはキロバイト、mMはメガバイト、gGはギガ バイト、tTはテラバイトを表す。それぞれの単位は2の累乗(iB)である。
作成する Logical Volume のサイズは -L オプションまたは -l オプションの どちらかを使用して指定すること。
作成する Logical Extents の個数を指定する。数値の後ろに「%VG」を指定 すると、Volume Group 全体の Physical Extents の個数に対するパーセントと なる。数値の後ろに「%FREE」を指定すると、Volume Group の未割り当ての Physical Extents の個数に対するパーセントとなる。数値の後ろに「%PVS」を 指定すると、引数で指定した Physical Volume の 未割当て のPhysical Extents の個数に対するパーセントになる。
Logical Volume の名前を指定する。
指定した Volume Group の上に Logical Volume を作成する。
Physical Volume が作成された物理パーティションのデバイスを指定する (省略可能)。また複数指定することも可能。Physical Volume を指定すると、 指定された Physical Volume の上に後述する Logical Volume(の Logical Extent)が作成される。
Logical Volume の指定について
LVM 関連のコマンドで Logical Volume を指定する場合は、この形式で指定する。
ブロックデバイスとして参照する場合は、この形式で指定する。
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 のみに保存される。
# pvdisplay [<PV-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-name>]
引数の説明
--- 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 [{<VG-name>|<LV-name>}]引数の説明
--- 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
サイズを拡大した物理パーティションのデバイスを指定して、pvresize コマンド を実行し、Physical Volume を拡大する。
# pvresize /dev/<device-name>
parted コマンド等により、/dev/sda3 パーティションを拡張した後に、 拡張した領域を PE に割り当てて Phisical Volume を拡張する場合は、以下の コマンドを実行する。
# pvresize /dev/sda3
拡張したPVの物理パーティションを指定して、lvextend コマンドを実行し、 Logical Volume を拡大する。
# 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>引数の説明
拡張後の Logical Volume のサイズを指定する。-L オプション、 -l オプションの何れかを指定すること。数値の前に + を指定すると現在の サイズからの増分指定となる。数値の後ろに単位を指定可(省略時はメガ バイト)。単位については、lvcreate command を参照のこと。
拡張後の Logical Extents の個数を指定する。数値の前に + を指定すると、 現在の値からの増分指定となる。数値の後にパーセントの基準を指定可能 (詳細は、lvcreate command を参照)である。
サイズを拡張する対象の Logical Volume を 「/dev/Volume-Group-name/Logical-Volume-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
拡張された Logical Volume の上に作成されているファイルシステムのサイズを 拡張する。ファイルシステムごとのコマンドは、 Disk format and maintenance を参照のこと。
Logical Volume /dev/fedora_xfce/root の ext4 ファイルシステムのサイズを Logical Volume のサイズまで拡大する場合は、以下のコマンドを実行する。
# resize2fs /dev/fedora_xfce/root
新規に作成した物理パーティションのデバイスを指定して pvcreate コマンドを 実行し、新規に作成した物理パーティションに Physical Volume を作成する。
# pvcreate /dev/<new-part-name>
追加対象の Volume Group の名前と、新規に追加した Physical Volume を 指定して vgextend コマンドを実行する。
# vgextend <VG-name> /dev/<pv-dev-name> [/dev/<pv-dev-name> ...]
指定する引数は、vgcreate command と同様である。
新規に作成した PV の物理パーティションを指定して、lvextend コマンドを 実行し、Logical Volume を拡大する。lvextend command の説明は、 「物理パーティションのサイズを拡大した場合」を参照のこと。
以下のコマンドは、新規に作成した物理パーティションの領域全てを Logical Volume に追加する場合の例である。
# lvextend -l +100%PVS /dev/<VG-name>/<LV-name> /dev/<pv-dev-name>
拡張された Logical Volume の上に作成されているファイルシステムのサイズを 拡張する。ファイルシステムごとのコマンドは、 Disk format and maintenance を参照のこと。
縮小対象の Logical Volume の上に作成されているファイルシステムのサイズを 縮小する。ファイルシステムごとのコマンドは、 Disk format and maintenance を参照のこと。
# lvchange -an /dev/<VG-name>/<LV-name>
# lvredule {-L [-]<size>[b|B|s|S|k|K|m|M|g|G|t|T] | -l [-]<num>[%VG]} \
/dev/<VG-name>/<LV-name>引数の説明
縮小後のサイズ指定する。数値の前に「-」を付けると、現在のサイズから縮小 するサイズの指定となる。数値の後に指定する単位については、 lvcreate command を参照のこと。
縮小後の Physical Extent の個数を指定する。数値の前に「-」を付けると、 現在から減らす個数の指定となる。数値の後ろに「%VG」を指定すると、 Volume Group 全体の PE の個数に対するパーセントの指定となる。
# lvchange -ay /dev/<VG-name>/<LV-name>
pvresize コマンドを実行いて、Physical Volume のサイズを縮小する。
# pvresize --setphysicalvolumesize <size>M /dev/<pv-dev-name>
引数の説明
縮小した後の Physical Volume のサイズを MiB 単位で指定する。サイズは (割当済PE数+1) × PEサイズ(MiB) = (割当済PE数+1) × 4 で算出する。
縮小対象の Physical Volume が作成された物理パーティションのデバイスを指定 する。
parted コマンド(Disk format and maintenance を参照)等を使用して、 縮小した Physical Volume が作成された物理パーティションのサイズを変更する。 パーティションの最後のセクタ数は 「開始セクタ + (割当済PE数 + 1)* 4 * 1024 * 1024 / 512」 で算出すると良い。
boot パーティションを含むディスクの全ての物理パーティションを、新設した ディスクに移す手順の例を示す。
移設前のディスク(容量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
40GiBの(仮想)ディスクをシステムに接続して、fdisk コマンドを実行して、 以下のパーティションを作成する。
移設後のディスクの Linux LVM パーティションに PEを作成する。
# pvcreate /dev/sdb2
移設後のディスクに作成した PE を既存のVG に追加する。
# vgextend fedora /dev/sdb2
pvmove コマンドを実行して、移設前ディスクの PV に配置された PE を移設後の ディスクの PV に移動する。
# pvmove /dev/sda2 /dev/sdb2
コマンドの実行が終わったら、移設前の PV(/dev/sda2)を指定して pvdisplay コマンドを実行し、「Total PE」と「Free PE」の値が同じ(全てのPEが未割り当て となっている)ことを確認する。
# vgreduce fedora /dev/sda2
ここまでの操作で、移設元のディスクに配置されていた PV が移設先のディスクに 移動した。
# mke2fs -t ext4 /dev/sdb1
移設後の boot パーティションをマウントして、移設前の boot パーティション の内容をマウントしたディレクトリにコピーする。
# mount /dev/sdb1 /mnt # cp -afv /boot/* /mnt
# grub2-mkconfig -o /boot/grub2/grub.cfg # grub2-install /dev/sdb
以下のコマンドを実行して、/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
/opt/mattermost-desktop-x.xx.xx-linux-x64 ディレクトリに移動して以下の コマンドを実行し、chrome-sandbox ディレクトリのオーナーと権限を設定する。
# chown root:root chrome-sandbox # chmod 4755 chrome-sandbox
# /opt/mattermost-desktop/create_desktop_file.sh
「/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;
# mv Mattermost.desktop /usr/share/applications/
mDNS (multicast dns) は zero-configuration(設定不要)の名前解決サービスである。
# dnf install avahi nss-mdns
# firewall-cmd --permanent --add-service mdns # firewall-cmd --reload
# systemctl enable --now avahi-daemon
avahi-daemon サービスが有効になると、システム起動時に /usr/sbin/avahi-daemon が起動され、UDPポート 5353 でリクエストを待ち受ける。このデーモンは、システム 起動時に、「hostnamectl set-hostname <ホスト名>」コマンドによって設定された ホスト名とIPアドレスを他のホストに通知し、通知されたavahi-daemonサービスは 通知された内容をキャッシュに保持する。
mDNSは、ドメイン名を「local」に固定している。mDNSが管理するドメイン名を変更 する手順は以下のとおりである。
/etc/avahi/avahi-daemon.conf を編集して以下のように変更する。
ホスト名を登録するときのドメイン名の既定値を設定する
「domain-name=」で指定したドメイン以外のホストも mDNS で名前解決したい場合は 「domain-name=」で指定したドメインも含めて、対象のドメインをコンマ区切りで 指定する。
mDNSで管理するドメイン名を「mydomain」に設定、他に「yourdomain」も mDNSで 名前解決する場合は、以下のように設定する。
domain-name=mydomain browse-domains=mydomain, yourdomain
/etc/mdns.allow を編集して、nss-mdns (mDNSのライブラリ)がホスト名の名前 解決の対象とするドメイン名を指定する。
「mydomain」、「yourdomain」を名前解決の対象とする場合は、以下のように設定 する。
.mydomain. .mydomain .yourdomain. .yourdomain
/etc/nsswitch.conf を編集して、「hosts:」を以下のように編集する。
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」以外の場合も名前解決を実行するように、上記の 修正を行った。
以下のコマンドを実行して、ホスト名を設定する。なお、ホスト名の指定はドメインを 付けないこと。
# hostnamectl set-hostname <ホスト名>
以下のコマンドを実行して、avahi-daemonを再起動する。
# systemctl restart avahi-daemon
localドメイン(avahi-daemonの既定のドメイン)の場合は、基本的には下記の設定 ファイルは既定値のままで利用可能である(/etc/mdns.allow は不要)。
但し、ネットワーク・インターフェースが複数存在する場合は、仮想環境によっては 名前解決がうまく行えない場合があるので、その場合は以下の設定を行うこと。
「allow-interfaces=」に名前解決のIPアドレスが設定されているネットワーク・ インターフェースの名前を設定する。
下記の内容を設定する。
.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-daemon の挙動を確認するためのコマンドを 提供する。
以下のコマンドを実行して、パッケージをインストールする。
# dnf install avahi-tools
https://www.microsoft.com/ja-jp/microsoft-teams/download-appから 「Linux RPM (64ビット)」をダウンロードする。
パッケージをダウンロードしたディレクトリに移動して、パッケージ (rpmファイル)をインストールする。
# dnf install ./teams-x.x.xx.xxxxx-x.x86_64.rpm
Windows版でも発生する事象のようである。 以下のディレクトリ(キャッシュ)を削除することで解消した。
以下のコマンドを実行して、パッケージをインストールする。
# dnf install mscore
参考文書(リンク)
netsurfはGPLv2ライセンスの軽量Webブラウザである。Fedoraでは netsurf パッケージが提供されているが、CentOSではパッケージが提供されていないため、 netsorf のRPMパッケージビルド手順を以下に示す。
https://www.netsurf-browser.org/downloads/gtk/ より netsurf-all-3.x.tar.gz をダウンロードする。
RPMパッケージのビルドに必要な以下のパッケージをインストールする。
ビルドに必要なパッケージをインストールするコマンドは以下のとおり。
# 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-develCentOS 8 の場合は、 PowerTools リポジトリを有効化 してからパッケージをインストールすること。
CentOS 7 の場合は、dnf コマンドの代わりに yum コマンド(引数は変わらない) を実行してパッケージをインストールする。
# 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 -ba --with=nss --without=openssl <home-dir>/rpmbuild/SPECS/netsurf.spec
従来はネットワークの設定は、ifconfig コマンドの実行や、 /etc/sysconfig/network-scripts ディレクトリの下に配置されたネットワーク・ スクリプトを直接編集していたが、最近は Network Manager のコマンドである nmcli や、GUIの nm-connection-edhitor で設定されるようになっている。
nmcliを参照のこと。
Red Hat Linux 6 のように nmcli コマンドが使用出来ない場合は、 インターフェースごとの静的ルート設定ファイルに静的ルートを設定することが 可能である。静的ルートの設定ファイルは、/etc/sysconfig/neetwork-scripts ディレクトリの下に「route-device-name」のファイル名で格納されている。
以下の書式でネットワーク(ip/prefix)、送信先(ゲートウェイ・ ルーター、またはネットワーク・インターフェース)のIPアドレス (next-hop)、ネットワーク・インターフェース(device-name)を設定 する。
<ip>/<prefix> via <next-hop> dev <device-name>
例えば、インターフェース eth0 に対して以下のルートを設定する場合は、
/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
以下の書式でネットワーク(ip/net-mask)、送信先(ゲートウェイ・ ルーター、またはネットワーク・インターフェース)のIPアドレス(next-hop) を設定する。ADDRESSnの「n」は、0から始まる連番を設定して、複数のルート が設定できるようにする。
ADDRESS<n>=<ip> NETMASK<n>=<net-mask> GATEWAY<n>=<next-hop>
例えば、インターフェース eth0 に対して以下のルートを設定する場合は、
/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
ネットワーク・インターフェースを無効化⇒有効化して、ネットワーク・ スクリプトの変更を反映する。インターフェース 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)の間でパケットを受け渡しする場合(例えば ルーターとしての設定を行う場合)は、以下の手順を実行する。
/etc/sysctl.conf ファイルに以下の行を追加する。
net.ipv4.ip_forward = 1
以下のコマンドを実行して、「net.ipv4.ip_forward = 0」が表示されることを 確認する。
# /sbin/sysctl net.ipv4.ip_forward
# 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
以下のコマンドを実行して、外向けの 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/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"
# dnf install nmap-ncat
$ ncat -vz [-u] [-4] {<host-name>|<ip-addr>} <port-no>オプションの説明
# ncat -l [-u] [-4] [{-o|-x} <filename>] <port-no>オプションの説明
$ ncat [-s <ip-addr>] [-u] [-4] [{-o|-x} <filename>] \
{<host-name>|<ip-addr>} <port-no>オプションの説明
Windows Server では、PortQry.exe コマンドは実行可能である。それ以外の Windows OS の場合は、以下の手順により PortQry.exe インストールをする。
送信先のサーバー(host-name または ip-addr)、およびポート番号 (port-no)を指定して受信状態を確認するためのコマンドは以下のとおり。
> PortQry.exe -n {<host-name>|<ip-addr>} -e <port-no> [-nr] [-p {tcp|udp}] ^
[-l <file-name>] [-y]オプションの説明
コマンドのお付当
# dnf install tcpdump
$ 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)
# tcpdump {-A|-x|-X} -s <size> -i <interface-name> -Q {in|out|inout} \
()<expression>オプションの説明
# 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 ...
# 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/
...# tcpdump -X -s 64 -i enp0s8 -Q in \ "src net 192.168.56.0/24 and udp and (port 45688 or port 55200)"
nmcli は、NetworkManager (network management daemon) のクライアントである。 nmcli及びNetworkManagerは、NetworkManager パッケージに含まれている。
connectionとdeviceについての違いは、以下のとおりである。
ネットワーク・インターフェースのデバイスの設定のことである。 起動時にこの設定がネットワーク・インターフェースのデバイスに設定される。 connectionの設定変更を反映したい場合は、NetworkManagerサービスを再起動 すること。
ネットワーク・インターフェースのデバイスの現在の設定内容。deviceに対して modifyするとその設定は即座にデバイスに反映されるが、再起動するとその設定 内容は失われる。
device の一覧表示
$ nmcli device
このコマンドを実行すると、デバイス名、接続タイプ、状態、コネクション名が 表示される。device に対して connection が設定されていない場合は、 コネクション名が「--」と表示される。
connection の一覧表示
$ nmcli connection
このコマンドを実行すると、コネクション名、UUID、接続タイプ、デバイス名が 表示される。connection が up していない場合は、デバイス名が「--」と表示 される。
device-name のデバイスに対する connection(名前は connection-name) を 作成する場合は、以下のコマンドを実行す。
# nmcli connection add type {ethernet|wifi|...} ifname <device-name> \
con-name <connection-name>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の 値を指定する。
「nmcli connection modify connnection-id attribute value [ attribute value ...]」の形式でネットワーク接続の設定項目を設定する。 attribute は、「ネットワーク接続設定の詳細表示」で確認できる。
ネットワーク・スクリプト(/etc/sysconfig/network-scripts ディレクトリ 配下のファイル)を直接編集した場合は、以下のコマンドを実行して NetworkManager に設定を再読み込みさせる。
# nmcli connection reload
以下のコマンドを実行して、ネットワーク接続を再開する。
# nmcli connection up <connection-id>
# systemctl restart NetworkManager
# nmcli connection modify <connection-id> ipv4.method auto
# 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」の形式でも、ネットワークアドレスの上位ビット数で 指定しても良い。
# 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 に以下の静的ルートが既存の設定に追加 される。
# dnf install libnotify
以下のコマンドを実行すろと、GUI Desktopにタイトルと通知メッセージがポップアップ 表示される。
$ notiry-send [<タイトル>] <通知メッセージ>
オプションを指定すると、アイコンの種類、表示が消えるまでの時間(ミリ秒)などが指定 できる。詳細は「notify-send --help」で確認のこと。
GUI Desktopにメッセージを表示するためには、notification daemonをインストール する必要がある。Desktop Environmentによって、以下のパッケージをインストールする。
| GUI環境 | notification daemon |
|---|---|
| LXDE 他 | notification-daemon |
| MATE | mate-notification-daemon |
| Xfce | xfce4-notifyd |
notify-send は、コマンドを実行したユーザーが現在画面を開いている X Window に 対してメッセージが送信されるので、daemon から現在開かれている X Window に 対して一斉にメッセージを送信するのは難しい。ログインユーザーとそのユーザーが 開いているDisplay番号を汎用的に取得する方法がないため、非効率であるが現在 ログインしているユーザーと画面が開いている X Window のDisplay番号を別々に 取得して、その組み合わせで通知を発行する方法で一斉通知を実装する。
# ps -e -o user h | sort | uniq
# find /tmp -type f -name '.X*-lock' | sed -e 's/.*\.X//g' -e 's/-lock$//g'
X Window を開くと、/tmp/.XDisplay No-lock というファイルが作成されるので、 このファイル名から画面ID(の「:」の右側の数字)を取得する。
# 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; \
donenotify-send は、「-i アイコン名」オプションを指定して、ポップアップ したメッセージに表示するアイコンを指定可能である。指定できるアイコン名は、 以下のリンクを参照のこと。
Fedora 16よりデフォルトのNTP Client/Serverはchronyになった。
# dnf install ntpdate
/etc/ntp/step-tickers ファイルに NTPサーバ のホスト名を設定する
以下のコマンドを実行して、ntpdate service を有効にする
# systemctl enable ntpdate.service
openjdkは GPL v2 クラスパス例外(コピーレフト無し)のライセンスで提供される javaの実装である。
インストールするパッケージの名前は、JDKのバージョンによって以下のようになって いる。
| Version | Java Runtime Environment |
| 1.8.0 | java-1.8.0-openjdk |
| 11.0 | java-11-openjdk |
また、開発用、headless環境用に以下のパッケージがある。
javacコマンドなど、開発に必要なコマンド、ライブラリを提供するパッケージ
音声、画面のない環境(非GUI環境)を提供するパッケージ。 なお、JRE(Java Runtime Environment)のパッケージは、headlessのパッケージに 対してGUIサポート用の機能を追加したものになっている。
これらのパッケージを用途に応じて選択して、「dnf install パッケージ名」 コマンドでインストールする。
openjdkは、システムに複数のバージョンをインストールできる(バージョンごとに パッケージ名が違うため)ので、デフォルトのバージョンを切り換える場合は、 以下のように update-alternatives コマンドを実行する。
# update-alternatives --config java
上記のコマンドを実行すると、javaコマンドを切り換えるための一覧が表示される ので、番号を入力して目的のバージョンのものを選択する。
# update-alternatives --config javac
上記のコマンドを実行すると、javacコマンドを切り換えるための一覧が表示される ので、番号を入力して目的のバージョンのものを選択する。
に Redhat OpenJDKのサポート期間の説明がある。 Windows版でも Linux版と同じ期間のサポート(長期サポート)となっている。
Download Red Hat OpenJDK から Windows版の OpenJDK をダウンロード可能である。ただし、ダウンロードの前に Red Hat account への慈善登録が必要である。
Red Hat account の登録に会社名を指定すると、会社を代表して Red Hat account の 契約に同意することになるので、注意すること。
Amazon Corretto の 「Amazon Corretto xx をダウンロードする」ボタン(リンク)から、Linux版の他に、 Windows版、MAC OS版の OpenJDK をダウンロードできる。ダウンロードにあたり、 事前のユーザ登録の必要はない。
Download Red Hat OpenJDK の 「Lyfecycle Support」リンクにサポート期間の説明がある。
| Version | End of Support |
|---|---|
| OpenJDK 8 | June 2023 |
| OpenJDK 11 | October 2024 |
Amazon Corretto のよくある質問 長期サポート にサポート期間の説明がある。
| Version | End of Support |
|---|---|
| Corretto 8 | June 2023 |
| Corretto 11 | Augast 2024 |
PAM は Pluggable Authentication Module の略語である。 PAM はユーザー認証のための柔軟な仕組みを提供するものである。
以下のコマンドを実行して、パッケージをインストールする。
# dnf install pandoc
$ pandoc -f <input-format> -t <output-format> [-o <output-file>] [<input-file>]...
引数の説明
入力フォーマットを指定する。指定可能なフォーマットは以下のとおり。
出力フォーマットを指定する。指定可能なフォーマットは以下のとおり。
出力ファイルを指定する。このオプションを省略すると変換結果は標準出力に出力される。
$ pandoc -f dockbook -t markdown -o foo.md foo.docbook
$ pandoc -f markdown -t html -s -o foo.html foo.md
$ pandoc -f markdown -t html -s foo.md | lynx -stdin
$ pandoc -f markdown -t html -s foo.md | w3m -T test/html
libpwquality
pwmake entropy-bits
pwmake 80 ==> yD4NP@k)@j^yKoz@w
man によれば、entropy-bitsは最低56にすべきであり、パスワード破りが パスワードのハッシュまたはパスワードそのものにアクセスすることを想定する 場合は、entropy-bitsは80から128を指定すべきとある。
passwdqc
pwqgen [random=random-bits]
pwqgen random=24 ==> split-junior
pqqgenは可読性のある(覚えることが可能な)パスワードを生成するコマンドで ある。パラメータの指定を省略した場合は、「random=47」を指定したものと 見做される。random-bitsの値は、24〜85の間で指定すること。
pwgen
pwgen [-A] [-0] [-y] [-s] [pw-len] [pw-num]
pwgen ==>
ceiceeC0 oi8Phav4 och4eiDe Yah8Eove ahX3Upha faxohS4s Aisohw2y aeNg2uow
...
pwgenは記憶可能なパスワードを生成するコマンドである。パラメータを省略 すると、大文字と数字を含む8文字のパスワードを160個表示する。
以下のコマンドを実行して、パッケージをインストールする。
# dnf install php
インストールが終わると、/etc/httpd/conf.modules.d/15-php.conf、 /etc/httpd/conf.d/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><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>Xdeubgは、PHPのデバッグ機能を提供する。
以下のコマンドを実行して、パッケージをインストールする。
# dnf install php-pecl-xdebug
インストールが終わると、/etc/php.d/15-xdebug.ini が作成され、以下の内容が 設定される。
zend_extension=xdebug.so
| 項目名 | 説明 | 既定値 |
|---|---|---|
| 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 |
Fedora 31 及び CentOS 8 より docker パッケージが廃止された。そこで代わりに podman パッケージを使用することにする。なお、podman-docker パッケージの 導入により docker コマンドがそのまま利用できるので、ここでは docker パッケージ と違いのある部分だけを説明する。
以下のコマンドを実行して、パッケージをインストールする。
# dnf install podman podman-docker [rsyslog]
docker パッケージから podman パッケージへの切り替え手順は以下のとおり。
# systemctl stop docker
# dnf remove docker
# dnf install podman podman-docker golang rsyslog
# rm -rf /var/lib/docker/
docker パッケージでは、docker run コマンドに「--restart=always」を指定する ことで、システム起動時にコンテナーを自動起動していたが、podman は以下の手順に より、systemd でコンテナーを自動起動することができる。
# setsebool -P container_manage_cgroup on
-P オプションを省略すると設定内容は自壊機同時に反映されない。次回起動以降も 設定を反映死体場合は -P オプションを設定すること。
/usr/lib/systemd/system/rsyslog.service ファイルを開き、[Install]セクション に以下の1行を設定して、root権限のユーザーで 「systemctl enable --now rsyslog.service」コマンドを実行する。
Alias=syslog.service
--name container-name オプションを指定して docker create コマンドを実行 する。以下は、イメージ名が docker-image の docker image を使用して、 コンテナ名が container-name のコンテナを実行するコマンドの例である。
# docker create --name <container-name> -p 8080:80 <docker-image>
/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ファイルの記述上の注意点は以下のとおり。
CentOS 8 において、docker runコマンドで「--network host」を指定した場合 SELinuxでアクセス違反が発生するので、以下の手順でポリシーを作成して システムに適用する。
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 ファイル]
$ checkmodule -m -o container_init.mod container_init.te
$ semodule_package -o container_init.pp -m container_init.mod
# semodule [-X <優先度>] -i container_init.pp
以下のコマンドを実行して、必要なパッケージをインストールする。
# dnf install docker-compose
# pip3 install docker-compose
podman サービスが起動していないと、docker-compose コマンドの実行に失敗する ので、以下のコマンドを実行して podman サービスの自動起動を設定すること。
# systemctl enable --now podman.service
/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アドレス>,<ネットワークアドレス>,<ホスト名>"
docker-compose の一部のコマンド(run コマンドなど)はこの設定が必要。 設定手順は、Docker proxy settingsの「docker cli に対するproxyの設定」 を設定すること。
Using docker-compose の手順に従って docker-compose パッケージを インストールする。
以下のコマンドを実行して、rootless で podman.socket サービスの自動起動の 設定とサービスの起動を行う。
$ systemctl --user enable --now podman.socket
以下のコマンドを実行して、ソケットのパスを確認する。
$ 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を表わす。
以下のコマンドを実行して、DOCKER_HOST 環境変数に Podman API ソケットを 「unix:ソケットのパス」の形式で設定する。
$ export DOCKER_HOST=unix:/run/user/<UID>/podman/podman.sock
ログイン時に環境変数を自動設定する場合は、~/.bashrc に上記のコマンドを 設定すること。
docker-compose.yml ファイルが存在するディレクトリに移動して、docker-compose コマンドを実行する。
【コマンドの実行例】
$ docker-compose up -d
以下のコマンドを実行して、パッケージをインストールする。
# dnf install postgresql-server
パッケージをアンインストールした場合は、/var/lib/psql/data ディレクトリに データベースのデータが残ったままとなっているので、注意すること。
# postgresql-setup --initdb
# systemctl enable postgresql
# systemctl start postgresql
規定の設定では、クライアントからの接続の待ち受けアドレスは、localhost となっているので、リモートからの接続はできない。待ち受けアドレス (listen address)に localhost 以外のアドレスを加えるために、以下のように listen_addresses にコンマ区切りで待ち受けるIPアドレスを指定する。
listen_addresses = 'localhost,<ip-address>[,<ip-address>]'
クライアント認証の設定(接続元のアドレス、ユーザー、認証方法)をする。
全てのユーザに対して、OSのユーザ認証をする
全てのユーザに対して、OSのユーザ認証をする
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 のユーザ名、パスワードを使用する。
pg_dump コマンドは、デフォルトではデータベースのバックアップをSQLコマンドで 出力する。つまり、create table コマンド、copy コマンドなどをファイルに出力 する。
以下のコマンドを実行して、指定したデータベース名のデータベースを リダイレクト先のファイルにバックアップする。
$ sudo -u postgres pg_dump <db-name> > <dump-file-path>
-c オプションを指定すると、指定したデータベースを drop するための 「drop database」文を出力する。--if-exists オプションも同時に指定して リストアするときに drop 対象のデータベースが存在する場合は 「drop database」文を実行しないようにすること。
指定したデータベースを作成するための「create database」文を出力する。 このオプションは -c オプションと一緒に設定すべきである。
データベース定義のみをバックアップ・リストアする(テーブルのデータ 以外をバックアップ・リストアの対象にする)。
テーブルのデータのみをバックアップ・リストアする。
指定したテーブルのみをバックアップ・リストアする。-t オプションを複数 指定して、複数のテーブルを指定することができる。また table-name は ワイルドカード(*)のを使用することができる。このオプションを指定すると 指定したテーブルが依存するデータベース・オブジェクトをバックアップ しないので、初期化されたデータベースに対して完全なリストアを保証する ものではないことに注意すること。
リストア先の PostgreSQL server にリストア対象のデータベースのオーナー (データベース・ユーザー)が存在しない場合は、以下のコマンドを実行して データベース・オーナーを作成する。
$ sudo -u postgres psql -c "create user <db-owner>;"
pg_dump コマンドで出力したdump-file-path(pg_dump コマンドで -C オプションを指定して出力したダンプ・ファイル)をリダイレクトして、その 内容をリストアする。
$ sudo -u postgres psql < <dump-file-path>
リストアの時間を短縮したい場合は、Speeding up restoring PostgreSQL の手順を参照のこと。
リストア先の PostgreSQL server にリストア対象のデータベースが存在する 場合は、以下のコマンドを実行してそのデータベースを削除する。
$ sudo -u postgres psql -c "drop database <db-name>;"
以下のコマンドを実行して、リストア対象のデータベースを新規に作成する。
$ sudo -u postgres psql -c "create database <db-name>;"
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>;"
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 データベースに ダンプ・ファイルの内容がリストアされてしまうので注意すること。
-Fc オプションを指定してカスタム・フォーマットでデータベースをバックアップ すると、リストアする時に一部の情報のリストア(スキーマのみ、データのみの リストアや、テーブルを指定してのリストア)が可能になる。
$ sudo -u postgres pg_dump -Fc <db-name> > <dump-file-path>
pg_dump optionで説明したオプション(ただし、-c、-C オプション除く)を 指定してバックアップの内容を絞り込むことが可能である。ただし、 バックアップしたファイルの管理を考慮すると、 バックアップはオプションを 指定せずに行い、リストアするときにリストア内容を絞り込む方が良いだろう。
カスタム・フォーマットでデータベースをバックアップした場合は、pg_restore コマンドを使用してデータベースをリストアする。
データベースのリストア(pg_dump で -C オプションを指定しなかった場合) と同様な手順で、データベースを再作成(空のデータベースの作成)する。
データベースのリストア(pg_dump で -C オプションを指定しなかった場合) と同様な手順で、データベース・オーナーの設定をする。
pg_restore コマンドに -d オプションでリストアするデータベース名を指定 してデータベースをリストアする。
$ sudo -u postgres pg_restore -d <db-name> <dump-file-path>
pg_dump optionで説明したオプション(ただし、-c、-C オプション除く) を指定してリストアの内容を絞り込むことが可能である。
リストアの時間を短縮したい場合は、Speeding up restoring PostgreSQL の手順を参照のこと。
$ sudo -u postgres pg_restore -d <db-name> -s <dump-file-path>
データベースの制約条件(外部キー制約)などをリストアすると、レコードを 復元するテーブルの順番によってはエラーが発生するので、以下のように --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 オプションを指定するとデータベースを drop してからリストアするために、 「drop database」文を出力する。また --if-exists オプションも同時に指定 してデータベースが存在しない場合はデータベースの drop をしないように する。
データベース定義のみを出力する(テーブルのデータ以外を出力する)
テーブルのデータのみを出力する
以下のコマンドを実行して、pg_dumpall コマンドでバックアップした内容を リストアする。
$ sudo -u postgres psql < <dump-file-path>
上記のコマンドを実行すると、pg_dumpall コマンドでバックアップした データベースのユーザー及びデータベースのすべてがリストアされる。 リストアされるデータベース・ユーザーが既にデータベース・サーバーに存在する 場合は、エラーが出力されるがデータベースのリストアは行われるため、エラーは 気にしなくて良い。
pg_dumpall コマンドで -c オプションを指定しなかった場合は、リストアする データベースがデータベース・サーバーに既に存在するとリストアに失敗する。 この場合は、以下のコマンドを実行してデータベースを削除してから データベースをリストアすること。
$ sudo -u postgres psql -c "drop database <db-name>;"
なお、データベースのオーナーに設定するデータベース・ユーザーが データベース・サーバーに設定済であっても削除しなくても良い。
/var/lib/pgsql/data/postgresql.conf を vi 等で開き、「fsync = off」を設定 して、以下のコマンドによりPostgreSQLを再起動する。
# systemctl restart postgresql
/var/lib/pgsql/data/postgresql.conf を vi 等で開き、「fsync = off」の 設定をする前の状態に戻して、PostgreSQLを再起動する。
インストール手順
$ unar -o <作業ディレクトリ> はがき宛名書き.zip
上記のコマンドを実行すると、作業ディレクトリの下に「はがき宛名書き」 ディレクトリが作成され、その下に下記のファイルが作成される。
なお、ZIPファイルの中に日本語のファイル名のファイルが含まれているので 「unzip」コマンドで解凍するとファイル名が文字化けするので注意すること。
font installの「衡山毛筆フォント」の手順に従って 衡山毛筆フォントをインストールする。
LibreOffice Calcを開き、住所のセルを参照して以下のようにセル関数を 定義する。
| =JIS(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(住所セル参照,"0","〇"),"1","一"),"2","二"),"3","三"),"4","四"),"5","五"),"6","六"),"7","七"),"8","八"),"9","九"),"-","ー")) |
枠を使用すると、矩形領域と配置場所を指定することができる。Writerの テンプレートで枠を定義して住所を差し込み印刷するための手順は以下の通り。
| 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 |
# dnf install remmina
以下の手順を実行して、RDPの設定画面を開く。
「クライアントのキーボードマッピングを使用する」にチェックを付けないと、 キーボード右上の「\(|)」キーが無効になる。
キーボードレイアウトに「自動検出」を設定すると、RDP接続先の Windows ホスト で「漢字」キーによる日本語入力への切り替えができない。
この場合は、「漢字」キーによる日本語入力(ローマ字変換)が有効になるが、 キーボード右上の「\(|)」キーが無効になる。
「クライアントのキーボードマッピングを使用する」にチェックを付けると、 「漢字」キーで日本語入力に切り替えても日本語入力(ローマ字変換)が有効と ならず、英数字しか入力できない。
以下の手順を実行して、接続先ホストごとの設定画面を開く。
Windows ホストに RDP 接続した場合は、接続先の Windows の設定でディスプレイの 解像度が設定できないので、以下の設定をする。
以下のコマンドを実行して、xrdpをインストールする。なお、「tigervnc-server」 または「tigervnc-server-minimal」パッケージがインストールされていない場合は どちらかをインストールすること。
# dnf install xrdp xrdp-selinux
xrdp-selinuxパッケージが提供されるようになったことから、SELinuxの設定は 不要になったと思われる。
以下のコマンドを実行して、xrdp、及びxrdp-sesmanに"bin_t"のラベル付けをして 制限のあるドメインへの移行をしないようにする。
# chcon -t bin_t /usr/sbin/xrdp /usr/sbin/xrdp-sesman
「max_bpp=32」を「max_bpp=24」に変更して、色数を24に制限する。
「AllowRootLogin=true」を「AllowRootLogin=false」に変更して rootユーザーがRemote Desktop接続できないようにする。
以下のコマンドを実行して、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
Remote Desktop でログインすると、「login successful for display ##」と表示 された後に「VNC error - problem connecting」と表示される場合は、接続先の ホストのログイン・ユーザーのホームディレクトリの下に「.Xclients」ファイルが 存在するか確認する。もし存在しなければ、以下の手順を実行する。
| Desktop Environment | 記述内容 |
|---|---|
| xfce | startxfce4 |
| kde | startkde |
| lxde | startlxde |
| gnome | gnome-session |
| mate | mate-session |
| その他 | <Desktop Environmentの名前> |
以下のコマンドを実行して、rpm-buildパッケージをインストールする。
# dnf install rpm-build
RPMのビルドは、一般ユーザ(root権限を持たないユーザ)で実行するので、ビルドを 実行するユーザーでログインして以下のコマンドを実行して、作業用のディレクトリ を作成する。
$ mkdir -p ${HOME}/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}ソースコード及びSPECファイルがアーカイブされたファイルは、以下のコマンドを 実行して、バイナリパッケージ(rpmファイル)、及びソースパッケージ (src.rpmファイル)を生成する。
$ rpmbuild -ta <ファイルのパス>
~/rpmbuild/SRPM ディレクトリに移動して、以下のコマンドを実行する。
$ dnf download --source <パッケージ名>
以下のコマンドを実行して、SRPMからバイナリパッケージをビルドする。
$ rpmbuild --rebuild <SRPMファイル名>
つまり、ソースパッケージをインストールした後に準備、コンパイル、 インストールを行ってバイナリパッケージをビルドする。バイナリパッケージの ビルドが終わったら、SRPMより展開されたソース、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 packagespec file example
$ rpm --showrc
%define <name> <body>
名前が name のマクロを実行/変数の値の返却をする。マクロが定義されて いない場合はエラーとなる。
名前が name のマクロを実行/変数の値の返却をする。マクロが定義されて いない場合は何もしない。
ソースコードをコンパイル、インストールする前に、パッケージの情報や、 ビルドに必要な情報を定義する。
以下のコマンドを実行すると、コマンドやライブラリが依存している パッケージを表示することができる。
$ rpm -qf `ldd <ファイルのパス> | grep '=>' \ | sed -e 's/^.* => //g' -e 's/ \(.*\)$//g'` | sort -u
ソースコードのアーカイブファイルを解凍したり、パッチを適用したりする処理を 記述する。これらの処理は、%setup マクロ、%patch マクロにより実行する。
%setup マクロは、Sourceタグで指定したソースコードのアーカイブファイルを 解凍した後に、「ビルド・ディレクトリ」(コンパイルやインストールを 実行するディレクトリ)に移動する処理を実行するものである。
%patch マクロは、Patch タグで指定したパッチファイルを適用する処理を 実行するものである。
「make」コマンドに相当する処理を記述する。ビルド・ディレクトリに移動 した後に、%build section で記述した処理が実行される。
「make install」コマンドに相当する処理を記述する。ビルド・ディレクトリに 移動した後に、%install section で記述した処理が実行される。
make install DESTDIR=<インストール先ルートディレクトリ>
BuildRoot タグで指定したインストール先ルートディレクトリの下に配置された ファイルの中で、パッケージに含めるものを指定する。%files section では、 以下のマクロを使用するか、ファイルやディレクトリのパスを指定する。
ライセンスを説明したファイルを指定する。
指定したディレクトリのみ(配下にファイル、ディレクトリがない)を パッケージに含める。
file-path をパッケージに含め、これが設定ファイルであることを示す。 パッケージをアップデートを実行した際、file-path のファイルが編集 されていたら、元のファイルは末尾に「.rpmsave」を付けた名前に変更して からパッケージのファイルを配置する。
%config(noreplace) file-path を指定すると、パッケージのアップデート を実行した際、file-path のファイルが編集されていたら、元のファイル名 は変更せずに、パッケージからインストールされるファイルのファイル名の 末尾に「.rpmnew」を付けて配置する。
ファイルやディレクトリの指定について
ビルド・ディレクトリを削除する処理を記述する。例のように、ビルド・ ディレクトリを削除するスクリプトを記述すのが一般的である。
パッケージがインストール/更新された後に実行する処理を記述する。 パッケージが shared library をインストールした場合は、例のように ldconfig コマンドを実行する処理を記述する。
パッケージが削除された後に実行する処理を記述する。パッケージが shared library を削除した場合は、例のように ldconfig コマンドを実行する処理を 記述する。
パッケージの改訂履歴を記述する。
分岐する条件が成立する場合の処理、成立しない場合の処理を次の書式で記述 することができる。
%if <条件> <条件が成立する場合の処理> %else <条件が成立しない場合の処理> %endif
条件は、条件式または 0か0意外の数値で指定する。 条件式は以下の形式で指定する。
値1 と 値2 が等しい
値1 と 値2 が異なる
数値1 が 数値2 より大きい
数値1 が 数値2 より小さい
数値の場合は、0以外の場合は真、0の場合は偽となる。
dist タグの設定内容や、ディストリビューションに関連するタグについては、 下記の参考文献を参照のこと。
解決方法
以下のコマンドを実行して、Fedora用のRPM Fusionのリポジトリを有効にする。
# dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
OSユーザーへのメール通知を行う場合は、メール送信に必要なパッケージを事前に インストールしておく必要がある。パッケージのインストール手順は以下のとおり。
以下のコマンドを実行して、s-nail、sendmail パッケージをインストールする。
# dnf install s-nail sendmail
# systemctl enable --now sendmail
これらのパッケージをインストールすれば、特にインストールしたパッケージの設定 なしで mailx コマンドで OSユーザーにメッセージを送信したり、OSユーザーが メッセージを確認したりできる。
既定の設定では、sendmail はローカルコンピューター以外のホストからの接続を 受け付けない。つまり、ローカルのメールクライアント(mailx)からの接続しか 受け付けない設定となっている。
参考文献「Solaris ユーザーズガイド (上級編) > 第 7 章 メールの使い方 > mailx の基本」を参照のこと。
DAC(任意アクセス制御:ファイルのアクセス権による制御)が行われた後に適用され、 プロセスが事前に許可されたオブジェクト(ファイル、ディレクトリ、デバイスなど) にしかアクセスできないようにする仕組みを提供する。SELinuxが有効な場合は、 アクセスが許可されていないプロセスとオブジェクトの組み合わせはエラーとなる。
プロセスに対して割り当てられたラベル。プロセスとドメインの関連付けは、 「ドメイン遷移」によって決定される。
オブジェクト(ファイル、ディレクトリ、デバイスなど)に割り当てられた ラベル。
オブジェクトの種類。ファイル、ディレクトリ、ソケットなどの種類を識別する。
SELinuxのアクセス制御の定義。ドメインがアクセス可能なタイプとクラスに対する 権限を定義する。言い換えると、プロセスがアクセス可能なファイル/ ディレクトリとそれに対する操作(読み書き、実行など)を定義したものである。
プロセスのドメインは起動元のプロセスのドメインを引き継ぐが、起動元の プロセスのドメインと起動したコマンド(のファイルに設定されたラベル)を 指定して、起動後のプロセスのドメインを定義することができる。カーネルの ドメイン(kernel_t)からドメイン遷移を定義することにより個々の実行ファイル が実行されたときのプロセスのドメインを決定することができる。
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 ... のロールに関連づけられていない場合は、ロール 遷移が有効にならないので注意が必要である。
システム起動時に、apacheユーザー(Linuxユーザー)で起動されたhttpdプロセスが、 /var/www/html ディレクトリ配下のコンテンツにアクセスできるようにするために、 SELinuxのポリシー(TE及びRMACの設定)がどのように設定されているかを説明 する。
以下の関連付けを行うことで、apacheユーザー(Linuxユーザー)とhttpdの ドメイン(httpd_t)を関連付けて、apacheユーザーで起動された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モジュール |
httpd-filesystemパッケージのインストール時に、/var/www/html ディレクトリに「httpd_sys_content_t」のラベルが付与されている。従って、 この配下に作成されたディレクトリ、ファイルは明示的にラベルをつけない 限り、「httpd_sys_content_t」ラベルが付与されることになる。
| 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の設定 | 定義の場所 | |
| 1 | __default__:unconfined_u:s0-s0:c0.c1023 | /etc/selinux/targeted/seusers |
/etc/selinux/targeted/seusers ファイルの設定により、apache Linuxユーザー はunconfined_u SELinuxユーザーに関連付けられている。
| RBACの設定 | 定義の場所 | |
| 1 | user unconfined_u roles { system_r unconfined_r } | unconfineduserモジュール |
unconfined_u Linuxユーザーは、system_r、unconfined_r の2つのロールに 関連付けられている。
| 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によりアクセスが許可 されたことになる。
RBACによるアクセス制御は行わない。
#dnf install checkpolicy policycoreutils
# ausearch -c \<コマンド名\> | audit2allow -a
[コマンドを指定してポリシーを確認するコマンドの例]
TEファイルにSELinux policyの定義を記述する。
「checkmodule -m -o <モジュールファイル名> <TEファイル名>」 コマンドを実行して、モジュール・ファイルを作成する。
「semodule_package -o <パッケージファイル名> -m <モジュールファイル名>」 コマンドを実行して、パッケージファイルを作成する。
root権限で「semodule -i <パッケージファイル名>」コマンドを実行して パッケージをインストールする。
SELinuxが原因でkernel panicが発生してシステムが起動できなくなった場合は、 以下の手順でSELinuxを一時的に無効にしてシステムを起動することができる。
SELinuxを無効化してシステムを起動した後、通常の手順でシステムを再起動 (SELinuxが有効な状態)すると、ファイル、ディレクトリのラベル付けがやり 直されてしまうため、「chcon」コマンドで設定したラベルの設定が失われて しまうので注意すること。
SELinuxが有効な状態では、以下のコマンドでモードの確認と変更をすることが できる。
以下のコマンドを実行すると、SELinuxのモードを確認することができる。
$ getenforce
以下のコマンドを実行すると、SELinuxのモードを変更することができる。
# setenforce {0|1}/etc/selinux/config ファイルを編集して、SELinuxのモード及び状態を設定する。 システムを再起動すると、設定が有効になる。
SELINUX=enforcing SELINUXTYPE=targeted
SELINUX=permissive SELINUXTYPE=targeted
SELINUX=disabled SELINUXTYPE=targeted
「SELINUXTYPE=mls」とすると、Multi Level Security protectionとなり、 大変強力なアクセス制御を行うことができるが、素人では設定の手が負えない ので、設定は「SELINUXTYPE=targeted」のままとしておく。
# dnf install setools-console
以下のコマンドを実行すると、allowルールを表示する。
$ sesearch --allow [{-ds|-rs} -s <source_type>] [{-dt|-rt} -t <target_type>] \
[-c <object_class>] [-b <boolean_name>]$ sesearch --allow -rs -s 'httpd.*_t' -dt -t httpd_sys_rw_content_t -c file
ラベルが「httpd.*_t」にマッチするプロセスが、「httpd_sys_rw_content_t」 にラベル付けされたファイルに許可されているルールを表示する。
以下のコマンドを実行すると、ドメイン遷移の設定が表示される。
$ sesearch -T [[{-ds|-rs}] -s <source_type>] [[{-dt|-rt}] -t <target_type>] \
[-c <object_class]以下のコマンドを実行すると、ロールのallowルールを表示する。
$ sesearch --role_allow [[{-ds|-rs}] -s <source_role>] [[{-ds|-rs}] <target_role>「alow <source_role> <target_role>」で設定されるルールは、 <source_role>のプロセスのロールを<target_role>のロールに切り替え 可能であるという意味である。
以下のコマンドを実行すると、ロール遷移の設定を表示する。
$ sesearch --role_trans [[{-ds|-rs}] -s <source_role>] [[{-ds|-rs}] <target_type> \
[-c <object_class>]bool値の値を表示する。
クラス(ファイル、ディレクトリなど)の権限を表示する。
タイプ名で指定されたドメイン、またはタイプを含むattributeを表示する。
ロールに関連付けられたドメインを表示する。
SELinuxユーザーに関連付けられたロールを表示する。
ポリシーの管理(SELinuxのラベルの設定、削除)は、semanage コマンドで行う。
# dnf install policycoreutils-python-utils
ファイル、ディレクトリに対してラベルを設定するためのコマンドを以下に示す。
chconコマンドはポリシー管理ツールではないが、これを使用して一時的に ファイルまたはディレクトリにラベルを付与することができる。
# chcon [-R] [-h] -t <ラベル> <ファイル or ディレクトリ>
[/var/www/htmlディレクトリに再帰的にラベルを設定する例]
# chcon -R -h -t httpd_sys_content_t /var/www/html
semanage fcontext コマンドを使用して、ファイルまたはラベルにタグを設定する ことができる。
# semanage fcontext -a -t <ラベル> "<ファイルまたはディレクトリの正規表現>"
# semanage fcontext -a -t httpd_sys_content_t "/var/www/html/index.html"
# semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
以下のコマンドを実行して、設定したラベルを有効にする。
# restorecon [-R] -v <ファイルまたはディレクトリ>
以下のコマンドを実行すると、オブジェクト(ファイル、ディレクトリなど) へのラベル設定の定義の全てを出力する。
# semanage fcontext -l [-C]
ラベル設定の定義の際に実行したコマンド「semanage fcontext -a ...」の 「-a」を「-d」に変えてコマンドを実行する。
# semanage fcontext -d -t httpd_sys_content_t "/var/www/html(/.*)?"
[ラベル定義削除のコマンドの例]
「semanage fcontext -l -C」コマンドの結果をgrepで絞り込むなどして、 削除対象(ファイルまたはディレクトリの正規表現)を確認する。
以下のコマンドを実行して、ラベル定義の削除を有効にする。
# restorecon [-R] -v <ファイルまたはディレクトリ>
SELinuxの設定は、モジュールを作成してTEの設定を行うことが基本だが、bool値の on/offを設定することにより、簡単にSELinuxのポリシーを設定することが可能で ある。
以下のコマンドを実行すると、SELinuxのbool値の名前、設定値(オン/オフ)、 デフォルト値、bool値の説明が一覧表示される。
# semanage boolean -l
$ sesearch -A -b <bool値の名前>
以下のコマンドを実行して、bool値のオン/オフを設定する。
# setsebool -P <bool値の名前> {on|off}# sesetbool -P httpd_unified on
上記のコマンドを実行すると、httpd_t ドメインが httpd_sys_content_t タイプのディレクトリ、ファイルに対して、実行、読み込み、書き込みの操作を 可能にする。offの状態だと、httpd_t ドメインは、httpd_sys_content_t タイプのディレクトリ、ファイルに対して読み取り操作しかできない。
ドメイン(プロセスに割り当てられたラベル)に関連付けられたポート番号の 設定は、semanage port コマンドで行う。
# semanage port -l
# semanage port -a -t <ポートのタイプ> -p {tcp|udp} <ポート番号>Apache httpdのlistenポートに8080を追加するためのコマンドは以下のとおり。
# semanage port -a -t http_port_t -p tcp 8088
# semanage port -d -t <ポートのタイプ> -p {tcp|udp} <ポート番号>Apache httpdのlistenポートから8088を削除するためのコマンドは以下の とおり。
# semanage port -d -t http_port_t -p tcp 8088
エラーの原因となったコマンドと、開始日時を指定して、audit daemon logを検索 する場合は、以下のコマンドを実行する。
# ausearch -c <コマンド> -ts MM/DD/YY
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 <モジュール名>
# semodule --list=full
モジュール名を絞りたい場合は、パイプラインで「grep」を実行するなどする。
以下の書式で、ドメイン名(プロセスのラベル)、タイプ名(ディレクトリ・ ファイルのラベル)を指定して、プロセスがクラス(ディレクトリ・ファイル)に 対して許可する操作を定義する。
module <モジュール名> <バージョン>;
# 定義済のドメイン、タイプ、クラス
require {
type <ドメイン名>;
type <タイプ名>;
class <クラス名> {<操作> ...};
}
# このモジュールで定義されたドメイン、タイプ
type <ドメイン名>;
type <タイプ名>;
# プロセスがオブジェクトにアクセスを許可する設定
allow <ドメイン名> <タイプ名> : <クラス名> {<操作> ...};
...[モジュールの定義の書式]
例:「allow {httpd_t httpd_sys_script_t} git_sys_content_t : dir {read write ...}」
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 };
...[モジュール定義の例]
以下のコマンドを実行して、<モジュール名>.te ファイルから <モジュール名>.mod ファイルを生成する。
$ checkmodule -m -o <モジュール名>.mod <モジュール名>.te
以下のコマンドを実行して、<モジュール名>.mod ファイルから <モジュール名>.pp ファイルを生成する。
$ semodule_package -o <モジュール名>.pp -m <モジュール名>.mod
以下のコマンドを実行して、<モジュール名>.pp ファイルをインストールする。
# semodule [-X <優先度>] -i <モジュール名>.pp
/var/lib/selinux/targeted/active/modules/<優先度> ディレクトリの下に モジュール名のディレクトリが作成され、その下にモジュールがインストール される。
# semodule {-d|-e} <モジュール名>有効化は-eオプション、無効化は-dオプションを指定する。<モジュール名>は、 モジュール一覧の表示で表示される名前を指定する。
以下のコマンドを実行して、モジュールのパッケージ(ppファイル)をダウンロード する。
# semodule -E <モジュール名>
$ 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): 「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}」と同等である。
root権限で「semanage login -l」コマンドを実行して、Linuxユーザーがどの SELinuxユーザーに関連付けされているかを確認する。
root権限で 「sudo semanage login -a -s <SELinuxユーザー名> <Linuxユーザー名>」 コマンドを実行して、SELinuxユーザーをLinuxユーザーに関連付ける。既に 関連付けられたLinuxユーザーを変更する場合は、root権限で 「semanage login -m -s <SELinuxユーザー> <Linuxユーザー>」コマンドを 実行する。
LinuxユーザーとSELinuxユーザーの関連付けは、1対1であることに注意する こと。
root権限で「semanage user -l」コマンドを実行して、Linuxユーザーがどの ロールに関連付けられているかを確認する。
root権限で「semanage user -m -R "<ロール名> ..." <Linuxユーザー名>」 コマンドを実行して、Linuxユーザーとロールを関連付ける。
# semanage user -m -R "system_r unconfined_r staff_r" staff_u
[staff_u Linuxユーザーにロールを割り当てる例]
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の定義ファイルに以下の書式で定義して、モジュールをインストールする。
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;[ロール設定の例]
RPM Fusion Repositoryが設定されていること。
以下のコマンドを実行して、shotcut パッケージをインストールする。
# dnf install shotcut
DVD-Video用の動画を作成する手順は以下のとおり。
上記で Vedeo Trackに追加したビデオの音声とは別の音声を使用する場合は、 以下の手順で Audio Track を追加する。
以下の手順は、BDレコーダーで再生するための動画(高画質)をエクスポートするための 手順である。
FormatにDVDを選択した場合は、「Video」タブの「Resolution」のみを設定 すれば良い。
/usr/bin/mlt-melt のシンボリックリンクを /usr/bin/qmelt に付ける。
# ln -s /usr/bin/mlt-melt /usr/bin/qmelt
| 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 |
以下コマンドを実行して、デバイス(/dev/hda など)に対して、回数を指定して ランダム書き込みを行った後、zeroを上書きしてデータを消去する。
# shred [-f] [-n <ランダム書込回数>] [-z] {<デバイス>|{ファイルパス}ファイルの書き込みが可能になるようにアクセス権を変更する。
ランダムなデータの書き込みを繰り返す回数を指定する。このオプションを省略 すると、書き込み回数に3を指定したことになる。
ランダムなデータを書き込んだ後に、0 で上書きする。
ランダムデータを書き込んだ後に、書き込み対象のファイルを削除する。 このオプションを指定する場合は、書き込み対象にファイルパスを指定すること。
例えば、/dev/hda に対してランダムデータを3回書き込みした後、0を上書きする には以下のコマンドを実行する。
# shred -n 3 -z /dev/hda
/foo/bar ファイルが書き込み可能になるようにアクセス権を設定してランダム データを4回書き込んだ後に0を上書きして、その後にファイルを削除する場合は 以下のコマンドを実行する。
# shred -f -n 4 -z -u /foo/bar
https://slack.com/downloads より「RPM アプリをダウンロードする」の リンクをクリックして「slack-x.x.x-x.x.el8.x86_64.rpm」をダウンロードする。
RPMファイルをダウンロードしたディレクトリに移動して、以下のコマンドを 実行し、slcak パッケージをインストールする。
# dnf install ./slack-x.x.x-x.x.el8.x86_64.rpm
⇒「招待せずにスキップしますか?」のメッセージダイアログが表示される ので、「ステップをスキップ」をクリックする
「Message notification app」などのアプリの名前を入力する。
連携するワークスペースを選択する。
「Add an OAuth scope」ボタンをクリックして、Web API に必要な権限を 選択する。
| 無制限のメッセージとファイルの履歴 | 過去 90 日限定 |
| チャンネルにおける外部の人との連携 | 1 対 1 のダイレクトメッセージのみ |
| 音声や動画によるグループハドル ミーティング | 1 対 1 のみ |
| 無制限の canvas によるナレッジ共有 | チャンネル canvas のみ |
| 音声クリップと動画クリップ | OK |
| 無制限のアプリと自動化 | 10 件まで |
| サイドバーの整理のカスタマイズ | NG |
以下のコマンドを実行して、soxパッケージをインストールする。
# dnf install sox
$ sox <in-file-1> <in-file-2> ... <out-file>
$ sox <in-file> -r <サンプルレート> <out-file>
default (high) quality resampling; overrides: steep filter, allow aliasing
$ sox <in-file> -b 16 <out-file> rate -s -a 44100 dither -s
very high quality resampling; overrides: intermediate phase, band-width 90%
$ sox <in-file> -b 24 <out-file> rate -v -I -b 90 <サンプルレート>
$ 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>
$ sox <in-file> <out-file> trim <start-position> =<end-position>
フェードインの長さ(秒)、フェードアウト開始位置(秒)、フェードアウトの長さ (秒)を指定して、フェードイン、フェードアウトする。
$ sox <in-file> <out-file> fade <fadein-length> <stop-position> <fadeout-length>
$ 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
ログインユーザー(<user>)、接続先のホスト名またはIPアドレス(<hostname>)を 指定して、リモートのホストにログインする。
$ ssh [<user>@]<hostname>
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> --------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で待ち受けているリクエストを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」を設定すること。
sshでリモートのホストにログインする場合は、指定されたユーザー(省略時は ローカルのユーザと同じ名前のユーザー)のパスワードの入力が強制される。以下の 手順で公開鍵/非公開鍵を作成を作成し、公開鍵をリモートのホストにコピーする ことによって、リモートのホストにログインする際にパスワードが不要になる。
以下のコマンドを実行して、RSAの公開鍵/非公開鍵を作成する。
$ ssh-keygen [-b <bits>]
-b オプションはキーのビット数(1028、2048、4098などを指定する。 -b オプションを省略すると2048ビットのキーが作成される。ssh-keygen コマンドを 実行すると、以下の入力を求められる。
非公開鍵の保存場所(ファイル名)を入力する。 デフォルト(空白のままenterキーを押す)では、~/.ssh/id_rsa に非公開鍵が、 ~/.ssh/id_rsa.pub に公開鍵が保存される
公開鍵/非公開鍵を使用するときに要求される passphrase を入力する。空白の ままenterキーを押すと passphrase なしで公開鍵/非公開鍵が作成される。 cron などでシステム起動時に自動的にsshを実行する場合は passphrase なし (空白のままenterキーを押す)とすること。
passphrase を作成した場合は、リモートのホストにパスワードなしでログイン するために、非公開鍵を keychain manager で管理する必要があるが、システム 起動後最初にログインするときに passpharse の入力が必要となるため、cron 等 による ssh の自動実行の用途には適さない。
以下のコマンドを実行して、RSAの公開鍵をリモートのホストにコピーする。
$ ssh-copy-id -i ~/.ssh/id_rsa.pub <user>@<remote-host>
ssh の認証を public key authentication に限定し、パスワード認証を無効に したい場合は、/etc/ssh/sshd_config ファイルを以下のように設定すること。
PasswordAuthentication no
$ cat /proc/swaps
Fedora 33からswap領域はOS起動時に /usr/lib/systemd/zram-generator.conf の 設定に従い、ZRAMに作成れることになった。
[zram0] zram-fraction = 1.0 max-zram-size = 8192
[zram-generator.conf の設定例]
利用可能な RAM サイズの何倍までを zram のデバイスに割当可能かを設定する。
zram のデバイスのサイズの上限値を MiB 単位で指定する。
以下の手順で、システム起動時に zram swap を有効にするように構成する。
以下の行を追加する。
zram
以下の行を追加する。
options zram num_devices=1
swap 領域の設定を削除する。
/dev/mapper/cl-swap swap swap defaults 0 0
[削除対象の例]
[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
[設定例]
以下のコマンドを実行してzram サービスを有効化(起動時に実行)する。 --now オプションを指定すると、有効化とサービスの起動をする。
# systemctl enable [--now] zram.service
swap 領域の LV (Logical Volume) が作成されていること。LVの作成、拡張、縮小 については、LVM を参照のこと。
Logical Group Name: cl、Logical Volume Name: swap で swap 用の Logical Volume が作成されている場合に、これを swap 領域としてOSに認識させる 手順は以下のとおりである。
/dev/mapper/<Logical Group name>-<Logical Volume name> を指定して フォーマットする。
# mkswap /dev/mapper/cl-swap
/dev/mapper/<Logical Group name>-<Logical Volume name> を swap 領域 として /etc/fstab ファイルに追加する。
/dev/mapper/cl-swap swap swap defaults 0 0
# systemctl daemon-reload
/dev/mapper/<Logical Group name>-<Logical Volume name> を指定して swapon コマンドを実行する。
# swapon [-v] /dev/mapper/cl-swap
既に作成済みの swap 領域 /cev/mapper/cl-swap (Logical Group name: cl、 Logical Volume name: swap のブロックデバイス) のファイルシステムのサイズ 変更を OS に認識させる手順は以下のとおりである。
# swapoff [-v] /dev/mapper/cl-swap
lvectend / lvreduce コマンドを実行して、swap 領域の Logical Volume を 拡大/縮小する。Logical Volume の拡大/縮小手順は、LVM を参照のこと。
# mkswap /dev/mapper/cl-swap
# swapon [-v] /dev/mapper/cl-swap
以下のコマンドを実行して、指定された サイズの swap ファイルを作成する。
# dd if=/dev/zero of=<swap-file-path> bs=1024 count=<swap-size(K)>
# mkswap <swap-file-path>
# chmod 0600 <swap-file-path>
以下の行を /etc/fstab ファイルに追加する。
<swap-file-path> swap swap defaults 0 0
# systemctl daemon-reload
# swapon [-v] <swap-file-path>
既に swap ファイルとして稼働している swap ファイルのサイズを変更する手順は 以下のとおりである。
# swapoff [v] <swap-file-path>
# dd if=/dev/zero of=<swap-file-path> bs=1024 count=<swap-size(K)>
# mkswap <swap-file-path>
# swapon [-v] <swap-file-path>
以下のコマンドを実行して、ユーザーの補助グループに「wheel」を追加することにより 指定したユーザーが全てのユーザー権限ですべてのコマンドを実行できるようにする。
# usermod -aG wheel <ユーザー名>
既定値では、「%wheel ALL=(ALL) ALL」の設定により wheel グループのユーザーは、 すべてのユーザー権限で全てのコマンドが実行できるようになっている。
root権限のユーザーでvisudoコマンドを実行して、以下の内容を設定する。
上記の例では、ユーザーに全ての実行権限を許可(全てのユーザーまたはグループ の実行権限で、全てのコマンドを実行可能)ているが、以下の書式によりユーザー ごとに実行ユーザーやグループを制限したり、コマンドを制限したりすることも 可能である。
<ユーザー名> <ホスト名> = (<実行ユーザー名> : <実行グループ名>) <コマンド> [, <コマンド> ...]
scott ユーザーがsudoコマンドを実行して、rootユーザーの権限で dnf、rpm コマンドを実行できるようにするためには、visudo コマンドを使用して以下のように 設定する。
scott ALL = (root) /usr/bin/dnf, /usr/bin/rpm
TLPは「電池寿命を最適化する設定が初めから付いており、インストールだけすれば あとはもう忘れてかまいません。」との触れ込みの電源管理パッケージである。
以下のコマンドを実行して、TLPをインストールする。
# dnf install tlp
以下のコマンドを実行して、tlp.service と tlp-sleep.service を有効化する。
# systemctl enable tlp.service tlp-sleep.service
以下のコマンドを実行して、systemd-rfkill.service を無効化する。
# systemctl disable systemd-rfkill.service
システムを再起動するか、以下のコマンドを実行する。
# systemctl stop systemd-rfkill.service # tlp start
⇒ dconf-editorで電源管理の設定をする
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ファイルは、以下の3つのセクションで構成される。下記セクションで設定する 内容は、「参考」に示したドキュメントを参照すること。
サービス(ユニット)の説明、ユニットをアクティブにする(サービスを起動する) 場合の他のユニットとの依存関係(一緒にサービスを開始するかどうか)を定義 する。
サービスの起動、終了コマンドを定義する。
systemctl enable (or disable) コマンドで使用される情報を定義する。有効化、 無効化する場合の依存関係を設定する。
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
Unitのラベル名を設定する
このUnitが起動するときに一緒に起動すべきUnitを指定する。このUnitが起動 するとこのプロパティで指定されたUnitファイル名のUnitも一緒に起動される。 この設定は「After=」で設定されるUnitの起動順序とは独立した設定である (つまりサービスの起動順序を定義するものではない)。
以下の場合は、このUnitは起動しない。
このプロパティで指定されたUnitのどれか1つでも起動していない場合は、この Unitは起動しない。
「Requires=」と同様であるが、一緒に起動しようとしたUnitの起動に失敗 したり、Unitが停止しても、このUnitは停止することなく起動または実行した ままとなる。Unitの依存関係を定義する場合は、このプロパティを設定する ことが推奨されている。
このUnitの起動が完了してから、このプロパティで指定されたUnit(ただし 起動が有効となっているものだけ)が起動する。
このプロパティで指定されたUnitが起動するように設定されている場合は、 それらのUnitの起動が完了してからこのUnitを起動する。
Typeプロパティを指定しな場合の既定値。main service process (このプロセスでExecStart=で指定したコマンドはそこで実行される) をfork した後にUnitが開始する。「systemctl start」コマンドでこのUnitを起動した 場合、ExecStartプロパティで指定したコマンドの実行が失敗しても、Unitの 起動結果は正常と判断されることに注意すること。
main service processの(ExecStart=で指定した)コマンドが実行された後に Unitが開始する。「systemctl start」コマンドでこのUnitを起動した場合、 ExecStartプロパティで指定したコマンドの実行が失敗した場合は、Unitの 起動結果はエラーとなる。
ExecStartプロパティで指定したコマンドは、fork された子プロセスで実行 される。Unitは、ExecStartプロパティのコマンドをforkした親プロセスが 終了した後に開始する。これは伝統的なUnixサービスの起動方法である。
Type=simpleの場合と似ているが、main service processが終了した後にUnitが 開始する。このTypeは「RemainAfterExit=」を使用する場合に有効である。 このTypeは、「Type=」、「ExecStart=」の両方共に設定されていない場合の 既定値である。
サービス開始時に実行するコマンド(引数の指定も可能)を指定する。 コマンドの記述は、コンソールからコマンドを実行するときと同様である。
コマンドは1つだけ指定する。
セミコロンで区切るか、「ExecStart=」を複数設定することで複数の コマンドを指定できる。複数のコマンドを実行した場合は、指定した順番に 順次コマンドを実行するが、実行したコマンドの実行結果が失敗(fail)の 場合は後続のコマンドは実行されない。。
サービス開始時に、「ExecStart=」で指定したコマンドを実行する前に実行する コマンドを指定する。コマンドの指定方法は「ExecStart=」と同様である。 「ExecStart=」と異なり、「Type=」の設定に関係なく複数のコマンドを指定 することが可能である。
サービス開始時に「ExecStart=」で指定したコマンドを実行した後に実行する コマンドが実行れることを除き、「ExecStartPre=」と同様である。
「ExecStart=」で開始したサービスを停止するためのコマンドを指定する。 コマンドの指定方法及び複数のコマンドの実行については「ExecStart=」と 同様である。
サービスを停止した後(即ち「ExecStop=」で指定したコマンドを実行した後) に実行するコマンドを指定する。コマンドの指定方法及び複数のコマンドの 実行については「ExecStart=」と同様である。
このプロパティは、サービス開始、または停止に失敗した場合にクリーンアップ する用途を想定している。このプロパティで指定したコマンドの実行結果は、 サービスの結果コード及びサービスのメインプロセスの終了コードに反映 される。
サービスがリロードするときのコマンドを指定する。コマンドの指定方法及び 複数のコマンドの実行については「ExecStart=」と同様である。ここで指定する コマンドはリロードのトリガーを実行するだけでなく、同期的にリロードの終了を 待つものにしなければいけない。
サービス・デーモンが起動完了を通知するまでに待つ時間を指定する。指定時間 内に通知が無かった場合は、サービス・デーモンはエラーとなりshut down される。
プロパティの設定は、以下の書式で行う。
単位を付けずに、数値で「秒」を指定する。
「<minutes>min <seconds>s」の形式で指定する(例:5min 20s)。
タイムアウトしない。
/etc/systemd/system.conf の「DefaultTimeoutStartSec=」を設定することで このプロパティの既定値を変更できる(Type=onshotの場合は既定値では無効に なることを除いて)。
「TimeoutStartSec=」と同じ書式でタイムアウトの時間を設定する。ここで 指定したタイムアウトの時間は、以下のように適用される。
/etc/systemd/system.conf の「DefaultTimeoutStopSec=」を設定することで このプロパティの既定値を変更できる
このプロパティを指定すると、「TimeoutStartSec=」と「TimeoutStopSec=」の 両方を指定したことになる。/etc/systemd/system.conf ファイルで規定値の 設定をすることはできない。
Service セクションの「ExecStop」オプションで指定したコマンドが0以外の ステータスを返すと、systemdにより終了されたサービスのステータスはエラーと なってしまう。0以外のステータスを返した場合でもサービス終了時のステータス を正常としたい場合は、このオプションに正常と見做す exit code または termimination signal name を指定する。
SuccessExitStatus=1 2 8 SIGKILL
環境変数を設定する。"env-name1=var1" "env-name2=var2" の形式で1行に 複数の環境変数を設定することも、Environment= を複数回定義することも可能 である。
環境変数を定義したファイルのパスを指定する。
CPUQuota=30% IOSchedulingPriority = 7 CPUSchedulingPolicy = 5 MemoryLimit=256M Nice = 19
プロセスのCPU利用率の上限値をパーセントで設定する。
0 (優先度最高) 〜 7 (優先度最低) の範囲で プロセスの I/O スケジュールの 優先度を設定する。
1 (優先度最低) 〜 99 (優先度最高) の範囲で プロセスの CPU スケジュールの 優先度を設定する。
プロセスが使用するメモリの上限値を設定する。単位としてK, M, G, T を指定 可能である。
プロセスのスケジュール優先度の既定値を -20 (優先度最高) 〜 19 (優先度最低) の範囲で設定する。
Unit名の別名を指定する。コンマで区切って複数の別名を指定することが可能。 このプロパティを設定すると、「systemctl enable」コマンドはシンボリック リンクを作成して、他の systemctl コマンドでUnit名の代わりに別名を使用する ことができるようになる。
このUnitの実行が必要であるUnitを指定する。このプロパティで指定したUnitの 何れか1つが起動したときに、このUnitも起動される。このプロパティは、 「Requires=」の逆の設定を意味するもので、foo.serviceのUnitファイルで 「Required=bar.service」と指定したものと、var.serviceのUnitファイルで 「Requires=foo.service」と指定したものと同じ意味になる。
複数のUnitを指定する場合は、スペースで区切って指定する他に、プロパティを 複数回指定することも可能である。
「RequiredBy=」と同様な設定であるが、「Requires=」の逆の設定を意味意味して いる。つまり、「RequiredBy=」と異なりこのUnitの起動に失敗したり、このUnit が停止したりしても、プロパティで指定したUnitの起動や実行には影響がない。
「systemctl enable」、「systemctl disable」コマンドを実行したときに、この Unitと一緒に enable / disable するUnitを指定する。
この設定は、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-name.timer ファイルを設定すると、そこで定義された起動タイミングで unit-name.service が起動(「systemctl start unit-nname.service」が実行) される。
サービスと同様の設定をする。
サービス起動のスケジュールや、タイマーから起動されるサービスの設定など。
サービスと同様の設定をする。
タイマーの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
OnCalender オプションでサービスを起動するスケジュールを設定する。
以下の設定をすると、指定した単位の最初(hourlyの場合は毎時0分)に サービスを起動する。
OnCalender={hourly|daily|weekly|monthly|yearly}以下の形式で設定すると、指定した年月日時分秒にサービスを起動する。
OnCalender=[<曜日の指定>] <年>-<月>-<日> <時>:<分>:<秒>
<from>..<to>
日 を「*」、または範囲指定すると、曜日の指定 をすることで指定した 曜日にサービスを起動することができる。曜日の指定は、Mon, Tue, Wed, Thu, Fri, Sat, Sun を使用する。
<曜日>,<曜日>,...
<曜日>..<曜日>
以下のように RandomizedDelaySec オプションを設定すると、スケジュールで 指定した時刻より遅延秒数までの間でランダムにサービスを起動することが できる。
RandomizedDelaySec=<遅延秒数>
遅延秒数 には秒数の他に、year、month、week、day、hour、min、sec といった 単位を指定することも可能である。
「Persistent=true」を設定すると、前回実行予定時刻からタイマーが起動する までの間にサービスが起動されてなかった場合は次回の実行予定時刻をまたずに サービスを起動する。このオプションは OnCalender オプションが設定された 場合に有効で、既定値は false である。
以下の設定で、unit-name にサービスのユニット名(.service を指定しない) を指定すると、このタイマーが起動するサービスを指定できる。
Unit=<unit-name>
既定の設定(このオプションを設定しない場合)は、タイマーのユニット名 (Unitファイルから拡張子「.timer」を除いたもの」のサービスがこのタイマー より起動される。
パッケージから提供されるUnitファイル(unit-name.service、unit-name.timer) は、これを変更してもパッケージが更新されると上書きされてしまう。それを避ける ためには、以下の手順でUhitファイルの設定を変更する。
/etc/systemd/system ディレクトリの下に「service-name.service.d」 (サービスの設定を変更する場合)、または「service-name.timer.d」(タイマーの 設定を変更する場合)ディレクトリを作成する。そして、そのディレクトリの下に 拡張子が「.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
[/etc/systemd/system/logrotate.timer.d/override.conf]
[Timer] OnCalendar=hourly RandomizedDelaySec=5min
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 を押して現在の選択 [+] を保持するか、選択番号を入力します:# lsmod | grep uvcvideo
uvcvideo kernel モジュールが表示されている場合は、Video Cameraが有効である。
# modprobe -r uvcvideo
uvcvideo kernel モジュールを削除して、Video Cameraを無効にする。
# modprobe uvcvideo
uvcvideo kernel モジュールを追加して、Video Cameraを有効にする。
uvcvideo kernel モジュールを削除しても、システム起動時にモジュールが読み 込まれてしまうので、システム起動直後は Video Camera が有効化されてしまう。 システム起動時に Video Camera を無効な状態にするためには、 /usr/lib/modprobe.d/dist-blacklist.conf ファイルに以下の行を追加する。
blacklist uvcvideo
RPM Fusion Repository を設定して、以下の コマンドにより VirtualBox をインストールする。
$ sudo dnf install VirtualBox
以下のコマンドを実行して、原罪のユーザー(VirtualBoxを実行するユーザー) を vboxusers グループに追加する。
$ sudo usermod -aG vboxusers $USER
RPM Fusion の VirtualBox がインストールされている場合は、以下のコマンド を実行して、VirtualBox のパッケージを削除する。
$ sudo dnf remove VirtualBox VirtualBox-server
https://www.virtualbox.org/wiki/Linux_Downloadsにアクセスして、 「Fedora」のリンクから RPM パッケージをダウンロードして以下のコマンド によりパッケージをインストールする。
$ sudo dnf install ./VirtualBox-<virsion>_fedora<release>-1.x86_64.rpm
以下のコマンドを実行して、原罪のユーザー(VirtualBoxを実行するユーザー) を vboxusers グループに追加する。
$ sudo usermod -aG vboxusers $USER
以下のコマンドを実行して、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
VirtualBoxをインストールした場合は 、以下のコマンドを実行して VirtualBox 用のカーネル・モジュールをビルドする。カーネルをアップグレードした時は、 カーネル・モジュールのビルドは自動的に行われる。
kernel module のビルドに必要な以下のパッケージをインストールしておくこと。
# akmods --rebuild
なお、VirtualBox パッケージをインストール/アップグレードすると、カーネル モジュールのビルドが自動的に行われる。
# /sbin/vboxconfig
初めて VirtualBox をインストールした場合は、以下の手順を実施してキーペアを 作成し、public key を Secure Boot に登録する。
VirtualBoxパッケージのインストールにより、キーペアの public key の シンボリックリンクが /etc/pki/akmods/certs/public_key.der に作成される ので、以下のコマンドを実行してこれを Secure Boot に登録する。 「-P」オプションを指定すると root ユーザーのパスワードを使用して登録 するが、指定しない場合はパスワードの入力が要求される。
# mokutil [-P] --import /etc/pki/akmods/certs/public_key.der
public keyを Secure Boot に登録した後システムを再起動すると、UEFIの ファームウェアが「Shim UEFI key management」のメニューを表示するので、 何かキーを押して、以下の手順を実施する。
「Enroll MOK」を選択し、次に「Continue」を選択して次に進む。
「Yes」を選択 ⇒ 「Password:」に「public key の登録」で入力した パスワードを入力 ⇒ 「Reboot」を選択してシステムを再起動する。
キーペアを保管するディレクトリに移動し、以下のコマンドを実行して 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
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 []:
以下のコマンドを実行して public key を登録する。「-P」オプションを指定 するとrootユーザーのパスワードを使用して登録するが、指定しない場合は パスワードの入力が要求される。
# mokutil [-P] --import /var/lib/shim-signed/mok/MOK.der
システムを再起動し、「RPM Fusion リポジトリからインストールした場合」と 同様な手順を実施する。
public key の登録後システムが起動したら、以下のコマンドを実行して カーネル・モジュールをビルドして、VirtualBox サービスを再起動する。
# rcvboxdrv setup
初めて VirtualBox をインストールする場合、または kernel をアップグレード した場合は、カーネル・モジュールの書名とカーネルの登録をする必要がある。 RPM Fusion、または VirtualBox.org のパッケージをインストールした場合は、 これらは自動的に行われる。
参考までに、カーネル・モジュールの書名とカーネルへの登録を手動で行う場合の 手順を以下に示す。
「uname -r」コマンドを実行し、その結果が最新バージョン (「ls /usr/src/kernels/」を実行してバージョンが最も新しいものを確認 する)でない場合は、システムを再起動する。
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)
# 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」コマンドを実行すること。
irtualBox 6.1 から、vboxpci 廃止、vboxsf 追加となった模様。
Virtual Box 6.1 より Intel アーキテクチャの nested virtualization が サポートされた。Virtual Box の設定画面で「ネステッドVT-x/AMD-Vを有効化」が 無効化されている場合は、以下のコマンドを実行して有効化することができる。
$ vboxmanage modifyvm <VM-name> --nested-hw-virt on
「管理者として実行」で PowerShellを起動し、以下のコマンドを実行する。
> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All (optional) > Enable-WindowsOptionalFeature -Online -FeatureName Containers -All > bcdedit /set hypervisorlaunchtype Auto
可変サイズの仮想ディスクは、ファイルを削除してもディスク容量は小さく ならない。ファイル削除後にディスク容量を縮小するためには、以下の手順を 実施する。
ディスクを割り当てた仮想マシンを起動してログインし、縮小したいディスクの マウントディレクトリ配下の任意のディレクトリに移動して、以下のコマンドを 実行する。
# dd if=/dev/zero of=zero bs=4k; \rm zero
仮想マシンを停止して、以下のコマンドを実行する。
$ vboxmanage modifymedium <仮想ディスクイメージファイルのパス> --compact
VirtualBox マネージャーのツールから「メディア」を選択し、仮想ディスクの コピーを行う過程で、以下のような仮想ディスクイメージの変換を行うことが できる。
仮想マシンを起動しようとすると以下のメッセージが表示されて起動できない 場合の対処方法を説明する。
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
環境変数「LC_ALL=en_US.UTF-8」を設定して VirtualBox を起動すると VirtualBoxの画面が表示されるようになる。
[VirutalBox 起動コマンド]
$ LC_ALL=en_US.UTF-8 virtualbox > /dev/null 2>&1 &
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
FedoraにVirtualBox Guest Additionsをインストールする手順を以下に示す。
以下のパッケージをインストールする。
# ./VBoxLinuxAdditions.run
VirtualBoxマネージャーで設定した共有フォルダにアクセスする場合は、以下の コマンドを実行して、ログインユーザーを「vboxsf」グループに追加する。
# usermod -aG vboxsf <ログインユーザー>
例:root権限で「/sbin/restorecon -v /etc/ld.so.cache」を実行する。
RPM Fusion Repositoryの手順に従ってRPM Fusionのリポジトリにアクセス できるようにする。
以下のコマンドを実行して、akmod-VirtualBoxパッケージ(RPM Fusionより)、 virtualbox-guest-additionsパッケージ(Fedora updatesより)とその 依存パッケージをインストールする。
# dnf install akmod-VirtualBox virtualbox-guest-additions
結局共有フォルダの参照はできなかった。
「Guest Additins CD イメージからインストールする場合」と同様に必要な パッケージをインストールする。
[https://www.virtualbox.org/wiki/Testbuilds]VirtualBox test builds より Latest 5.2.x test builds の「Guest Additions」のリンクから Guest Additions CDイメージをダウンロードする。
「Guest Additions CD イメージからインストールする場合」と同様にGuest Addtion CDのインストーラーを実行する。
この方法で共有フォルダを参照することができた。
RPM Fusion Repositoryが設定されていること。
以下のコマンドを実行して、VLCをインストールする。
# dnf install vlc
なお、商用の(コピーガードがかかった)DVD再生はできない。
w3mは端末(Terminal emulator)からブラウジング可能なWeb Browserである。 画像、動画、音声には対応しないが(w3m-imgパッケージをインストールすれば画像の 表示が可能になる)、HTMLを整形してテキスト表示したりファイルをダウンロード することができる。Lynxと異なり表も整形して表示される。
# dnf install w3m
$ w3m <URL>
$ w3m -N <URL> [ <URL> ... ]
URLにファイルのパスを指定することも可能。
「q」をタイプする。
| コマンド | 説明 |
|---|---|
| TAB | 次のリンクにカーソルを移動 |
| ESC TAB | 前のリンクにカーソルを移動 |
| SPC | 次のページに移動 |
| b | 前のページに移動 |
| RET | カーソルの位置にあるリンク先を表示 |
| a | カーソルの位置にあるリンク先のファイルをダウンロードする |
| B | 前のリンクの内容を表示 |
| s | リンクの履歴を表示。表示された履歴をカーソルで移動してRETキーを 押すとその内容を表示する。 |
| Ctrl-u RET | 検索やURLなどの入力モードから抜ける |
| -- | Shiftキーを押しながらマウスをドラッグすると、その範囲を選択 する。Terminal emulatorのメニューでコピーすれば、他の アプリケーションにペーストすることが可能。 |
w3m-img パッケージは、w3m でHTMLを表示するときに、画像も表示できるように するためのパッケージである。
# dnf install w3m-img
PCにプレインストールされたWindows 10のProduct Keyは、以下のファイルに格納 されている。
/sys/firmware/acpi/tables/MSDM
以下のコマンドを実行することによって、Product Keyを確認することができる。
# hexdump -C /sys/firmware/acpi/tables/MSDM
https://github.com/B00merang-Project/Windows-10/releases より以下の ファイルをダウンロードする。
wine及びwinetricksをインストールする。winetricksは、wineにdotnetなどの Windowsのシステムライブラリをインストールするためのツールである。
# dnf install wine
wineのデータを格納するディレクトリを指定する。この設定を省略すると、 wineのデータは、~/.wine ディレクトリに格納される。
Windowsのアーキテクチャを指定する。「win32」を指定するとWindows 32ビット、 「win64」を指定するとWindows 64ビットになる。
必要に応じて、WINEPREFIX、またはWINEARCH環境変数を設定した後に、「winecfg」 コマンドを実行して、wineの初期設定を行う。
winetricks パッケージが使用できない場合は、以下のコマンドを実行して、 winetricks をダウンロードし、ダウンロードしたファイルに実行権限を付与する。
# cd /usr/bin # wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks # chmod a+x winetricks
以下のコマンドを実行して、windowsのインストーラーが使用する書庫展開ツールを インストールする。
# dnf install unzip cabextract
# dnf install wodim
以下のコマンドを実行すると、CD-RWの(再)初期化を実行することができる。
$ wodim -v dev=/dev/cdrom blank=fast
「format=fast」の代わりに「blank=all」を指定すると、メディアを完全に初期化 する。
※ CD-Text には対応していない
$ readom dev=/dev/cdrom -clone -nocorr f=<ISOイメージファイル名>
上記のコマンドを実行すると、Audio CD の ISOイメージファイルと、 「table of contents」(イメージファイル名の後ろに拡張子「.toc」が付いた ファイル)がカレントディレクトリに作成される。
ISOイメージファイルと「table of contents」(ISOイメージファイル名の後ろに 拡張子「.toc」が付いたファイル)が存在するディレクトリに移動し、以下の コマンドを実行する。
$ wodim dev=/dev/cdrom -raw96r -clone -v <ISOイメージファイル名>
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ファイルを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の情報をすべて出力し、cddbから取得した アルバム/トラック情報のエントリが複数見つかった場合は手動で選択し、すべての トラックをトラック別のファイルにwav形式で出力する。
$ icedax dev=/dev/cdrom -vall cddb=0 -B -Owav
下記のコマンドを実行すると、メディアの書き込みの進行状況を表示し、wavファイルの 拡張子を「.inf」に変更したファイルの内容でaudio optionを設定し(-useinfo)、 *.infファイルの内容でCD-Textの情報を書き込む(-text)。
$ wodim dev=/dev/cdrom -v -dao -useinfo -text *.wav
/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>/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
以下のコマンドを実行して、パッケージをインストールする。
# dnf install xterm
xterm には設定のためのメニューが存在しないため、コマンドラインからの起動時に オプションを指定するか、~/.Xdefaults ファイルに X Windowsの設定の書式で 設定を記述することになる。以下のオプション
を起動時、及び設定ファイルに設定する例を以下に示す。
$ xterm -fg white -bg black -g 100x30 -font *-fixed-*-*-*-18-*
xterm*foreground: white xterm*background: black xterm*geometry: 100x30 xterm*font: *-fixed-*-*-*-18-*
「xrdb ~/.Xdefaults」コマンドを実行して、設定をX Serverに反映させてから xtermを起動すること。
以上を指定して、「ダウンロード」ボタンとクリックする。
# dnf install zoom_x86_64.rpm
ブラウザ(Firefox)からhttps://zoom.us/testに接続して、カメラ、マイクの 接続確認をする。