gitosis のソースパケジ
がき二名がどらえもんな映画を見ている間のヒマつぶしにスタバに入って電源確保したのは良いのですが USB ケーブルを忘れてしまい、接続不能。
どうしたものか、と思っていたら gitosis なソースパケジを展開したディレクトリを発見したのでそちら方面掘削してみることに。
debian 配下
以下。
$ ls -1 changelog compat control copyright gitosis.config gitosis.docs gitosis.examples gitosis.postinst gitosis.postrm gitosis.preseed gitosis.README.Debian gitosis.templates patches po README.source rules source $
順に見ていきます。とは言え changelog は略。compat は 7 です。control は Depends 関連のみ、ってことで以下。
Depends: ${misc:Depends}, ${python:Depends}, adduser, git-core, openssh-server, python-setuptools, sudo Suggests: git-daemon-run, gitweb
copyright も略。gitosis.config が以下。
#!/bin/sh set -e . /usr/share/debconf/confmodule db_input low gitosis/username || true db_go db_input low gitosis/directory || true db_go db_input low gitosis/key || true db_go db_stop
これはまたシンプルですね。フライングしてテンプレ見てみるか。ちょい端折って以下。
Template: gitosis/username Type: string Default: gitosis Template: gitosis/directory Type: string Default: /srv/gitosis Template: gitosis/key Type: string Default:
gitosis.docs が以下。
README.rst TODO.rst debian/gitosis.preseed
コピッて debuild してみようかな。ってパケジが足らねぇ、って叱られた。ネト接続できてないので断念。たしか /usr/share/doc/gitosis/ あたりに投入されるはず。
あるいは gitosis.examples が以下で
etc-event.d-local-git-daemon example.conf gitweb.conf lighttpd-gitweb.conf
こいつらも /usr/share/doc/gitosis/examples に投入のはず。次は gitosis.postinst ですが順に見ていきます。まず以下はお約束。
#!/bin/sh set -e # dh_pysupport includes needs to be early in postinst # in order to be able to initialize gitosis-admin repository. #DEBHELPER# . /usr/share/debconf/confmodule
で、引数は configure 限定。
case "${1}" in configure) # (snip) ;; abort-upgrade|abort-remove|abort-deconfigure) ;; *) echo "postinst called with unknown argument \`${1}'" >&2 exit 1 ;; esac exit 0
configure の中身を順に確認していきます。まず debconf 云々。
db_version 2.0 db_get gitosis/username _USERNAME="${RET:-gitosis}" db_get gitosis/directory _DIRECTORY="${RET:-/srv/gitosis}" db_get gitosis/key _KEY="${RET}" db_set gitosis/key "" db_stop
で、順に導入なナニ。redmine と比べて読みやすいですな。やっぱ DB がカラむと inst/rm なソレがややこしくなるに違いない。
debconf なソレの順にまずは _USERNAME 云々から。
if ! getent passwd | grep -q ${_USERNAME} then adduser --quiet --system --home ${_DIRECTORY} --shell /bin/sh --disabled-password --no-create-home --gecos 'git repository hosting' --group ${_USERNAME} elif ! getent group | grep -q "^${_USERNAME}" then addgroup --system --quiet ${_USERNAME} gpasswd -a ${_USERNAME} ${_USERNAME} else echo "gitosis user (${_USERNAME}) already exists, doing nothing." fi
む、getent って何、って man 見たら以下とのこと
NAME getent - get entries from administrative database
で、_DIRECTORY および _KEY について云々してます。gitosis なパケジ導入したことがあるんですが、gitosis-init って自分でヤッてたよな、って記憶があって違和感があったんですが、_KEY が指定されてない場合は gitosis-init は実行されないですね。成程。
記述としては以下なカンジなんですが、rm でどう云々しているのかを見るのが楽しみです。
if [ ! -d "${_DIRECTORY}" ] then mkdir -p "${_DIRECTORY}" chown ${_USERNAME}:${_USERNAME} ${_DIRECTORY} -R ln -s "${_DIRECTORY}"/repositories "${_DIRECTORY}"/git if [ -n "${_KEY}" ] then if [ -e "${_KEY}" ] then sudo -H -u ${_USERNAME} gitosis-init < ${_KEY} else TMPFILE="$(mktemp -t gitosis.XXXXXXXX)" echo "${_KEY}" > ${TMPFILE} sudo -H -u ${_USERNAME} gitosis-init < ${TMPFILE} rm -f ${TMPFILE} fi fi else echo echo "gitosis directory (${_DIRECTORY}) already exists, doing nothing." echo "Make sure the directory is recursively owned by the correct user account (${_USERNAME})." fi
次は gitosis.postrm です。楽しみ、って書いたんですが purge では何もしていない模様。
#!/bin/sh set -e case "${1}" in remove) # (snip) ;; purge|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) ;; *) echo "postrm called with unknown argument \`${1}'" >&2 exit 1 ;; esac #DEBHELPER# exit 0
remove な中身はというと以下。
_USERNAME="gitosis" _DIRECTORY="/srv/gitosis" if [ -x /usr/sbin/deluser ] then deluser --system ${_USERNAME} fi if [ -d "${_DIRECTORY}" ] then rmdir --ignore-fail-on-non-empty "${_DIRECTORY}" || true fi
デフォ限定、というあたりがアレですが、ユーザとディレクトリを削除されている模様。若干微妙な空気が漂っている気もしますがスルーで。
あと、gitosis.preseed というファイルがあります。これは別途確認の方向。
################################################################################ ## gitosis #gitosis gitosis/username string gitosis #gitosis gitosis/directory string /srv/gitosis #gitosis gitosis/key string ################################################################################
また、debian/rules もちょっと確認必要。
#!/usr/bin/make -f %: dh --with quilt ${@}
そしてエントリ投入はテザリングでナニ。1100 前には映画が終わるみたいなのでエントリ投入したら本屋さんに寄って出待ちの方向。