Как создать локальный репозиторий

Вы не поверите, а найти толковое руководство по сабжу в интернетах так и не получилось.

Если где чего и упоминается, то в связи с утилитой rsync.
Покрутил так и сяк, полазал в info и мануале, без глубокого погружения сумел понять только то, что, видимо, зеркалирование происходит через /dev/ass1 - а точнее, только при условии, что на стороне сервера эти репозитории раздаются все той же rsync. При попытке тупо забить в качестве источника url c http://… утилита ругается по поводу того, что ей нифига не понятно. Пробовал разное - ругань идет то на непонятные команды, то на Network is unreachable (101), то еще на что. Надоело как-то.

Хотелось бы найти что-нибудь относительно адекватное, вроде apt-mirror у Ubuntu (Debian?). В конце концов, ну неужели нет софтины, которая просто тупо перетянет все, что надо, через http/ftp, не городя излишнего?

P.S. Если что - пожалуйста, не судите строго. На линуксе меньше года, до суси была убунта. Изучать . привык методом тыка, однако в разумных предлах - потому я и здесь. Подскажите, пожалуйста, чего делать с вышеозначенной байдой. Заранее спасибо.

Как то тоже ковырял тему, интересное решение нашел тут - Shell Skript: openSUSE 11.3 Mirror Script.
Вот мой немного подправленный скрипт под openSUSE 11.4:


###########################################################################
##                                                                       ##
##                        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


<metapackage xmlns:os="http://opensuse.org/Standards/One_Click_Install" xmlns="http://opensuse.org/Standards/One_Click_Install">
  <group>
    <repositories>
      <repository recommended="true">
        <name>openSUSE-11.4-OSS</name>
        <summary></summary>
        <description></description>
        <url>http://server.in-you.lan/pub/opensuse/distribution/11.4/repo/oss/</url>
      </repository>
      <repository recommended="true">
        <name>openSUSE-11.4-Non-OSS</name>
        <summary></summary>
        <description></description>
        <url>http://server.in-you.lan/pub/opensuse/distribution/11.4/repo/non-oss/</url>
      </repository>
      <repository recommended="true">
        <name>openSUSE-11.4-Updates</name>
        <summary></summary>
        <description></description>
        <url>http://server.in-you.lan/pub/opensuse/update/11.4/</url>
      </repository>
      <repository recommended="true">
        <name>openSUSE-11.4-Contrib</name>
        <summary></summary>
        <description></description>
        <url>http://server.in-you.lan/pub/opensuse/repositories/openSUSE:/11.4:/Contrib/standard/</url>
      </repository>
      <repository recommended="true">
        <name>openSUSE-11.4-Factory:Contrib</name>
        <summary></summary>
        <description></description>
        <url>http://download.opensuse.org/repositories/openSUSE:/Factory:/Contrib/openSUSE_11.4/</url>
      </repository>
      <repository recommended="true">
        <name>openSUSE-11.4-Graphics</name>
        <summary></summary>
        <description></description>
        <url>http://server.in-you.lan/pub/opensuse/repositories/graphics/openSUSE_11.4/</url>
      </repository>
      <repository recommended="true">
        <name>openSUSE-11.4-Mozilla</name>
        <summary></summary>
        <description></description>
        <url>http://server.in-you.lan/pub/opensuse/repositories/mozilla/openSUSE_11.4/</url>
      </repository>
      <repository recommended="true">
        <name>openSUSE-11.4-Printing</name>
        <summary></summary>
        <description></description>
        <url>http://server.in-you.lan/pub/opensuse/repositories/Printing/openSUSE_11.4/</url>
      </repository>
      <repository recommended="true">
        <name>openSUSE-11.4-X11:RemoteDesktop</name>
        <summary></summary>
        <description></description>
        <url>http://server.in-you.lan/pub/opensuse/repositories/X11:/RemoteDesktop/openSUSE_11.4/</url>
      </repository>
    </repositories>
  </group>
</metapackage>

P.S. Если в тему и помог - добавь “хомелеона” (кликни на звезду шерифа под моим постом :slight_smile: )

Большое спасибо за отзывчивость! Скрипт, правда, пока только создал список папок, но и то уже хлеб с маслом.
Если точнее, то при запуске сей скрипт вывалил в “почту” сообщение, заканчивающееся фразой “29.07.2011 01:01:59 ERROR: RSYNC: Unknown error 126”

Стоит заметить, что:

  1. Я поменял “PATH_BASE=/srv/pub/opensuse” на “PATH_BASE=/home/username/repos/opensuse” (именно так, без дроби на конце)
  2. Система стоит на терабайтнике, где 2 Гб идут под своп, 21 под корень, а все остальное - под /home.
  3. Я пробовал вместо ftp-1.gwdg.de::pub/opensuse использовать mirror.yandex.ru::opensuse
  4. Вот содержимое файла /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/: является директорией

  1. Вот содержимое файла /var/log/openSUSE_11.4_mirror.log

29.07.2011 00:52:51 LOG: Creating local openSUSE-11.4-OSS mirror directory.
29.07.2011 00:52:51 LOG: Creating local openSUSE-11.4-Non-OSS mirror directory.
29.07.2011 00:52:51 LOG: Creating local openSUSE-11.4-Updates mirror directory.
29.07.2011 00:52:51 LOG: Creating local openSUSE-11.4-Contrib mirror directory.
29.07.2011 00:52:51 LOG: Creating local openSUSE-11.4-Graphics mirror directory.
29.07.2011 00:52:51 LOG: Creating local openSUSE-11.4-Mozilla mirror directory.
29.07.2011 00:52:51 LOG: Creating local openSUSE-11.4-Printing mirror directory.
29.07.2011 00:52:51 LOG: Creating local openSUSE-11.4-X11:RemoteDesktop mirror directory.
29.07.2011 00:52:51 LOG: Starting openSUSE-11.4-OSS download process.
29.07.2011 00:52:59 ERROR: RSYNC: Unknown error 126
29.07.2011 00:54:05 LOG: Starting openSUSE-11.4-OSS download process.
29.07.2011 00:54:12 ERROR: RSYNC: Unknown error 126
29.07.2011 01:01:45 LOG: Starting openSUSE-11.4-OSS download process.
29.07.2011 01:01:59 ERROR: RSYNC: Unknown error 126
29.07.2011 01:10:37 LOG: Starting openSUSE-11.4-OSS download process.
29.07.2011 01:10:50 ERROR: RSYNC: Unknown error 126
29.07.2011 01:16:09 LOG: Starting openSUSE-11.4-OSS download process.
29.07.2011 01:16:14 ERROR: RSYNC: Unknown error 126

Вот, такие дела. Поскольку времени в обрез, выкладываю сюда (так бы сам покрутил) - вдруг у кого что похожее бывало…

На здоровье, на масло меда не обещаю, хотя повидла подсыплю :slight_smile:
Дабы расшарить содержимое данных папок в сеть, перечитай:

Т.е. необходимо до установить пакет yast2-instserver который во время своего первого вызова через YaST2 - Installation Server Configuration and Management установит необходимые пакеты служб, через которые во время настройки вы захотите открыть доступ к созданным копиям папок. Если выбирете HTTP то будет доустановлен и настроен web-appache.
Там довольно таки простой и интуитивный интерфейс поэтому я не стал делать описания, однако если эта тема будет востребована и вы примете участие, то можно общими усилиями создать статью в вике. Готовы?

Вполне возможно, дело в том, что только с ftp-1.gwdg.de::pub/opensuse у меня этот скрипт работает без проблем, а вот с yandex были проблемы, насколько я понял у них не совсем корректно работает RSYNC, и при этом они мирорят не все папки (по крайней мере мне так показалось).
Если кто знает другие зеркала с поддержкой протокола RSYNC попробуйте и отпишитесь.

P.S. А для каких задач вы создаете локальное зеркало репозиториев?
Я лично использую установку систем по сети, и обновление рабочих станций в сети предприятия при таком раскладе такой подход себя оправдывает, но для домашней мышины большого смысла в этом нет, если конечно интернет есть.