Как вручную загрузить отдельные файлы из репозитория OpenIndiana (или Solaris)?

Для сервера в автономном режиме, как мне загрузить пакет с http://pkg.openindiana.org/dev? (или более известный http://pkg.oracle.com/)

Существует ссылка для установки, которая загружает p5i файл, с машиночитаемой информацией о загрузке, но нет URL-адреса http для файла (ов) загружаемого пакета или списка файлов.

6 ответов

Решение

Манифест доступен напрямую http://pkg.openindiana.org/dev/manifest/0/developer%2Fbuild%2Fmake%400.5.11%2C5.11-0.151.1%3A20110912T022544Z.

Остается только выяснить, как получить эти отдельные файлы, перечисленные таким образом

file b8dac4eaeabc7d41b4bff842a2f6b54cb36449d7 chash=f3998eb4b0aa99b3c54682f1a765e19215e15622 group=bin mode=0755 owner=root path=usr/bin/sccsdiff pkg.csize=1620 pkg.size=3798
file 9b1eb9d425c9de60eba5759368160e709fb51143 chash=0de4a47b23c1ac5121c9216ec854b197c18bfe24 group=bin mode=0644 owner=root path=usr/lib/help/locale/C/ad pkg.csize=2201 pkg.size=5762
file 0f594094532464eab978e00d4d3e18519538fe7b chash=e6685b5da6534ef06ad4aa51c4655fe72f98a2f1 group=bin mode=0644 owner=root path=usr/lib/help/locale/C/bd pkg.csize=1082 pkg.size=2089
file a0d207452b8fa6dd62661cd8349fe92ae415de10 chash=67fd628d7578b7fd907eb75b973c91aeb7b06fee group=bin mode=0644 owner=root path=usr/lib/help/locale/C/cb pkg.csize=805 pkg.size=1498
file 6267fe29483aaffdd5ca7dadab0866e3c23024f5 chash=d769eee8c86a2aefb0af1abb6d55dd559b26864e group=bin mode=0644 owner=root path=usr/lib/help/locale/C/cm pkg.csize=1581 pkg.size=3341
file 18691bfa26474c1133b6ac55897f15bba8cf669a chash=55a97bca8ce191bae3621ace062f3192bf0def18 group=bin mode=0644 owner=root path=usr/lib/help/locale/C/cmds pkg.csize=2279 pkg.size=6573
file 614eef6da7707fa4c77e5a0c958ec42eb1f7c68c chash=36df818d773e392d585fd58cf65d3dab93466528 group=bin mode=0644 owner=root path=usr/lib/help/locale/C/co pkg.csize=2284 pkg.size=5010
file 50e3e4dd1731dd07e7633afab6da1825527a312d chash=8e98dd2c2a45cc35993e3c373ecace197b65e900 group=bin mode=0644 owner=root path=usr/lib/help/locale/C/de pkg.csize=2108 pkg.size=4651

Изменить: отдельные файлы могут быть загружены с URL-адресом, как этот пример: http://pkg.openindiana.org/dev/file/0/b8dac4eaeabc7d41b4bff842a2f6b54cb36449d7

Остается только одна вещь. Как установить эти файлы.

Клиенты IPS могут устанавливать пакеты только из репозиториев IPS. Так что, если вы не заинтересованы в добавлении удаленного репозитория в качестве издателя, к счастью, есть еще один вариант - создать архив IPS (p5p).

Имейте в виду, что архив IPS не похож на RPM Linux. Например, вы не можете установить программное обеспечение напрямую из архива IPS. Но вы можете скопировать файл в другие системы, такие как не сетевая система. Думайте об IPS-архиве как о портативном репозитории, потому что именно так вы будете его использовать. Только после того, как вы создадите локальный репозиторий из файла архива IPS, вы сможете использовать пакеты из него.

Архивы IPS позволяют:

  • Загрузите один или несколько пакетов (вместе со всеми необходимыми зависимостями) в файл архива p5p.
  • Создайте локальный репозиторий на основе содержимого файла архива p5p.
  • Установите пакеты из локально созданного репозитория.

Скажем, например, вы заинтересованы в тестировании последней версии пакета. Затем сделайте что-то вроде этого:

pkgrecv -s http://example.com:10000 -d ~/firefox_test.p5p -a -r pkg://userland/web/browser/firefox@45.3.0-2016.0.0.0:20160817T064143Z

Проверьте содержимое пакета с помощью: pkgrepo -s ~/firefox_test.p5p list или вы можете использовать: pkg list -f -g ~/firefox_test.p5p

Добавьте архив IPS в качестве локального репозитория с помощью: pkg set-publisher -p ~/firefox_test.p5p

И, наконец, чтобы установить конкретную версию Firefox, используйте: pkg install firefox@45.3.0-2016.0.0.0:20160817T064143

Самый простой способ - это использовать pkgrecv вытащить пакет из исходного репозитория в локальный репозиторий. IPS - это система сетевых пакетов, поэтому в настоящее время вы не можете устанавливать пакеты из одного файла, как это можно сделать с потоками данных SVr4. Последнее, что я услышал (перед поглощением Oracle), было то, что ребята из pkg5 работали над форматом на диске, но я не думаю, что он был завершен. Я могу проверить с одним из разработчиков, если вам нравится, хотя. Во всяком случае, это кстати.

Что тебе необходимо сделать

  1. Создайте локальное хранилище пакетов:

    pkgrepo create /path/to/localrepo
    
  2. Получить пакеты из удаленного репо:

    pkgrecv -s http://pkg.openindiana.org/dev -d /path/to/localrepo <FMRI_or_glob_of_packages>
    

Я давно это делал (в прошлый раз, когда OpenSolaris находился на грани завершения работы, а мы [команда OpenIndiana] собирали пакеты из OpenSolaris /dev), но вам может понадобиться установить издателя вашего локального репо в качестве openindiana.org издатель:

pkgrepo set -s publisher/prefix=openindiana.org /path/to/localrepo

Начать pkg.depotd например, чтобы pkg можете использовать это:

pkg.depotd -d /path/to/localrepo -p 10000

(Вы, вероятно, хотите настроить это в SMF. Следуйте инструкциям в OpenIndiana вики.)

Затем добавьте свое локальное репо в качестве источника openindiana.org:

pkg set-publisher -g http://localhost:10000 openindiana.org

И наконец...

Нет, на самом деле нет более простого способа сделать это. Это одна из причин, по которой мне не нравится переход на IPS.

Я создал портативную утилиту для таких вещей:

http://www.bolthole.com/solaris/ipsutil/README

Каждый отдельный файл в IPS сжимается с использованием gzip, так что вы можете использовать вручную curl а также gzip -dc снести и распаковать файл.

Например: получение sccsdiff (файл sha1 hash b8dac4eaeabc7d41b4bff842a2f6b54cb36449d7) как упомянуто Джорджем Бэйли...

curl http://pkg.openindiana.org/dev/file/0/b8dac4eaeabc7d41b4bff842a2f6b54cb36449d7 | gzip -dc > sccsdiff

Вы также можете проверить хэш sha1 несжатого файла...

$ sha1sum sccsdiff
b8dac4eaeabc7d41b4bff842a2f6b54cb36449d7  sccsdiff

Более подробная информация доступна на вики OmniOS: Извлечение файлов пакета IPS без pkg(1)

Пакет в репозитории IPS имеет смысл только в контексте фактической установки пакета с помощью команды pkg(1) по сети. Пакет не представлен как один файл в репозитории IPS; вместо этого файл манифеста для пакета отслеживает различные биты. Насколько я понимаю, это позволяет проводить эффективные обновления, поскольку необходимо передавать только измененные файлы.

Одним из вариантов является зеркальное отображение хранилища IPS в локальной системе или в другой доступной системе. Есть инструкции на старом сайте OpenSolaris и в вики OpenIndiana. Однако прошло много времени с тех пор, как я отразил репозиторий IPS, поэтому я не могу комментировать точность инструкций по этим ссылкам.

Вероятно, есть и другие варианты, но я не знаю их по макушке.

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