Я пытаюсь загрузить все пакеты, и необходимые зависимости от сервера с рабочим интернет-соединением и передать их на сервере без интернет-соединения и затем установить их через Кв. - добираются.
У меня есть два решения загрузить пакеты:
apt-get --print-uris --yes install pkgspec | grep ^\' | cut -d\' -f2 > downloads.list
Бесполезно, потому что это работает только на пакеты и зависимости, которые не загружены и уже установлены на сервере с рабочим интернет-соединением.
aptitude download '?reverse-depends(package)'
Это загружает все пакеты и зависимости также, если Вам не нужны они.
Кто-либо знает лучшее решение загрузить пакет, и зависимости должны были быть установлены на новой установке сервера Ubuntu 16.04?
Я хочу создать сценарий, который идет канавка список пакетов и загружает все пакеты и зависимости автоматически.
Затем мне нужно решение использовать, это упаковывает на офлайновом компьютере с Кв. - добираются. Идея состоит в том, чтобы создать локальный способный репозиторий, который позволяет, Вы для использования локальных пакетов через Кв. - добираетесь.
Таким образом, я использую эту команду для создания Packages.gz, который содержит информацию обо всех пакетах, которые были загрузкой в первом шаге.
dpkg-scanpackages . /dev/null | gzip > Packages.gz
Затем я добавляю новый источник к/etc/apt/sources.list.d/и работаю склонный - получают обновление.
deb [trusted=yes] file:///tmp/dpkgs /
Теперь у меня есть проблема, что я могу, например, установить апача (все еще некоторые ошибки). Но если я хочу установить php, я получил следующую ошибку.
root@ubuntu:~# apt-get install php
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
php : Depends: php7.0 but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
У кого-либо есть рабочее решение для этой проблемы?Спасибо.
Я никогда не пробовал это, таким образом, YMMV.
Выезд это и способно-в режиме офлайн .
Они утверждают, что сделали точно, что Вы хотите.
Lan Morrison сделал isorespin.sh
сценарий, который сделает изображение из команд, которые Вы даете и с добавленной командой, может иметь все обновления того времени на изображении и установить любую способную установку, которую Вы хотите на изображении установки, которое это делает. Я использовал его, и это работает очень хорошее.
Для получения дополнительной информации см.: Настройка Ubuntu ISOs: Документация и примеры того, как использовать isorespin.sh
.
Моя рекомендация состоит в том, чтобы сделать туннели ssh, я предполагаю, что Вы регистрируетесь к серверу с соединением SSH от машины, у кого есть интернет-соединение, следовательно можно попытаться использовать обратные туннели, чтобы иметь доступ, по крайней мере, к желаемому repos... Выполните эти шаги:
Войдите в систему своего сервера со следующей командой:
ssh -R 127.0.0.1:9800:yourrepo.address:80 youruser@ServerWithoutInternetConnectionAddress
После того, как вошел в систему, Ваш сервер добавляет следующую строку к/etc/hosts:
127.0.0.1 yourrepo.adress
В Вашем конфигурационном файле репозитория в /etc/apt/sources.list
или в /etc/apt/sources.list.d/repofile.list
измените свой адрес репозитория путем добавления используемого порта (я использовал 9800, хотя это может быть любой порт выше, чем 1 023):
deb [arch=amd64] http://yourrepo.address:9800/ubuntu-mirror/ xenial main
deb [arch=amd64] http://yourrepo.address:9800/ubuntu-mirror/ xenial-updates main
deb [arch=amd64] http://yourrepo.address:9800/ubuntu-java/ xenial main
deb [arch=amd64] http://yourrepo.address:9800/ubuntu-production/ xenial multiverse
Теперь apt-get update
и apt-get install
должен работать. Полагайте, что у Вас может быть столько же туннелей сколько репозитории, только необходимо изменить исходный порт.
Например, полагайте, что у Вас есть официальный репозиторий человечности в /etc/apt/sources.list
и другой в /etc/apt/sources.list.d/repofile.list
Я могу использовать порт для 9 801 для us.archive.ubuntu.com
и порт 9800 для /etc/apt/sources.list.d/repofile.list
как следующее:
/etc/apt/sources.list
deb http://us.archive.ubuntu.com:9801/ubuntu/ xenial main restricted universe multiverse
deb-src http://us.archive.ubuntu.com:9801/ubuntu/ xenial main restricted multiverse
deb http://us.archive.ubuntu.com:9801/ubuntu/ xenial-security main restricted universe multiverse
deb http://us.archive.ubuntu.com:9801/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://us.archive.ubuntu.com:9801/ubuntu/ xenial-security main restricted multiverse
deb-src http://us.archive.ubuntu.com:9801/ubuntu/ xenial-updates main restricted multiverse
/etc/apt/sources.list
deb [arch=amd64] http://yourrepo.address:9800/ubuntu-mirror/ xenial main
deb [arch=amd64] http://yourrepo.address:9800/ubuntu-mirror/ xenial-updates main
deb [arch=amd64] http://yourrepo.address:9800/ubuntu-java/ xenial main
deb [arch=amd64] http://yourrepo.address:9800/ubuntu-production/ xenial multiverse
Путем добавления этого к /etc/hosts
127.0.0.1 yourrepo.adress us.archive.ubuntu.com
И войдите в систему от машины с интернет-соединением как следующее:
ssh -R 127.0.0.1:9800:yourrepo.address:80 -R 127.0.0.1:9801:us.archive.ubuntu.com:80 youruser@ServerWithoutInternetConnectionAddress
PS: Полагайте, что, если Вашему репозиторию нужен ключ, необходимо будет извлечь ключ (от машины, которая имеет ключ apt-key export KEY_ID >> key.asc
) и добавьте его с помощью следующей команды:
apt-key add key.asc