Можно ли перенести каталог установки определенного пакета на другой компьютер, чтобы избежать установки?

Я установил один пакет на моем компьютере Linux, и я хочу установить тот же пакет на другой Linux-машине. Можно ли напрямую скопировать установленный каталог с одного компьютера на другой? Я имею в виду клонирование каталога установки.

1
задан 30 June 2017 в 01:36

2 ответа

Учитывая программное обеспечение, установленное с APT / DPKG

В большинстве Linux-систем, включая Ubuntu, нет единого каталога установки для пакета, хотя иногда стороннее программное обеспечение может иметь все свои файлы в одном каталоге.

Вместо этого пакет содержит набор файлов, которые размещаются в нескольких местах файловой системы. Запуск whereis в пакете показывает каталоги, которые содержат его основные части:

$ whereis gimp gimp: /usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

Мы можем видеть, что gimp имеет файлы не менее /usr/bin, /usr/lib, /etc и /usr/share , все из которых содержат много файлов, принадлежащих другим пакетам.

Вы можете использовать опцию dpkg-query -L или --listfiles для чтения списка файлов пакета, известного dpkg:

$ dpkg --listfiles g++ /. /usr /usr/bin /usr/share /usr/share/doc /usr/share/man /usr/share/man/man1 /usr/bin/g++ /usr/bin/x86_64-linux-gnu-g++ /usr/share/doc/g++ /usr/share/man/man1/g++.1.gz /usr/share/man/man1/x86_64-linux-gnu-g++.1.gz

Обратите внимание, что список включает все родительские каталоги, хотя пакет g ++ явно не предоставил их (для получения только файлов вы можете сделать что-то вроде for i in $(dpkg --listfiles g++); do [[ -f "$i" ]] && echo "$i"; done, но некоторые установки пакетов создают каталоги).

Тот, который для g++ является очень маленьким списком файлов ...

$ dpkg --listfiles gimp | wc -l 254 $ dpkg --listfiles xkb-data | wc -l 331 $ dpkg --listfiles linux-image-4.10.0-24-generic | wc -l 1312

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

Что это сводится к что для программного обеспечения, которое устанавливается с APT, на сегодняшний день самый простой способ установить его - с APT. Если вы хотите сохранить загрузку в каждой системе, см. Раздел «Как установить программное обеспечение или пакеты без Интернета (в автономном режиме)».

Некоторые считают, что этот распределенный стиль установки является ... ошибкой. И многие из них что-то делают с этим, например, создают дистрибутивы, которые устанавливают пакеты дискретно или изобретают кросс-платформенные решения для упаковки, такие как привязки, которые позволяют дискретную установку, включая все зависимости.

1
ответ дан 18 July 2018 в 11:00

Учитывая программное обеспечение, установленное с APT / DPKG

В большинстве Linux-систем, включая Ubuntu, нет единого каталога установки для пакета, хотя иногда стороннее программное обеспечение может иметь все свои файлы в одном каталоге.

Вместо этого пакет содержит набор файлов, которые размещаются в нескольких местах файловой системы. Запуск whereis в пакете показывает каталоги, которые содержат его основные части:

$ whereis gimp gimp: /usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

Мы можем видеть, что gimp имеет файлы не менее /usr/bin, /usr/lib, /etc и /usr/share , все из которых содержат много файлов, принадлежащих другим пакетам.

Вы можете использовать опцию dpkg-query -L или --listfiles для чтения списка файлов пакета, известного dpkg:

$ dpkg --listfiles g++ /. /usr /usr/bin /usr/share /usr/share/doc /usr/share/man /usr/share/man/man1 /usr/bin/g++ /usr/bin/x86_64-linux-gnu-g++ /usr/share/doc/g++ /usr/share/man/man1/g++.1.gz /usr/share/man/man1/x86_64-linux-gnu-g++.1.gz

Обратите внимание, что список включает все родительские каталоги, хотя пакет g ++ явно не предоставил их (для получения только файлов вы можете сделать что-то вроде for i in $(dpkg --listfiles g++); do [[ -f "$i" ]] && echo "$i"; done, но некоторые установки пакетов создают каталоги).

Тот, который для g++ является очень маленьким списком файлов ...

$ dpkg --listfiles gimp | wc -l 254 $ dpkg --listfiles xkb-data | wc -l 331 $ dpkg --listfiles linux-image-4.10.0-24-generic | wc -l 1312

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

Что это сводится к что для программного обеспечения, которое устанавливается с APT, на сегодняшний день самый простой способ установить его - с APT. Если вы хотите сохранить загрузку в каждой системе, см. Раздел «Как установить программное обеспечение или пакеты без Интернета (в автономном режиме)».

Некоторые считают, что этот распределенный стиль установки является ... ошибкой. И многие из них что-то делают с этим, например, создают дистрибутивы, которые устанавливают пакеты дискретно или изобретают кросс-платформенные решения для упаковки, такие как привязки, которые позволяют дискретную установку, включая все зависимости.

1
ответ дан 24 July 2018 в 19:42

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

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