2016-07-05 11 views
3

debian jessieのsubversionパッケージにはsystemdサービスファイルが含まれていません。自動始動のための最も簡単な解決策は何ですか?私はそれがhttps://bbs.archlinux.org/viewtopic.php?id=190127を適応したものですが、私はここで直接svnserveのために直接引数を入れているsvnserveとsystemctl systemdを起動する方法

[Unit] 
Description=Subversion protocol daemon 
After=syslog.target network.target 

[Service] 
Type=forking 
#EnvironmentFile=/etc/conf.d/svnserve 
#ExecStart=/usr/bin/svnserve --daemon $SVNSERVE_ARGS 
ExecStart=/usr/bin/svnserve -d -r /svnFolder/repositories 
ExecReload=/bin/kill -HUP $MAINPID 
KillMode=process 
Restart=on-failure 

[Install] 
WantedBy=multi-user.target 
Alias=svnserve.service 

を試してみてください。

改善できる点は?

+0

私はこのトピックを議論していないので、直接プログラミングに関連しています。 UnixとLinuxのStackExchangeサイトが適しています。 –

+0

systemdファイルは、systemdに基づくすべてのディストリビューションでほぼ同じです。あなたは、Arch Linux、Fedora、Ubuntuからインスピレーションを得て同等のファイルを見ましたか? –

+0

現在のソリューションにはどのような問題がありますか?それは動作しませんか?どのようなエラーが生成されますか? – Marki555

答えて

2

更新:私の答えは時代遅れです。これらの改善およびその他は、Yves Martin's excellent solutionに組み込まれています。

私には2つの改善点があります。一般に、ルートなどを実行しないことをお勧めします。このためのユーザーを作成します(例: 'svn')。また、フォークを使用するときにPIDファイルを明示的に指定するのはrecommendedです。適切なログを専用のsvnサービスアカウントで実行されている。ここ

User=svn 
Group=svn 
PIDFile=/usr/local/svn/svnserve.pid 
ExecStart=/usr/bin/svnserve -d -r /usr/local/svn/repos --pid-file /usr/local/svn/svnserve.pid 
+0

PIDファイルは、別のユーザーと同じように見えます。ありがとうございました! – user855443

+0

これを変更して、pidファイルを/ var/run/svnserveではなくsvnユーザが完全に管理するディレクトリに置きます。/var/runは私が使用していたシステム上で一時的でした。おそらく、起動スクリプトを作成して/ var/run/svnserveというアクセス許可を与える方がよいでしょうが、私はそれに対処しないことを選択しました。他の誰かがこれを改善するかもしれない。 – EricS

+0

@エリック私は同じ問題がありました。 ['RuntimeDirectory ='](http:///0pointer.de/public/systemd-man/systemd.exec.html#RuntimeDirectory=)ディレクティブはこれに最適です。['tmpfiles.d'](http: //0pointer.de/public/systemd-man/tmpfiles.d.html)より複雑なものがあります。 – Grexis

12

が設定svnserveサービスへの提案である「-Debianのウェイ」:私は行を追加除いマイsvnserve.serviceはあなたのように非常に見えます。 FHSによると、リポジトリは/srv/に格納する必要があります。

まず、systemdに/etc/systemd/system/svnserve.serviceのためのサービス構成:

[Unit] 
Description=Subversion protocol daemon 
After=syslog.target network.target 

[Service] 
Type=forking 
RuntimeDirectory=svnserve 
PIDFile=/run/svnserve/svnserve.pid 
EnvironmentFile=/etc/default/svnserve 
ExecStart=/usr/bin/svnserve $DAEMON_ARGS 
User=svn 
Group=svn 
KillMode=control-group 
Restart=on-failure 

[Install] 
WantedBy=multi-user.target 
Alias=svnserve.service 

第二に、/etc/default/svnserveでのサービスの起動オプション:

# svnserve options 
DAEMON_ARGS="--daemon --pid-file /run/svnserve/svnserve.pid --root /srv/svn/repos --log-file /var/log/svnserve/svnserve.log" 

正しく動作させるには適切な所有権を持つログファイルのフォルダを作成する必要があります。

ログローテーションの設定 /etc/logrotate.d/svnserveで終わる

/var/log/svnserve/*.log { 
    daily 
    missingok 
    rotate 14 
    compress 
    notifempty 
    create 640 svn adm 
    sharedscripts 
    postrotate 
      if /bin/systemctl status svnserve > /dev/null ; then \ 
       /bin/systemctl restart svnserve > /dev/null; \ 
      fi; 
    endscript 
} 

は、この情報がお役に立てば幸いです。

+0

ありがとう - これは非常に完成しているように見えます。次にサーバーを変更するときに使用します。 – user855443

+1

@ Yves Martinこのソリューションをお寄せいただきありがとうございます。私は最近、このソリューションのバリエーションを使用し、いくつかのコメントがありました。まず、 '/ etc/default/svnserve'で、ログファイルのargフラグは' --log'ではなく '--log-file'でなければなりません。また、ログディレクトリの作成は一度だけ行う必要がありますが、 '/ var/run'は永続することが保証されていません。 ['RuntimeDirectory ='](http:///0pointer.de/public/systemd-man/systemd.exec.html#RuntimeDirectory=)ディレクティブを使う方が良いでしょう。 Ubuntuでは '/ var/run'は'/run'へのシンボリックリンクです。 – Grexis

+0

@Grexisあなたの改善のために多くの感謝。このサービスの設定は素晴らしいようになりました。私は 'systemd'のもう一つの特徴を学び、'/run'について私のFHSを修正しました。ありがとうございます –

0

(私はこの@Yves Martin's answerにコメント作ると思いますが、これは新しいアカウントで、私はコメントすることを許可されていないよ。:-P)

SELinuxのでは、このソリューションは、自動起動を許可しません。デーモンの私はそれを幸せにするためにいくつかの変更を加えました。 svnserveデーモンには、権限が/ var/logツリーにありません。 svnアカウントのドメインにログを置くと、セキュリティのうわさが解決されます。 /etc/systemd/system/svnserve.serviceで

:/etc/logrotate.d/svnserveで

ExecStart=/usr/bin/svnserve --daemon \ 
    --pid-file /var/run/svnserve/svnserve.pid \ 
    --root /project/svn/repos \ 
    --log-file /project/svn/log/svnserve.log 

/project/svn/log/*.log { # path changed 
... 
    create 644 svn svn # corrected group and made world-readable 
... 

最後に、SVNのリポジトリを作成し、ディレクトリを記録してい正しい所有権とセキュリティの種類:

sudo mkdir /project/svn 
sudo chmod 755 /project/svn 
sudo mkdir /project/svn/repos /project/svn/log 
sudo chown -R svn:svn /project/svn 
sudo semanage fcontext -add --type svnserve_content_t "/project/svn(/.*)?" 
sudo restorecon -Rv /project/svn 

(明らかに、/ project/svnをあなたのレポ構造。/ var/svnは一般的であり、そのディレクトリツリーのルールは既に存在しているため、上記の最後の行を不要にしています)。

関連する問題