====== Debian子ネタ集 ======
===== 標準のエディタを変更する =====
Debian 標準のテキストエディタは nano なのを変更するには update-alternatives で切り替える.
# update-alternatives --config editor
===== ufw で samba のポートを開く =====
これは Raspbian の場合ですが,ufw が CIFS と言う名称で定義されていますので,以下のコマンドを実行.
/etc/ufw/applications.d/ 以下に色いろあると思います.
# ufw allow CIFS
===== 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 に,以下の記述があります.
/* 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;
}
}
Linux では,標準ではログのためのソケットは /dev/log ですが,rsyslog では,sd_booted() の戻り値が真の場合,"/run/systemd/journal/socket" と言うファイルが存在して,さらにそれがソケットを指していれば,それをログのためのソケットとして使うようです.
sd_booted() の実体は,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
}
"/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" ディレクトリを作成し,アクセス権を適宜設定すれば良いと思います.