ユーザ用ツール

サイト用ツール


debian:debiantips

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
debian:debiantips [2015-05-04 17:35]
tosihisa@netfort.gr.jp
debian:debiantips [2019-01-20 17:43] (現在)
tosihisa@netfort.gr.jp ↷ debiantips から debian:debiantips へページを移動しました。
行 12: 行 12:
  
 これは Raspbian の場合ですが,ufw が CIFS と言う名称で定義されていますので,以下のコマンドを実行. これは Raspbian の場合ですが,ufw が CIFS と言う名称で定義されていますので,以下のコマンドを実行.
 +
 +/etc/ufw/applications.d/ 以下に色いろあると思います.
  
 <code> <code>
 # ufw allow CIFS # ufw allow CIFS
-/code>+</code> 
 + 
 +===== Debian jessie での rsyslog の動き ===== 
 + 
 +Debian jessie は systemd が導入されました.このため,Debian jessie では,systemd-journald と,rsyslogd の二つのログプロセスが動作していることになります 
 +(実際二つのログプロセスが動いています) 
 + 
 +どれがどう切り分けられているのか,気になったので調べてみました. 
 + 
 +切り分けとして,まずは仕組みの切り分けから進めます. 
 + 
 +Linux の syslog(3) は,最終的には /dev/log のソケットに渡されますので,それが systemd-journald で握っているのか,それとも rsyslogd で握っているのかを確認します. 
 + 
 +さしあたり,rsyslogd のソースを確認してみます. 
 + 
 +rsyslog-8.4.2/plugins/imuxsock/imuxsock.c に,以下の記述があります. 
 + 
 +<code c rsyslog-8.4.2/plugins/imuxsock/imuxsock.c> 
 +/* defines */ 
 +#ifndef _PATH_LOG 
 +#ifdef BSD 
 +#define _PATH_LOG       "/var/run/log" 
 +#else 
 +#define _PATH_LOG       "/dev/log" 
 +#endif 
 +#endif 
 +#ifndef SYSTEMD_JOURNAL 
 +#define SYSTEMD_JOURNAL  "/run/systemd/journal" 
 +#endif 
 +#ifndef SYSTEMD_PATH_LOG 
 +#define SYSTEMD_PATH_LOG SYSTEMD_JOURNAL "/syslog" 
 +#endif 
 +... 
 +/* activate current listeners */ 
 +static inline rsRetVal 
 +activateListeners() 
 +
 +... 
 +                listeners[0].sockName = UCHAR_CONSTANT(_PATH_LOG); 
 +                if(runModConf->pLogSockName != NULL) 
 +                        listeners[0].sockName = runModConf->pLogSockName; 
 +                else if(sd_booted()) { 
 +                        struct stat st; 
 +                        if(stat(SYSTEMD_PATH_LOG, &st) != -1 && S_ISSOCK(st.st_mode)) { 
 +                                listeners[0].sockName = (uchar*) SYSTEMD_PATH_LOG; 
 +                        } 
 +                } 
 + 
 +</code> 
 + 
 +Linux では,標準ではログのためのソケットは /dev/log ですが,rsyslog では,sd_booted() の戻り値が真の場合,"/run/systemd/journal/socket" と言うファイルが存在して,さらにそれがソケットを指していれば,それをログのためのソケットとして使うようです. 
 + 
 +sd_booted() の実体は,rsyslog-8.4.2/runtime/sd-daemon.c にあります. 
 + 
 +<code c rsyslog-8.4.2/runtime/sd-daemon.c> 
 +_sd_export_ int sd_booted(void) { 
 +#if defined(DISABLE_SYSTEMD) || !defined(__linux__) 
 +        return 0; 
 +#else 
 +        struct stat st; 
 + 
 +        /* We test whether the runtime unit file directory has been 
 +         * created. This takes place in mount-setup.c, so is 
 +         * guaranteed to happen very early during boot. */ 
 + 
 +        if (lstat("/run/systemd/system/", &st) < 0) 
 +                return 0; 
 + 
 +        return !!S_ISDIR(st.st_mode); 
 +#endif 
 +
 +</code> 
 + 
 +"/run/systemd/system/" と言う名前のディレクトリがあるかどうかで決まります. 
 + 
 +要は,rsyslog は,自身で systemd が動いているかを "/run/systemd/system/" ディレクトリの有無で判定し, 
 +もしこのディレクトリが存在しているならば,"/run/systemd/journal/socket" をログのためのソケットとして使うようです. 
 + 
 +と言うことを踏まえると,以下のようになるかと思います. 
 + 
 +  syslog(3)==>[/dev/log]==>systemd-journald==>[/run/systemd/journal/socket]==>rsyslogd 
 + 
 +経路がわかったところで,Debian jessie での systemd-journald と rsyslogd の棲み分けですが, 
 +私がインストールした Debian jessie では, 
 +"/run/log/journal/" ディレクトリは存在しますが,"/var/log/journal" ディレクトリは存在しません. 
 +また,/etc/systemd/journald.conf には,特段の設定がないことから,systemd-journald の Storage=auto がデフォルトになっているはずです. 
 + 
 +Storage=auto は,"/var/log/journal" ディレクトリが無ければ作成せず,そのまま "/run/log/journal/" ディレクトリ側に記録するようです. 
 + 
 +http://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s15.html によれば,"/run" ディレクトリは,起動してからのシステム情報の可変データを格納する事が目的のディレクトリです. 
 + 
 +上記のことから,Debian jessie は,標準では systemd-journald は起動してからの内容を記録しており,永続的なログの記録は,systemd-journald 経由でこれまでどおり rsyslogd が行っていると言えます. 
 + 
 +もし,systemd-journald で永続的に記録させたいならば,"/var/log/journal" ディレクトリを作成し,アクセス権を適宜設定すれば良いと思います.
  
debian/debiantips.1430728502.txt.gz · 最終更新: 2015-05-04 17:35 by tosihisa@netfort.gr.jp