Вы не поверите, а найти толковое руководство по сабжу в интернетах так и не получилось.
Если где чего и упоминается, то в связи с утилитой rsync.
Покрутил так и сяк, полазал в info и мануале, без глубокого погружения сумел понять только то, что, видимо, зеркалирование происходит через /dev/ass1 - а точнее, только при условии, что на стороне сервера эти репозитории раздаются все той же rsync. При попытке тупо забить в качестве источника url c http://… утилита ругается по поводу того, что ей нифига не понятно. Пробовал разное - ругань идет то на непонятные команды, то на Network is unreachable (101), то еще на что. Надоело как-то.
Хотелось бы найти что-нибудь относительно адекватное, вроде apt-mirror у Ubuntu (Debian?). В конце концов, ну неужели нет софтины, которая просто тупо перетянет все, что надо, через http/ftp, не городя излишнего?
P.S. Если что - пожалуйста, не судите строго. На линуксе меньше года, до суси была убунта. Изучать . привык методом тыка, однако в разумных предлах - потому я и здесь. Подскажите, пожалуйста, чего делать с вышеозначенной байдой. Заранее спасибо.
###########################################################################
## ##
## openSUSE Mirror Script ##
## ##
## Creation: 26.11.2004 ##
## Last Update: 15.07.2010 ##
## NoViY Mod: 24.02.2011 ##
## ##
## Copyright (c) 2004-2010 by Georg Kainzbauer <georgkainzbauer@gmx.net> ##
## ##
## This program is free software; you can redistribute it and/or modify ##
## it under the terms of the GNU General Public License as published by ##
## the Free Software Foundation; either version 2 of the License, or ##
## (at your option) any later version. ##
## ##
###########################################################################
#!/bin/sh
# set RSYNC-Server and base URL
# 1.RSYNC_BASE=ftp-1.gwdg.de::pub/opensuse
# 2.RSYNC_BASE=mirror.yandex.ru::opensuse
RSYNC_BASE=ftp-1.gwdg.de::pub/opensuse
# set PATCH to mirror on local host
PATH_BASE=/srv/pub/opensuse
# openSUSE-11.4-OSS mirror server and local mirror directory
OSS_PATH=distribution/11.4/repo/oss/
OSS_SERVER=$RSYNC_BASE/$OSS_PATH
OSS_MIRROR=$PATH_BASE/$OSS_PATH
# openSUSE-11.4-Non-OSS mirror server and local mirror directory
NONOSS_PATH=distribution/11.4/repo/non-oss/
NONOSS_SERVER=$RSYNC_BASE/$NONOSS_PATH
NONOSS_MIRROR=$PATH_BASE/$NONOSS_PATH
# openSUSE-11.4-Updates mirror server and local mirror directory
UPDATE_PATH=update/11.4/
UPDATE_SERVER=$RSYNC_BASE/$UPDATE_PATH
UPDATE_MIRROR=$PATH_BASE/$UPDATE_PATH
# openSUSE-11.4-Contrib mirror server and local mirror directory
CONTRIBSTD_PATH=repositories/openSUSE:/11.4:/Contrib/standard/
CONTRIBSTD_SERVER=$RSYNC_BASE/$CONTRIBSTD_PATH
CONTRIBSTD_MIRROR=$PATH_BASE/$CONTRIBSTD_PATH
# openSUSE-11.4-Graphics mirror server and local mirror directory
GRAPHICS_PATH=repositories/graphics/openSUSE_11.4/
GRAPHICS_SERVER=$RSYNC_BASE/$GRAPHICS_PATH
GRAPHICS_MIRROR=$PATH_BASE/$GRAPHICS_PATH
# openSUSE-11.4-Mozilla mirror server and local mirror directory
MOZILLA_PATH=repositories/mozilla/openSUSE_11.4/
MOZILLA_SERVER=$RSYNC_BASE/$MOZILLA_PATH
MOZILLA_MIRROR=$PATH_BASE/$MOZILLA_PATH
# openSUSE-11.4-Printing mirror server and local mirror directory
PRINTING_PATH=repositories/Printing/openSUSE_11.4/
PRINTING_SERVER=$RSYNC_BASE/$PRINTING_PATH
PRINTING_MIRROR=$PATH_BASE/$PRINTING_PATH
# openSUSE-11.4-X11:RemoteDesktop mirror server and local mirror directory
X11RD_PATH=repositories/X11:/RemoteDesktop/openSUSE_11.4/
X11RD_SERVER=$RSYNC_BASE/$X11RD_PATH
X11RD_MIRROR=$PATH_BASE/$X11RD_PATH
# Log file
LOGFILE=/var/log/openSUSE_11.4_mirror.log
# Debug file (if you do not want to debug the download process set this option to "/dev/null")
DEBUGFILE=/var/log/openSUSE_11.4_mirror.debug
# Who will be informed in case if anything goes wrong (if you do not want to be informed via mail, set this option to "")
MAILNOTIFY="root@localhost"
# Lock file
LOCK=/var/tmp/openSUSE_11.4_mirror.lock
##################################################################
# NORMALY THERE IS NO NEED TO CHANGE ANYTHING BELOW THIS COMMENT #
##################################################################
function log()
{
echo `date +%d.%m.%Y%t%H:%M:%S` " LOG:" $1 >>${LOGFILE}
}
function error()
{
echo `date +%d.%m.%Y%t%H:%M:%S` " ERROR:" $1 >>${LOGFILE}
if -n "$MAILNOTIFY" ] ; then
echo `date +%d.%m.%Y%t%H:%M:%S` " ERROR:" $1 | mail -s "ERROR while synchronizing openSUSE" $MAILNOTIFY
fi
echo $1 | grep "Lockfile" >/dev/null
if $? = 1 ] ; then
rm -f ${LOCK}
fi
exit 1
}
function status()
{
case "$1" in
0)
log "Synchronization completed."
;;
1)
error "RSYNC: Syntax or usage error"
;;
2)
error "RSYNC: Protocol incompatibility"
;;
3)
error "RSYNC: Errors selecting input/output files, dirs"
;;
4)
error "RSYNC: Requested action not supported: an attempt was made to manipulate 64-bit files on a platform that cannot support them; or an option was specified that is supported by the client and not by the server."
;;
5)
error "RSYNC: Error starting client-server protocol"
;;
6)
error "RSYNC: Daemon unable to append to log-file"
;;
10)
error "RSYNC: Error in socket I/O"
;;
11)
error "RSYNC: Error in file I/O"
;;
12)
error "RSYNC: Error in rsync protocol data stream"
;;
13)
error "RSYNC: Errors with program diagnostics"
;;
14)
error "RSYNC: Error in IPC code"
;;
20)
error "RSYNC: Received SIGUSR1 or SIGINT"
;;
21)
error "RSYNC: Some error returned by waitpid()"
;;
22)
error "RSYNC: Error allocating core memory buffers"
;;
23)
error "RSYNC: Partial transfer due to error"
;;
24)
error "RSYNC: Partial transfer due to vanished source files"
;;
25)
error "RSYNC: The --max-delete limit stopped deletions"
;;
30)
error "RSYNC: Timeout in data send/receive"
;;
*)
error "RSYNC: Unknown error $1"
;;
esac
}
if -f ${LOCK} ] ; then
error "Lockfile ${LOCK} exists."
fi
touch ${LOCK}
# Create local mirror directories if not exists
if ! -d ${OSS_MIRROR} ] ; then
log "Creating local openSUSE-11.4-OSS mirror directory."
mkdir -p ${OSS_MIRROR}
fi
if ! -d ${NONOSS_MIRROR} ] ; then
log "Creating local openSUSE-11.4-Non-OSS mirror directory."
mkdir -p ${NONOSS_MIRROR}
fi
if ! -d ${UPDATE_MIRROR} ] ; then
log "Creating local openSUSE-11.4-Updates mirror directory."
mkdir -p ${UPDATE_MIRROR}
fi
if ! -d ${CONTRIBSTD_MIRROR} ] ; then
log "Creating local openSUSE-11.4-Contrib mirror directory."
mkdir -p ${CONTRIBSTD_MIRROR}
fi
if ! -d ${GRAPHICS_MIRROR} ] ; then
log "Creating local openSUSE-11.4-Graphics mirror directory."
mkdir -p ${GRAPHICS_MIRROR}
fi
if ! -d ${MOZILLA_MIRROR} ] ; then
log "Creating local openSUSE-11.4-Mozilla mirror directory."
mkdir -p ${MOZILLA_MIRROR}
fi
if ! -d ${PRINTING_MIRROR} ] ; then
log "Creating local openSUSE-11.4-Printing mirror directory."
mkdir -p ${PRINTING_MIRROR}
fi
if ! -d ${X11RD_MIRROR} ] ; then
log "Creating local openSUSE-11.4-X11:RemoteDesktop mirror directory."
mkdir -p ${X11RD_MIRROR}
fi
log "Starting openSUSE-11.4-OSS download process."
rsync -av --delete --progress --delay-updates ${OSS_SERVER} ${OSS_MIRROR} >>${DEBUGFILE} 2>&1
status $?
log "Starting openSUSE-11.4-Non-OSS download process."
rsync -av --delete --progress --delay-updates ${NONOSS_SERVER} ${NONOSS_MIRROR} >>${DEBUGFILE} 2>&1
status $?
log "Starting openSUSE-11.4-Updates download process."
rsync -av --delete --progress --delay-updates ${UPDATE_SERVER} ${UPDATE_MIRROR} >>${DEBUGFILE} 2>&1
status $?
log "Starting openSUSE-11.4-Contrib download process."
rsync -av --delete --progress --delay-updates ${CONTRIBSTD_SERVER} ${CONTRIBSTD_MIRROR} >>${DEBUGFILE} 2>&1
status $?
log "Starting openSUSE-11.4-Graphics download process."
rsync -av --delete --progress --delay-updates ${GRAPHICS_SERVER} ${GRAPHICS_MIRROR} >>${DEBUGFILE} 2>&1
status $?
log "Starting openSUSE-11.4-Mozilla download process."
rsync -av --delete --progress --delay-updates ${MOZILLA_SERVER} ${MOZILLA_MIRROR} >>${DEBUGFILE} 2>&1
status $?
log "Starting openSUSE-11.4-Printing download process."
rsync -av --delete --progress --delay-updates ${PRINTING_SERVER} ${PRINTING_MIRROR} >>${DEBUGFILE} 2>&1
status $?
log "Starting openSUSE-11.4-X11:RemoteDesktop download process."
rsync -av --delete --progress --delay-updates ${X11RD_SERVER} ${X11RD_MIRROR} >>${DEBUGFILE} 2>&1
status $?
rm -f ${LOCK}
exit 0
Лишние репозитории можно удалить или заменить своими.
Данный скрипт использую для создания в папке /srv/pub/opensuse локальных копий репозиториев, который потом доступен через HTTP|FTP|NFS, настроенных через yast2-instserver - YaST2 - Installation Server Configuration and Management.
Для перечисленных репозиториев нужно порядка 40GB, но желательно выделять с запасом +30-40%, т.к. во время выполнения синхронизации появляются временные файлы.
Для автоматического подключения локальных репозиториев можно использовать файл - openSUSE11-4.ymp
Большое спасибо за отзывчивость! Скрипт, правда, пока только создал список папок, но и то уже хлеб с маслом.
Если точнее, то при запуске сей скрипт вывалил в “почту” сообщение, заканчивающееся фразой “29.07.2011 01:01:59 ERROR: RSYNC: Unknown error 126”
Стоит заметить, что:
Я поменял “PATH_BASE=/srv/pub/opensuse” на “PATH_BASE=/home/username/repos/opensuse” (именно так, без дроби на конце)
Система стоит на терабайтнике, где 2 Гб идут под своп, 21 под корень, а все остальное - под /home.
Вот содержимое файла /var/log/openSUSE_11.4_mirror.debug:
./msm.sh: line 227: /home/me/repos/opensuse//distribution/11.4/repo/oss/: является директорией
./msm.sh: line 227: /home/me/repos/opensuse//distribution/11.4/repo/oss/: является директорией
./msm.sh: line 227: /home/me/repos/opensuse//distribution/11.4/repo/oss/: является директорией
./msm.sh: line 224: /home/me/repos/opensuse/distribution/11.4/repo/oss/: является директорией
./msm.sh: line 224: /home/me/repos/opensuse/distribution/11.4/repo/oss/: является директорией
Вот содержимое файла /var/log/openSUSE_11.4_mirror.log
На здоровье, на масло меда не обещаю, хотя повидла подсыплю
Дабы расшарить содержимое данных папок в сеть, перечитай:
Т.е. необходимо до установить пакет yast2-instserver который во время своего первого вызова через YaST2 - Installation Server Configuration and Management установит необходимые пакеты служб, через которые во время настройки вы захотите открыть доступ к созданным копиям папок. Если выбирете HTTP то будет доустановлен и настроен web-appache.
Там довольно таки простой и интуитивный интерфейс поэтому я не стал делать описания, однако если эта тема будет востребована и вы примете участие, то можно общими усилиями создать статью в вике. Готовы?
Вполне возможно, дело в том, что только с ftp-1.gwdg.de::pub/opensuse у меня этот скрипт работает без проблем, а вот с yandex были проблемы, насколько я понял у них не совсем корректно работает RSYNC, и при этом они мирорят не все папки (по крайней мере мне так показалось).
Если кто знает другие зеркала с поддержкой протокола RSYNC попробуйте и отпишитесь.
P.S. А для каких задач вы создаете локальное зеркало репозиториев?
Я лично использую установку систем по сети, и обновление рабочих станций в сети предприятия при таком раскладе такой подход себя оправдывает, но для домашней мышины большого смысла в этом нет, если конечно интернет есть.