[sisyphus] Re: стабильный... нестабильный...

Michael Shigorin =?iso-8859-1?q?mike_=CE=C1_osdn=2Eorg=2Eua?=
Пт Июн 24 20:17:35 MSD 2005


On Fri, Jun 24, 2005 at 07:18:52PM +0400, Dmitry V. Levin wrote:
> > > > Иван, а не хотите потихоньку (может, с 3.0) съезжать со всем
> > > > этим хозяйством с сизифа на что-то более предсказуемое плюс
> > > > бэкпорты по вкусу [и с Вашим участием]?
> > > Думаю, что это очень нездравое предложение.
> > Поясни?
> Ты предлагаешь человеку, который может позволить себе
> тестировать не самые широко используемые компоненты Сизифа и
> тем самым делать их лучше, прекратить тестирование.

Я предлагаю подумать.  Подумав сам, что именно предлагаю.

> А ведь это нанесёт больший ущерб Сизифу, чем все ругающие ALT
> вместе взятые в качестве показателя экспоненты.

Если человек в очередной взрыв психанёт и уйдёт из сообщества,
будет хуже.  К сожалению, так было и не раз (и не с самыми
наивными людьми).

Как ты можешь помнить, в теме "стабильный сизиф" я всеми
конечностями держался за тезис "если можно не разламывать или 
локализовать проблемы -- давайте постараемся делать так".

Бишь мне как разработчику на базе Sisyphus, а не дистрибутивов,
*критично* качество части его пакетной базы.

Но рекомендации даются не из эгоистических побуждений -- 
я считаю, что гораздо более уместным вариантом тестирования
Sisyphus является наличие у тестирующего:

- системы снапшотов (свой кривой скрипт и ещё пару прилагаю);
- тестовых систем (возможно, находящихся в эксплуатации, но легко
  выводимых из неё и/или некритичных -- как, например, один или
  несколько узлов в кластере);
- систем, которые работают на снапшоте, прошедшем предварительную
  обкатку на тестовых агрегатах.

На данный момент моё понимание ситуации говорит о том, что без
подобной буферизации тестирование может обойтись слишком дорого
человеку, а вследствие этого -- проекту.

PS: повешено на http://wiki.sisyphus.ru/admin/HandyAdvice, 
comments are welcome.

-- 
 ---- WBR, Michael Shigorin <mike на altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/
----------- следующая часть -----------
#!/bin/sh
# script by Michael Shigorin <mike на osdn.org.ua> for snapshotting
# ALT Linux Sisyphus locally; feel free to use and modify, would
# be glad to hear back about changes

# v0.2: fix STUPID bug which manifested when doing several 
# syncs per day *and* the first wasn't done off complete (stable)
# mirror

# v0.3: better $DEST handling in case of repeated rsync failures
# during some period of time *but* with some data transferred
# so they better not get lost and re-rsynced

# v0.4: TIMESTAMP fix by Denis Smirnov (mithraen на altlinux) induced
# by discussion with Dmitry Levin (ldv на altlinux)

# v0.5: altlinux-release is searched in noarch instead of i586

# mirror/site-specific
SRC="ftp.altlinux.org.ua::ALTLinux/Sisyphus/"
BASEDIR="/var/ftp/pub/EMT/Sisyphus/"

# retry params
MAXCOUNT=5
TIMEOUT=60

# shouldn't need to be changed
DATE=`date +%Y%m%d`
LOGDIR="$BASEDIR/log/"
LOGFILE="$LOGDIR/$DATE.log"
DEST="$BASEDIR/.syncing/"

RSYNCARGS="-av --partial --delete --bwlimit=120"

RPMARGS="-qp --queryformat %{RELEASE}\n"
TAGFILE="$DEST/files/noarch/RPMS/altlinux-release-Sisyphus-alt*.noarch.rpm"

unset OK

# init env
mkdir -p "$BASEDIR" "$LOGDIR"
cd "$BASEDIR"

# create hardlinked copy or init dir
LAST=`ls -d1 20?????? 2>/dev/null | tail -1`
[ -d "$DEST" ] || mkdir -p "$DEST"
[ -n "$LAST" ] && {
	[ `/bin/du -s "$LAST" |cut -f1` -gt `/bin/du -s "$DEST" |cut -f1` ] && {
		cp -alf "$LAST"/* "$DEST"
	}
}

# try to sync up
for attempt in `seq 1 $MAXCOUNT`; do 
	rsync $RSYNCARGS "$SRC" "$DEST" 2>&1 >> "$LOGFILE" && {
		OK="yes"
		break
	}
	sleep "$TIMEOUT"
done

[ -z "$OK" ] && exit 1

# get timestamp from specific package and move to it
#TIMESTAMP=`rpm $RPMARGS $TAGFILE | tail -1 | sed 's/alt//'`
TIMESTAMP=$(date +"%Y%m%d" -d "$(grep ^Date: $TAGFILE | sed 's!.*\([0-9][0-9] ... [0-9][0-9][0-9][0-9]\).*!\1!')")

[ -d "$TIMESTAMP" ] && {
	rsync $RSYNCARGS "$DEST" "$TIMESTAMP"/ 2>&1 >> "$LOGFILE"
} || {
	mv "$DEST" "$TIMESTAMP" 2>>"$LOGFILE"
}

touch -d "$DATE" "$TIMESTAMP"
rm -f current
ln -s "$TIMESTAMP" current

rm -rf "$DEST"

# that's all :)
echo "** $TIMESTAMP sync OK" >> "$LOGFILE"
----------- следующая часть -----------
#!/bin/sh
#
# Copyright 2004 (c) Michael Shigorin <mike на osdn.org.ua>
# Copyright 2004-2005 (c) Ivan Fedorov <ns на altlinux.ru>
# script for snapshotting ALT Linux Sisyphus locally.
#
#

# mirror/site-specific
SRC="rsync.altlinux.ru::ALTLinux/Sisyphus/"
BASEDIR="/var/ftp/pub/distributions/ALTLinux/Sisyphus-daily/"

########################################
###SRC="sisyphus.irkutsk.ru::ALTLinux/Sisyphus/"
###BASEDIR="/var/tmp/SIS/Sisyphus-daily/"
########################################

# retry params
MAXCOUNT=10
TIMEOUT=60

# shouldn't need to be changed
DATE=`date +%Y%m%d`
DATE_P=`date +%Y/%m/%d`
DATE_Y=`date +%Y`
DATE_M=`date +%m`

########################################
###DATE=`date +%Y%m%d -d 1day`
###DATE_P=`date +%Y/%m/%d -d 1day`
########################################

LOGDIR="$BASEDIR/../log/"
LOGFILE="$LOGDIR/Sisyphus_$DATE.log"
DEST="$BASEDIR/.syncing"

RSYNCARGS="-vaz --stats --delete-after"

unset OK

# init env
mkdir -p "$BASEDIR/$DATE_Y/$DATE_M" "$LOGDIR"
cd "$BASEDIR" || exit 1

# create hardlinked copy or init dir; order critical
LAST=`ls -d1 20??/??/?? 2>/dev/null | sort | tail -1`

########################################
###LAST="2005/01/19"
########################################

rm -rf "$DEST"
mkdir -p "$DEST"

[ ! -d "$LAST" ] && {
  echo "Can't create $DEST" >> "$LOGFILE"
  exit 1
}

for attempt in `seq 1 $MAXCOUNT`; do 
	rsync $RSYNCARGS "$SRC" "$DEST" --link-dest "$BASEDIR/$LAST" 2>&1 >> "$LOGFILE" && {
		OK="yes"
		break
	}
	sleep "$TIMEOUT"
done

[ -z "$OK" ] && {
  echo "Syncing problems" | tee -a "$LOGFILE"
  exit 1
}

[ ! -d "$BASEDIR/$DATE_P" ] && {
	mv "$DEST" "$DATE_P"
	# fix symlink
	rm -f $BASEDIR/../Sisyphus
	ln -s Sisyphus-daily/"$DATE_P" $BASEDIR/../Sisyphus
} || {
	echo "$DATE_P already exists" | tee -a "$LOGFILE"
	mv "$DEST" "$DATE_P.new"
	exit 2
}

echo "** $DATE sync OK" >> "$LOGFILE"
----------- следующая часть -----------
#!/bin/sh -e

PROG="${0##*/}"

Fatal()
{
        echo "${0##*/}: $*" >&2
        exit 1
}

export LC_ALL=C

sisyphus=/path/to/Sisyphus
pattern='^/path/to/archive/Sisyphus/[[:digit:]]{4}/[[:digit:]]{2}/[[:digit:]]{2}$'
format='/path/to/archive/Sisyphus/%CY/%Cm/%Cd\n/path/to/archive/Sisyphus/%TY/%Tm/%Td\n'

old="$(find /path/to/archive/Sisyphus/ -type d -mindepth 3 -maxdepth 3 |egrep "$pattern" |sort -r |head -1)" ||
	Fatal "old sisyphus lookup failed."
[ -n "$old" -a -d "$old" ] ||
	Fatal "old sisyphus lookup failed."

new="$(find "$sisyphus"/i?86/base -mindepth 1 -maxdepth 1 -type f -name pkglist.\* -printf "$format")" ||
	Fatal "new sisyphus lookup failed."
new="$(echo "$new" |egrep "$pattern" |sort -r |head -1)"
[ -n "$new" ] ||
	Fatal "new sisyphus lookup failed."

if [ "$old" = "$new" ]; then
	echo "$old: latest snapshot already exists."
	exit 0
fi

if [ -d "$new" ]; then
	echo "$old: NON-latest snapshot already exists."
	exit 0
fi

echo "New snapshot to be created: $new"

mkdir -pv ${new%/*}
cp -al "$old" "$new"

rsync -va --delete-after --stats "$sisyphus"/ "$new"/
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/sisyphus/attachments/20050624/08967f27/attachment-0003.bin>


Подробная информация о списке рассылки Sisyphus