Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37514555
en ru br
Репозитории ALT
S:0.4.9-alt1
5.1: 0.3-alt1
4.1: 0.1-alt0.M41.6
www.altlinux.org/Changes

Группа :: Система/Настройка/Прочее
Пакет: alterator-mirror

 Главная   Изменения   Спек   Патчи   Исходники   Загрузить   Gear   Bugs and FR  Repocop 

alterator-mirror-0.1/000075500000000000000000000000001114632104200146475ustar00rootroot00000000000000alterator-mirror-0.1/Makefile000064400000000000000000000006201114632104200163050ustar00rootroot00000000000000NAME=mirror

all:
clean:
install: install-module install-data

include /usr/share/alterator/build/module.mak

install-data:
install -d $(datadir)/install2
cp -a postinstall.d $(datadir)/install2
install -d $(sysconfdir)/alterator
cp -a mirror $(sysconfdir)/alterator
install -d $(localstatedir)/alterator/mirror
install -Dpm 755 alterator-mirror.cron $(sysconfdir)/cron.daily/alterator-mirror

alterator-mirror-0.1/alterator-mirror.cron000075500000000000000000000013561114632104200210470ustar00rootroot00000000000000#!/bin/sh -eu

lockdir="/var/lib/alterator/mirror/.lock"
pidfile="$lockdir/pid"
configdir=/etc/alterator/mirror/config
logdir=/var/log/alterator-mirror
commonfile="$configdir/.common"

exit_handler()
{
local rc="$?"
trap - EXIT
rm -rf "$lockdir"

exit "$rc"
}

! mkdir -- "$lockdir" && [ -s "$lockdir/pid" ] && kill -0 -- "$(cat "$lockdir/pid")" && exit 0

trap exit_handler EXIT HUP PIPE INT QUIT TERM

mkdir -p -- "$lockdir"
echo $$ >"$pidfile"

[ ! -s "$commonfile" ] || . "$commonfile"

[ "${ALTERATOR_ENABLED:-}" = "1" ] || exit 0

for i in "$configdir"/*; do
[ -s "$i" ] || continue
. "$i"
[ -n "${SRCROOT:-}" -a -n "${ARCH:-}" -a -n "${LIST:-}" ] || continue
HOME=/tmp sisyphus-mirror -c "$i" -L "$logdir"
done
alterator-mirror-0.1/alterator-mirror.logrotate000064400000000000000000000001771114632104200221030ustar00rootroot00000000000000/var/log/alterator-mirror/*.log {
missingok
notifempty
sharedscripts
create 0644 root root
delaycompress
}
alterator-mirror-0.1/applications/000075500000000000000000000000001114632104200173355ustar00rootroot00000000000000alterator-mirror-0.1/applications/pkg-mirror.desktop000064400000000000000000000002761114632104200230260ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Categories=X-Alterator-Pkg
Icon=mirror
Terminal=false
Name=Local mirrors of repositories
X-Alterator-URI=/mirror
X-Alterator-Help=mirror
X-Alterator-UI=html
alterator-mirror-0.1/backend3/000075500000000000000000000000001114632104200163215ustar00rootroot00000000000000alterator-mirror-0.1/backend3/mirror000075500000000000000000000103321114632104200175600ustar00rootroot00000000000000#!/bin/sh

repositorydir=/etc/alterator/mirror/repositories
configdir=/etc/alterator/mirror/config
mirrordir=/etc/alterator/mirror/mirrors
destdir=/var/lib/alterator/mirror

alterator_api_version=1

. alterator-sh-functions
. shell-quote
. shell-config

### low level

repository_awk()
{
alterator-dump-desktop \
-v lang="$in_language" \
-v out="Filename;X-Alterator-Path;X-Alterator-Has-Noarch;Name" \
-v def="noname;/notfound;no" \
"$@"
}

mirror_awk()
{
alterator-dump-desktop \
-v lang="$in_language" \
-v out="X-Alterator-Repositories;X-Alterator-RSYNC-URI" \
-v def="all" \
"$@"
}


list_uri()
{
local path="$(quote_sed_regexp "$1")"
sed -n "s/$prefix_re$path[[:space:]]\+.*/\2/p" $sourcelist
}

config_get()
{
local v="$(shell_config_get "$configdir/$1" "$2")"
string_quote_remove "$v"
}

config_set()
{
local f="$configdir/$1"
[ -s "$f" ] || echo ". $configdir/.common" >"$f"

shell_config_set "$f" "$2" "\"$3\""
}

### high level

list_repository()
{
repository_awk $repositorydir/*.desktop|
while read name path noarch description;do
name="${name##*/}"
name="${name%.desktop}"

local uri="$(config_get "$name" SRCROOT)"
local arch="$(config_get "$name" ARCH)"

[ -n "$uri" ] || uri="`_ "no mirroring"`"
arch="${arch%% noarch}"

local dusage="$(du -sh "$destdir/$path" 2>/dev/null|cut -f1)"
[ -n "$dusage" ] || dusage="0 K"


write_table_item \
name "$name" \
description "$description" \
uri "$uri" \
arch "$arch" \
du "$dusage"
done
}

list_mirror()
{
local name="$1";shift

write_enum_item "none" "`_ "no mirroring"`"

mirror_awk $mirrordir/*.desktop|
while read repo uri; do
[ -n "$uri" ] || continue
repo=";$repo;"
[ "$repo" = ";all;" -o -z "${repo##*;$name;*}" ] || continue
echo "$uri"
done | write_enum
}

list_arch()
{
write_enum_item "i586"
write_enum_item "x86_64"
}


read_storage()
{
df -lhP |
sed 1d |
sort -r -k 6,6 |
while read fs total use avail percent mpoint; do
[ -z "${destdir##$mpoint*}" ] || continue
write_string_param "storage_avail" "$avail"
break
done
}

on_message()
{
case "$in_action" in
list)
case "$in__objects" in
avail_repository)
list_repository;;
avail_arch)
list_arch;;
avail_mirror)
[ -n "$in_name" ] && list_mirror "$in_name" ;;
esac
;;
read)
case "$in__objects" in
/)
! grep -qs "^$(quote_sed_regexp "$destdir")[[:space:]]" /etc/exports
write_bool_param export_nfs "$?"
write_bool_param enabled "$(shell_config_get "$configdir/.common" ALTERATOR_ENABLED)"
read_storage
;;
repository)
[ -n "$in_name" ] || return

repository_awk $repositorydir/$in_name.desktop|
(read name path noarch description;
write_string_param description "$description")

local uri="$(config_get "$in_name" SRCROOT)"
local arch="$(config_get "$in_name" ARCH|tr ' ' ';')"
[ -n "$uri" ] || uri="none"

write_string_param uri "$uri"
write_string_param arch "$arch"
;;
esac
;;
write)
case "$in__objects" in
/)
! test_bool "$in_enabled"
shell_config_set "$configdir/.common" ALTERATOR_ENABLED "$?"
if test_bool "$in_export_nfs" ;then
grep -qs "^$(quote_sed_regexp "$destdir")[[:space:]]" /etc/exports ||
echo "$destdir *(ro,all_squash,sync)" >>/etc/exports
else
sed "/^$(quote_sed_regexp "$destdir")[[:space:]]/d" -i /etc/exports
fi
/sbin/service nfs restart >/dev/null 2>/dev/null
;;
repository)
if [ -n "$in_clear" -a -n "$in_name" ];then
repository_awk $repositorydir/$in_name.desktop|
(read name path noarch description;
[ -n "$path" ] && rm -rf "$destdir/$path")
elif [ -n "$in_commit" ];then
repository_awk $repositorydir/$in_name.desktop|
(read name path noarch description;
config_set "$in_name" LIST "$path"

[ -n "$in_arch" -a "$noarch" = "yes" ] &&
in_arch="${in_arch};noarch"

[ "$in_uri" != "none" ] || in_uri=""
config_set "$in_name" SRCROOT "$in_uri"
config_set "$in_name" ARCH "$(echo $in_arch|tr ';' ' ')")
fi
esac
;;
write)
;;
esac
}

message_loop
alterator-mirror-0.1/mirror/000075500000000000000000000000001114632104200161615ustar00rootroot00000000000000alterator-mirror-0.1/mirror/config/000075500000000000000000000000001114632104200174265ustar00rootroot00000000000000alterator-mirror-0.1/mirror/config/.common000064400000000000000000000001351114632104200207160ustar00rootroot00000000000000ARGS="-rltvhmHP --delete-delay --delete-excluded --stats"
DESTROOT=/var/lib/alterator/mirror
alterator-mirror-0.1/mirror/mirrors/000075500000000000000000000000001114632104200176565ustar00rootroot00000000000000alterator-mirror-0.1/mirror/mirrors/alt.desktop000064400000000000000000000005051114632104200220310ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ftp.altlinux.org (ALT Linux, Moscow)
X-Alterator-Country=ru
X-Alterator-FTP-URI=ftp://ftp.altlinux.org/pub/distributions/ALTLinux
X-Alterator-HTTP-URI=http://ftp.altlinux.org/pub/distributions/ALTLinux
X-Alterator-RSYNC-URI=rsync://ftp.altlinux.org/ALTLinux
alterator-mirror-0.1/mirror/mirrors/chg.desktop000064400000000000000000000003541114632104200220140ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ftp.chg.ru (Chg-FREEnet, Chernogolovka)
X-Alterator-Country=ru
X-Alterator-FTP-URI=ftp://ftp.chg.ru/pub/Linux/ALTLinux
X-Alterator-RSYNC-URI=rsync://ftp.chg.ru/ALTLinux
alterator-mirror-0.1/mirror/mirrors/heanet.desktop000064400000000000000000000005031114632104200225130ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ftp.heanet.ie (HEAnet, Ireland)
X-Alterator-Country=ie
X-Alterator-FTP-URI=ftp://ftp.heanet.ie/mirrors/ftp.altlinux.org
X-Alterator-HTTP-URI=http://ftp.heanet.ie/mirrors/ftp.altlinux.org
X-Alterator-RSYNC-URI=rsync://ftp.heanet.ie/mirrors/ftp.altlinux.org
alterator-mirror-0.1/mirror/mirrors/ibiblio.desktop000064400000000000000000000006721114632104200226670ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ibiblio.org (public's library and digital archive, United States)
X-Alterator-Country=us
X-Alterator-Repositories=branch-4.1;desktop-4.1;updates-4.1;daedalus
X-Alterator-FTP-URI=ftp://ibiblio.org/pub/linux/distributions/altlinux
X-Alterator-HTTP-URI=http://distro.ibiblio.org/pub/linux/distributions/altlinux
X-Alterator-RSYNC-URI=rsync://distro.ibiblio.org/distros/altlinux
alterator-mirror-0.1/mirror/mirrors/ilim.desktop000064400000000000000000000003571114632104200222100ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ftp.ilim.ru (Ust-Ilimsk)
X-Alterator-Country=ru
X-Alterator-Repositories=updates-4.0;updates-4.1;sisyphus
X-Alterator-FTP-URI=ftp://ftp.ilim.ru/pub/Linux/Distrib/ALTLinux

alterator-mirror-0.1/mirror/mirrors/ipsl.desktop000064400000000000000000000006141114632104200222210ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=distrib-coffee.ipsl.jussieu.fr (Institut Pierre Simon Laplace, France)
X-Alterator-Country=fr
X-Alterator-FTP-URI=ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/altlinux
X-Alterator-HTTP-URI=http://distrib-coffee.ipsl.jussieu.fr/pub/linux/altlinux
X-Alterator-RSYNC-URI=rsync://distrib-coffee.ipsl.jussieu.fr/pub/linux/altlinux

alterator-mirror-0.1/mirror/mirrors/jinr.desktop000064400000000000000000000003171114632104200222140ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=linux4u.jinr.ru (Joint Institute for Nuclear Research, Dubna)
X-Alterator-Country=ru
X-Alterator-FTP-URI=ftp://linux4u.jinr.ru/pub/ALTLinux
alterator-mirror-0.1/mirror/mirrors/kiev.desktop000064400000000000000000000004531114632104200222110ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ftp.linux.kiev.ua (Kiev, Ukraine)
X-Alterator-Country=ua
X-Alterator-FTP-URI=ftp://ftp.linux.kiev.ua/pub/Linux/ALT
X-Alterator-HTTP-URI=http://ftp.linux.kiev.ua/pub/Linux/ALT
X-Alterator-RSYNC-URI=rsync://ftp.linux.kiev.ua/ALTLinux
alterator-mirror-0.1/mirror/mirrors/mobicomk.desktop000064400000000000000000000004001114632104200230430ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ftp.mobicomk.ru (MegaFonGSM, Caucasus)
X-Alterator-Country=ru
X-Alterator-Repositories=updates-4.0;updates-4.1;sisyphus
X-Alterator-FTP-URI=ftp://ftp.mobicomk.ru/pub/distributions/ALTLinux
alterator-mirror-0.1/mirror/mirrors/psn.desktop000064400000000000000000000005111114632104200220460ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ftp.impb.psn.ru (Pushchino Scientific Center)
X-Alterator-Country=ru
X-Alterator-Repositories=server-4.0;updates-4.0;updates-4.1;sisyphus
X-Alterator-FTP-URI=ftp://ftp.impb.psn.ru/pub/distributions/ALTLinux
X-Alterator-RSYNC-URI=rsync://ftp.impb.psn.ru/ALTLinux
alterator-mirror-0.1/mirror/mirrors/yandex.desktop000064400000000000000000000004361114632104200225440ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=mirror.yandex.ru (Yandex, Moscow)
X-Alterator-Country=ru
X-Alterator-FTP-URI=ftp://mirror.yandex.ru/altlinux
X-Alterator-HTTP-URI=http://mirror.yandex.ru/altlinux
X-Alterator-RSYNC-URI=rsync://mirror.yandex.ru/altlinux
alterator-mirror-0.1/mirror/repositories/000075500000000000000000000000001114632104200207105ustar00rootroot00000000000000alterator-mirror-0.1/mirror/repositories/branch-4.0.desktop000064400000000000000000000003551114632104200240420ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ALT Linux 4.0 stable branch
Name[ru]=п║я┌п╟п╠п╦п╩я▄п╫п╟я▐ п╡п╣я┌п╨п╟ ALT Linux 4.0
X-Alterator-Path=/4.0/branch
X-Alterator-Has-Noarch=yes
X-Alterator-Components=classic
alterator-mirror-0.1/mirror/repositories/branch-4.1.desktop000064400000000000000000000003551114632104200240430ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ALT Linux 4.1 stable branch
Name[ru]=п║я┌п╟п╠п╦п╩я▄п╫п╟я▐ п╡п╣я┌п╨п╟ ALT Linux 4.1
X-Alterator-Path=/4.1/branch
X-Alterator-Has-Noarch=yes
X-Alterator-Components=classic
alterator-mirror-0.1/mirror/repositories/daedalus.desktop000064400000000000000000000002521114632104200240640ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ALT Linux Daedalus
X-Alterator-Path=/Daedalus
X-Alterator-Has-Noarch=no
X-Alterator-Components=classic
alterator-mirror-0.1/mirror/repositories/desktop-4.0.desktop000064400000000000000000000003271114632104200242550ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ALT Linux 4.0 Desktop
Name[ru]=ALT Linux 4.0 Desktop
X-Alterator-Path=/4.0/Desktop/current
X-Alterator-Has-Noarch=no
X-Alterator-components=classic
alterator-mirror-0.1/mirror/repositories/desktop-4.1.desktop000064400000000000000000000003271114632104200242560ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ALT Linux 4.1 Desktop
Name[ru]=ALT Linux 4.1 Desktop
X-Alterator-Path=/4.1/Desktop/current
X-Alterator-Has-Noarch=no
X-Alterator-components=classic
alterator-mirror-0.1/mirror/repositories/server-4.0.desktop000064400000000000000000000003311114632104200241050ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ALT Linux 4.1 Server
Name[ru]=ALT Linux 4.1 Server
X-Alterator-Path=/4.1/Server/current
X-Alterator-Has-Noarch=no
X-Alterator-Components=main contrib
alterator-mirror-0.1/mirror/repositories/sisyphus.desktop000064400000000000000000000002531114632104200241720ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=ALT Linux Sisyphus
X-Alterator-Path=/Sisyphus
X-Alterator-Has-Noarch=yes
X-Alterator-Components=classic
alterator-mirror-0.1/mirror/repositories/updates-4.0.desktop000064400000000000000000000003471114632104200242530ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=Updates for ALT Linux 4.0
Name[ru]=п·п╠п╫п╬п╡п╩п╣п╫п╦я▐ п╢п╩я▐ ALT Linux 4.0
X-Alterator-Path=/updates/4.0
X-Alterator-Has-Noarch=no
X-Alterator-Components=updates
alterator-mirror-0.1/mirror/repositories/updates-4.1.desktop000064400000000000000000000003471114632104200242540ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Icon=sisyphus
Terminal=false
Name=Updates for ALT Linux 4.1
Name[ru]=п·п╠п╫п╬п╡п╩п╣п╫п╦я▐ п╢п╩я▐ ALT Linux 4.1
X-Alterator-Path=/updates/4.1
X-Alterator-Has-Noarch=no
X-Alterator-Components=updates
alterator-mirror-0.1/postinstall.d/000075500000000000000000000000001114632104200174455ustar00rootroot00000000000000alterator-mirror-0.1/postinstall.d/40-iptables-nfs.sh000075500000000000000000000012271114632104200226160ustar00rootroot00000000000000#!/bin/sh

. install2-init-functions

mountd_port=800
nfsconf="$destdir/etc/sysconfig/nfs"
iptablesdir="$destdir/etc/alterator/net-iptables"

[ -d "$iptablesdir" -a ! -s "$iptablesdir/nfs.desktop" ] || exit 0
[ -f "$nfsconf" ] || return

cat >"$iptablesdir/nfs.desktop"<<EOF
[Desktop Entry]
Type=Application
Categories=X-Alterator-Xorg
Icon=secure
Terminal=false
Name=NFS
X-Alterator-Port=tcp:111;udp:111;tcp:2049;udp:2049;tcp:$mountd_port;udp:$mountd_port
EOF

if grep -qs '^#\?[[:space:]]*MOUNTD_PORT=' "$nfsconf"; then
sed "s/^#\?[[:space:]]*MOUNTD_PORT=.*/MOUNTD_PORT=$mountd_port/" -i "$nfsconf"
else
echo "MOUNTD_PORT=$mountd_port" >>"$nfsconf"
fi
alterator-mirror-0.1/templates/000075500000000000000000000000001114632104200166455ustar00rootroot00000000000000alterator-mirror-0.1/templates/mirror/000075500000000000000000000000001114632104200201575ustar00rootroot00000000000000alterator-mirror-0.1/templates/mirror/index.html000064400000000000000000000037071114632104200221630ustar00rootroot00000000000000<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<!-- sources.list administration module -->
<html wf="form">
<body>
<form method="POST">
<table>
<tr>
<td><input type="checkbox" name="enabled"/><span translate="_">Enable mirroring</span></td>
</tr>
<tr>
<td><input type="checkbox" name="export_nfs"/><span translate="_">Access to storage via NFS (/var/lib/alterator/mirror)</span></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td><input type="submit" class="btn" value="Apply"/>&nbsp;<input type="reset" class="btn" value="Reset"/></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>
<table class="alterator-listbox" enumref="/mirror/avail_repository">
<thead>
<tr>
<th><span translate="_">Repository</span></th>
<th><span translate="_">Source</span></th>
<th><span translate="_">Architectures</span></th>
<th><span translate="_">Disk usage</span></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<a href="/mirror/repository?name=" class="alterator-ref2">
<span class="alterator-label" name="description"/>
</a>
</td>
<td><span class="alterator-label" name="uri"/></td>
<td><span class="alterator-label" name="arch"/></td>
<td><span class="alterator-label" name="du"/></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>
<span translate="_">Storage free space:</span>
&nbsp;<span class="alterator-label" name="storage_avail"/>
</td>
</tr>
<tr>
<td><p> <span translate="_">Synchronization will start every night. First synchronization with some repository may take a long time.</span>
</p>
<p>
<strong><span translate="_">Warning:</span></strong>
<span translate="_">mirroring requires a lot of disk space.</span>
</p>
</td>
</tr>
</table>
</form>
</body>
</html>
alterator-mirror-0.1/templates/mirror/repository/000075500000000000000000000000001114632104200223765ustar00rootroot00000000000000alterator-mirror-0.1/templates/mirror/repository/index.html000064400000000000000000000023341114632104200243750ustar00rootroot00000000000000<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<!-- sources.list administration module -->
<html wf="form?redirect-url=%2fmirror">
<body>
<form method="POST">
<table>
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td style="text-align:right"><span translate="_">Repository:</span></td>
<td><span class="alterator-label" name="description"/></td>
</tr>

<tr>
<td colspan="2">&nbsp;</td>
</tr>

<tr>
<td style="text-align:right"><span translate="_">Source:</span></td>
<td><select name="uri" enumref="/mirror/avail_mirror"/></td>
</tr>
<tr>
<td style="text-align:right"><span translate="_">Architectures:</span></td>
<td><table class="alterator-checklistbox" name="arch" enumref="/mirror/avail_arch"/></td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input name="commit" type="submit" class="btn" value="Apply"/>
&nbsp;
<input type="reset" class="btn" value="Reset"/>
&nbsp;
&nbsp;
&nbsp;
&nbsp;
<input name="clear" type="submit" class="btn" value="Clear local mirror"/>
</td>
</tr>
</table>
</form>
</body>
</html>
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin