Как создать локальный репозиторий, доступный из локальной среды chroot для создания O / S?

Я заинтересован в создании своего собственного ремикса Ubuntu и делаю это с Ubuntu Mini Remix ISO.

Для этого я монтирую образ диска и chroot в него способом аналогично Ubuntu Mini Remix ISO .

Моя иерархия каталогов для моих сборников такова:

home
  |
  \builds
     |
     +build(n)
     |  |
     |  +mnt
     |  +extract-cd
     |  +edit
     |  \&
     |
     +build(n+1)
     |  |
     |  \&
     |
     \sources (various debfiles/ISOs)

Каждая сборка имеет $ HOME, установленную в ./ edit / root, поэтому все, что выше иерархии (./mnt, ./extract-cd и т. д.), несовместимо с средой chroot.

Есть ли способ для пакетов, загружаемых chroot's apt для зеркалирования, например, каталога ~ / builds / cache (или, даже лучше, ~ / builds / cache / [ubuntu-version]), который затем может быть использован как репозиторий для других сборников?

Такая настройка сэкономит мне большую пропускную способность, так как только пакеты, которые еще не были загружены / зеркалированы в репозиторий, нужно будет вытащить из Интернета.

В любом случае, заранее заблаговременно благодарим любые предложения / подсказки.

1
задан 15 November 2014 в 04:42

2 ответа

Я никогда не использовал Ubuntu Mini Remix ISO, но есть несколько способов, которые я использовал для выполнения этого при запуске сборки vmbuilder:

Установите apt-cacher-ng в вашей системе (или сервер в вашей локальной сети) и использовать его в качестве прокси для своих сборок. Это создает локальный кеш пакетов, которые используются во время сборки. Таким образом, после первой сборки вы будете использовать кеш для любого пакета, который использовался ранее, и не имеет более новой версии вверх по течению. Он по-прежнему требует подключения к сети, потому что он связывается с репозиториями вверх, чтобы получить более новые версии или пакеты, которые вы еще не использовали. Второе преимущество заключается в том, что он кэширует только необходимые файлы, что значительно меньше, чем полное зеркало.

EDIT: apt-cahcer-ng не нужно настраивать каким-либо образом - просто установите его с помощью sudo apt-get install apt-cacher-ng. Есть некоторые расширенные параметры конфигурации, которые мне никогда не нужны. Вы можете найти инструкции по настройке ваших клиентов (сборок) для использования кеша здесь.

Установите apt-cacher-ng в вашей системе (или сервере в вашей локальной сети) и используйте его как прокси-сервер для своих сборок. Это создает локальный кеш пакетов, которые используются во время сборки. Таким образом, после первой сборки вы будете использовать кеш для любого пакета, который использовался ранее, и не имеет более новой версии вверх по течению. Он по-прежнему требует подключения к сети, потому что он связывается с репозиториями вверх, чтобы получить более новые версии или пакеты, которые вы еще не использовали. Второе преимущество заключается в том, что он кэширует только необходимые файлы, что значительно меньше, чем полное зеркало.
1
ответ дан 24 May 2018 в 01:52
  • 1
    Зеркалирование репозитория полностью исключено. Не могли бы вы предоставить более конкретный ответ, касающийся apt-cacher-ng, показывающий, как я могу настроить тип реализации, которую вы описываете? – Snyper 20 November 2014 в 05:56
  • 2
    Я обновил ответ, чтобы отразить использование apt-cacher-ng. – BostonHiker 20 November 2014 в 08:56
  • 3
    Edit: У меня может быть только время, чтобы попробовать это сегодня вечером. Я знаю, что время щедрости сокращается, и за это мне жаль, но я хочу быть уверенным, что это работает. – Snyper 21 November 2014 в 00:02
  • 4
    Не интересуется этой щедростью :-), поэтому не стоит беспокоиться. – BostonHiker 21 November 2014 в 01:57
  • 5
    Я не мог заставить apt-cacher-ng работать для меня. Сожалею. – Snyper 21 November 2014 в 18:38

Одна из стратегий, которая могла бы работать, заключалась в том, чтобы установить (с опцией --bind) общую папку в кеш-память chroot. Этот кеш находится в /var/cache/apt/archives/

. Используя этот метод, он сделает так, чтобы любая команда, выполняемая apt, работала с общим локальным архивом.

Примеры

[d3 ] Имея два общих ресурса chroot в общем архиве apt
sudo mount --bind ~/builds/cache <chroot location>/var/cache/apt/archives
sudo mount --bind ~/builds/cache <another chroot location>/var/cache/apt/archives

, это создало бы ~ / builds / cache и оба архива chroot, работающие с одним и тем же каталогом.

Havind two chroot делится архивом локальной установки

sudo mount --bind /var/cache/apt/archives <chroot location>/var/cache/apt/archives
sudo mount --bind /var/cache/apt/archives <another chroot location>/var/cache/apt/archives

Подобно первому, но теперь основная установка и оба chroots будут использовать один и тот же apt-архив, т. е. apt in все три будут выглядеть в одном месте для загруженных файлов .deb.

(Я думал, что пакеты не заботятся непосредственно о выпуске ubuntu, а также о версиях связанных пакетов. Поэтому вам может не понадобиться беспокоиться о отдельные папки для каждой версии, и вы даже можете использовать архив пакетов локальной установки.)

Очистка

Наконец, и что важно, в разделе об очистке chroot при подготовке для окончательной сборки вы не хотите запускать apt clean. Так как apt теперь использует одну и ту же папку для всех chroots setup таким образом, apt clean по существу очищает архив для всех chroots сразу. Вместо этого внутри chroot запустите:

umount /var/cache/apt/archives

Это будет эффективно «apt clean» архива только из chroot, где выполняется команда, оставив общую папку нетронутой.

[d11 ] Bind mounts manual info

Ниже приведена прямая копия с страницы man mount. Пожалуйста, взгляните на это, чтобы получить полное объяснение mount -bind и, возможно, увидеть другие способы использования bind.

The bind mounts.
          Since  Linux  2.4.0  it  is possible to remount part of the file
          hierarchy somewhere else.  The call is:

                 mount --bind olddir newdir

          or by using this fstab entry:

                 /olddir /newdir none bind

          After this call the same contents are accessible in two  places.
          One  can  also  remount  a single file (on a single file).  It's
          also possible to use the bind mount to create a mountpoint  from
          a regular directory, for example:

                 mount --bind foo foo

          The bind mount call attaches only (part of) a single filesystem,
          not possible submounts.  The  entire  file  hierarchy  including
          submounts is attached a second place by using:

                 mount --rbind olddir newdir

          Note  that  the filesystem mount options will remain the same as
          those on the original mount point,  and  cannot  be  changed  by
          passing  the  -o  option  along  with --bind/--rbind.  The mount
          options can be changed by a separate remount command, for  exam‐
          ple:

                 mount --bind olddir newdir
                 mount -o remount,ro newdir

          Note  that  the behavior of the remount operation depends on the
          /etc/mtab file.  The first command stores the 'bind' flag in the
          /etc/mtab  file  and  the second command reads the flag from the
          file.  If you have a system without the /etc/mtab file or if you
          explicitly  define  source  and  target  for the remount command
          (then mount(8) does not read /etc/mtab), then you  have  to  use
          the  bind  flag  (or  option)  for the remount command too.  For
          example:

                 mount --bind olddir newdir
                 mount -o remount,ro,bind olddir newdir

          Note that remount,ro,bind will  create  a  read-only  mountpoint
          (VFS  entry),  but the original filesystem superblock will still
          be writable, meaning that the olddir will be writable,  but  the
          newdir will be read-only.
1
ответ дан 24 May 2018 в 01:52
  • 1
    Спасибо за ответ, но это только половина того, что я хотел. Как использовать каталог ~ / builds / cache в качестве репозитория для дальнейших сборок? И должны быть две копии, одна из которых монтируется в / var / cache / apt / archives, а другая - в качестве репо, или же можно будет также монтировать локальный репозиторий chroot в / var / cache / apt / архивы одновременно? – Snyper 20 November 2014 в 05:55
  • 2
    Я отредактирую ответ с информацией о странице man на --bind. Важно понимать, что делает команда монтирования. Это делает два каталога в один каталог в двух местах. Таким образом, для повторного использования вы просто используете аналогичную команду mount. Я отредактирую ответ, чтобы узнать, могу ли я уточнить. – user7134 21 November 2014 в 01:33
  • 3
    Благодарю. Как я сказал BostonHiker, может быть, до сегодняшнего вечера я не могу попробовать эти ответы. – Snyper 21 November 2014 в 02:23

Другие вопросы по тегам:

Похожие вопросы: