次のsystemdサービスファイルを使用して、Fedora 17マシンでsvnserveを実行しています。
[Unit]
Description=Subversion Server
After=syslog.target network.target
[Service]
User=svn
Type=forking
Environment=HOME=/repos/svn
ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -r /repos/svn
PIDFile=/run/svnserve/svnserve.pid
[Install]
WantedBy=multi-user.target
/ var/run/svnserveがsvn:svnによって所有されている限り、これは正常に機能しますが、その所有権がroot:rootにリセットされると、再起動時に中断します。私が欲しいのは、ディレクトリを変更する起動前のステップを追加することです。
残念ながら、systemdユニットファイルに関する実際のドキュメントは見つかりませんが、「ExecStartPre」を使用しているものがあるので、これを試しました。
ExecStartPre=/bin/chown svn:svn /run/svnserve
残念ながら、これは「操作が許可されていません」エラーで失敗するため、ユニットファイルで指定されたユーザーとしてExecStartPreも実行されているようです。
また、ユニットファイルをrootとして実行してから、svnserveをsuを介してsvnユーザーとして起動しようとしましたが、コマンドラインが無効であるという漠然としたエラーが発生しました。
Systemdユニットは、特定のユーザーとして実行する前にrootとしてアクションをどのように実行できますか?
FedoraのSubversionパッケージはsystemdのtmpfilesメカニズムを使用して、ブート時にルート所有権で/run/svnserve
を作成します(パッケージ化された.serviceファイルは明らかにデーモンをルートとして実行するため)。 /usr/lib/tmpfiles.d/svnserve.conf
を/etc/tmpfiles.d/svnserve.conf
にコピーして、所有者を変更できます。詳細については、man tmpfiles.d
をご覧ください。
ExecStartPreをスクリプトへのSudo呼び出しにして、このスクリプトのユーザーsvnを構成できます。