Как установить файл deb, с помощью dpkg -i или apt?


600

У меня есть пакет deb для установки.

Должен ли я установить dpkg -i my.deb, или по apt?

Будут ли оба хорошо решать проблему зависимости от программного обеспечения?

Если по apt, как я могу установить с deb по apt?


Вы можете использовать, aptitudeкоторый удаляет ненужные пакеты, а также.
Рамеш

2
Я рекомендую не использовать напрямую dpkg. В случае одиночного deb, используйте gdebi, а в случае нескольких deb - локальный репозиторий APT .
Pandya

5
почему ......... @Pandya
Тим

2
@Tim, потому dpkgчто не разрешает зависимости.
Пандя

1
@Tim gdebi определяет отсутствующие зависимости, может загружать и устанавливать (используя apt), может устанавливать и настраивать (используя dpkg).
Пандя

Ответы:


771

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

Как только загрузка завершена, он вызывает dpkgустановку всех этих файлов, удовлетворяющих всем зависимостям.

Итак, если у вас есть .debфайл:

  • Вы можете установить его используя:

    sudo dpkg -i /path/to/deb/file
    sudo apt-get install -f
    
  • Вы можете установить его, используя sudo apt install ./name.deb(или sudo apt install /path/to/package/name.deb).

    В старых apt-getверсиях вы должны сначала переместить файл deb в /var/cache/apt/archives/каталог. Для обоих после выполнения этой команды она автоматически загрузит свои зависимости.

  • Установите gdebiи откройте файл .deb, используя его ( щелкните правой кнопкой мыши -> Открыть с помощью ). Он установит ваш пакет .deb со всеми его зависимостями.

    ( Примечание : APT поддерживает индекс пакета, который является базой данных доступных пакетов, доступных в репозитории, заданном в /etc/apt/sources.listфайле и в /etc/apt/sources.list.dкаталоге. Все эти методы не смогут удовлетворить программную зависимость, если зависимости, требуемые deb, отсутствуют в индексе пакета .)


Зачем использовать sudo apt-get install -fпослеsudo dpkg -i /path/to/deb/file (упоминается в первом методе)?

От man apt-get:

 -f, --fix-broken
           Fix; attempt to correct a system with broken dependencies in place.

Когда dpkgустанавливается пакет и зависимость пакета не удовлетворяется, он оставляет пакет в «ненастроенном» состоянии, и этот пакет считается поврежденным.

sudo apt-get install -f Команда пытается исправить этот поврежденный пакет, установив отсутствующую зависимость.


2
@Tim, apt-get предназначен для установки пакетов из репозитория. Он поддерживает список пакетов, а также адрес соответствующего хранилища. Поэтому простое перемещение файла .dev, которого нет в списке пакетов apt, в каталог / var / cache / apt / archives не будет работать. Потому что всякий раз, когда вы пытаетесь установить этот пакет, используя apt-get, он ищет свой репозиторий, которого нет. Для этого вы должны создать локальный репозиторий, который я считаю бесполезным.
g_p

1
@g_p спасибо! Я немного запутался в вашем ответе выше. вы пишете: «(это будет работать, если пакет .deb присутствует в списке пакетов apt)» - я не понимаю, что здесь имеется в виду. Как можно убедиться, что пакет .deb присутствует в списке пакетов apt?
BKSpurgeon

1
@BKSpurgeon, я добавил немного информации в своем ответе. Узнать, присутствует ли пакет в индексе или нет apt-cache search <package name>. Вы также можете использовать apt-cache policy <package name>, что даст дополнительную информацию.
g_p

1
Будут ли эти методы выполнять проверку подписи, обычно выполняемую apt? Или возможно ли таким способом установить файл с подделанным .deb?
Boann

8
Современный apt-get можно использовать для простой установки пакета apt-get install /path/to/package/name.deb. Было бы здорово, если бы автор этого ответа решил интегрировать это. Если нет, я добавлю этот ответ когда-нибудь, когда у меня будет достаточно повторений
Сэм Хартман,

91

Установите ваш foo.debфайл с помощью dpkg -i foo.deb. Если есть ошибки с неразрешенными зависимостями, запустите их apt-get install -fпозже.


Я Unable to locate packageпопробовал этот путь и озадачился. Я использовал как в Windows просто имя пакета после переключения в папку архива. Должно быть ./<file name>для Unix, если в текущей папке или полный путь. То есть если debнет в папке присутствует в PATH.
Алексей Мартианов

60

Вот лучший способ установить .debфайл в Ubuntu из командной строки:

sudo gdebi skype.deb

Если вы еще не gdebiустановили, установите его, используя sudo apt install gdebi-core.

Почему гдеби?

gdebiбудет искать все зависимости .debфайла и установит их, прежде чем пытаться установить .debфайл. Я считаю это гораздо предпочтительнее, чем sudo dpkg -i skype.deb && sudo apt install -f. Последний слишком стремится удалить зависимости в определенных ситуациях. Например, когда я пытался установить Skype, он попытался удалить 96 (!) Пакетов, включая такие пакеты, как compizи unity! gdebiдал гораздо более четкое сообщение об ошибке:

 $ sudo gdebi skype.deb
 Cannot install 'libqtgui:i386'

( Кстати, вот решение этой конкретной проблемы .)


работал отлично, спасибо! Кстати, может быть, что попытка удаления была о том, что переходные / временные пакеты? или ты думаешь это действительно сломало бы систему?
Водолей Сила

Чувак, я столкнулся с проблемой с твоим решением. Я пытался установить Rstudio. Он автоматически нашел старую версию R для меня. При использовании решения @g_p мне удалось установить только Rstudio.
Dr_Hope

39

Вы можете установить локальный пакет .deb:

sudo apt install ./foo.deb

Убедитесь, что вы указали локальный относительный или абсолютный путь ( ./если он находится в текущем каталоге), иначе он будет искать foo.debв удаленных репозиториях и потерпит неудачу.


2
Это должно быть помечено как правильный ответ.
Раэль Гугельмин Кунья

@RaelGugelminCunha не на 100% правильно. sudo apt install libstdc ++ 6_8-20180414-1ubuntu2_amd64.deb apt: ошибка при загрузке общих библиотек: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: неверный заголовок ELF
mvladk

2
@mvladk Пожалуйста, обратите внимание на синтаксис: вы пропустили ./перед debфайлом.
Раэль Гугельмин Кунья

Абсолютно лучший / самый простой ответ.
Джерардв

15

Проверьте зависимости с dpkg -I my.debи apt-get installранее dpkg -i my.deb.

Может быть , вы можете скопировать my.debв систему /var/cache/apt/archivesи установить его непосредственно , apt-getно я никогда не пробовал. Не работает, apt-getи dpkgищет пакеты, перечисленные в архивах.


Благодарю. в своем первом предложении вы подразумеваете apt-get install my.debпод apt-get install? Это установить из файла deb? Зачем нам dpkg -i my.debпосле этого?
Тим

Я всегда устанавливал локальные .debs с dpkg -i, я понимаю, что aptне могу установить их, кроме каталога, в /var/cache/...который загружаются (я могу ошибаться)
Alex

Кажется, что-то apt-get install ./my.debбудет делать, потому что он выводит много вещей. Что оно делает?
Тим

Это делает слишком много :-) не работает, смотрите @Igor_Dvoretskyi ответ просто идеален, я забыл о-f
Alex

5

Самый простой ответ - использовать dpkg при запуске dpkg -i packagename.deb. Затем вы можете удалить его, запустив dpkg -r packagename.deb.
apt-getэто установщик более высокого уровня, основанный на dpkg, и, как таковой, вы можете apt-get install packagename.deb.
Было бы полезно добавить его в каталог apt-get archives ( /var/cache/apt/archives), чтобы вы могли ссылаться на него как на пакет с зависимостями, а не на отдельный архив .deb.
Кроме того, добавив его в свой каталог архивов apt-get, у вас есть возможность использовать зависимости с apt-get install packagename. Это позволит вам установить его с любыми добавленными зависимостями вместо автономной системы на основе архива dpkg.


5

Современный apt-get может быть использован для простой установки пакета apt-get install /path/to/package/name.deb.

(должно быть сделано как правка для верхнего ответа, но оно было отклонено - см. https://unix.stackexchange.com/posts/159114/edit )


Это не сработалоapt 1.0.9.8.4 for amd64 compiled on Dec 11 2016 09:48:19
Бруно Броноски

-3

Это очень просто, если я хочу установить Chrome.

Установите файл Chrome как:

dpkg -i googlechrome.deb.

Иногда существует вероятность получения ошибок зависимости, таких как:

dpkg: dependency problems prevent configuration of google-chrome-stable:
google-chrome-stable depends on libappindicator1; however:
Package libappindicator1 is not installed.

Таким образом, чтобы решить вышеупомянутые проблемы, вам нужно добавить зависимости; дать следующую команду:

apt-get install -f

После выполнения вышеуказанной команды на ваш компьютер будут добавлены зависимости, и ваш .debфайл пакета ( ) Debian будет установлен.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.