| 
 ||||||||||||||||||||||||||||||||||||
| 
    Установка пакетов, для которых отсутствуют зависимости 
        
                  
        
		  Время создания: 02.05.2020 12:38		  
		 
		
		 		
		
		 		 
		  Текстовые метки: Debian, ручная установка программ		  
		 		
		
				  
		    Раздел: Компьютер - Linux		   
		
		
		 		 
		  Запись: Kozlov-AE/Tetra/master/base/15877920271nl0o858p3/text.html на raw.githubusercontent.com		  
		 
		
				   | 
 ||||||||||||||||||||||||||||||||||||
| 
    | 
 ||||||||||||||||||||||||||||||||||||
| 
    Бывает что нужно установить пакет .deb для которого в стандартных репозиториях отсутствует нужная версия зависимости. Например, в зависимостях прописан пакет libcurl3, а в системе доступен только libcurl4; или в зависимостях libssl1.0.0, а в системе имеется только libssl1.0.2. Сам по себе такой пакет .deb обычно берётся не из стандартного репозитория, поэтому надеяться, что проблема будет исправлена в будущем, особо не приходится. При этом высока вероятность, что интересующий нас .deb пакет будет нормально работать и с libcurl4 вместо libcurl3 (может даже лучше будет работать) и с libssl1.0.2 вместо libssl1.0.0 — и так далее по аналогии, у вас могут быть свои собственные зависимости, которые вызывают проблемы. Сразу оговорюсь, не стоит делать то, что здесь показано, с драйверами, особенно с драйверами видеокарты — слишком велика вероятность получить систему, которая загружается в чёрный экран. А с какими-нибудь прикладными программами это вполне можно попробовать — в конце-концов, если не заработает, то не заработает — просто удалим её, хуже уже не будет. Я покажу, как подправить список зависимостей в пакете .deb на примере Viber , заодно мы немного познакомимся со структурой пакета .deb. Не то чтобы Viber это мой любимый мессенджер для общения — просто его установка прям классический пример того, о чём я говорил в самом начале: жёстко прописанные зависимости определённых версий, но программа прекрасно работает и с более новыми версиями. Для установки пакета его нужно скачать с официального сайта: 
 Пакет можно установить с помощью команды dpkg и ключей --ignore-depends: 
 но это приведёт к тому, что поломается apt. Будут показываться сообщения о неудовлетворённых зависимостях: 
 И уже не обновить систему, не установить новые пакеты пока не удалите программу, вызывающую эти проблемы: 
 Поэтому лучше пойти другим путём. По большому счёту, файл .deb — это архив, в который собраны файлы программы (исполняемые файлы, файлы настроек, конфигурационные файлы — всё то, что нужно для запуска и работы программы), а также служебные файлы, в которых содержится описание пакета, требуемые зависимости и прочая метаинформация. Распаковываем скаченный пакет deb: 
 Для распаковки используем утилиту ar, которая предназначена для создания, модификации и извлечения из архивов. В результате будут извлечены следующие файлы: 
 Вообще, поскольку data.tar.xz содержит саму программу, то может возникнуть идея просто раскидать файлы в системе по нужным путям — это тоже будет работать, но мы сделаем чуть более сложно, но и более правильно. Распаковываем контрольный архив: 
 Открываем текстовым редактором файл control: 
 
 Найдём там строку, начинающуюся с Depends: 
 То есть, это и есть список зависимостей. Скорее всего, свой установочный файл .deb вы уже пробовали установить и уже и так знаете, каких зависимостей не хватает. Можно сделать проверку следующим образом — берём список, который идёт после Depends:, удаляем запятые, чтобы не нарушить синтаксис apt, и пытаемся установить все эти зависимости просто дописав этот список после sudo apt install, получается следующая команда: 
 Результат: 
 Итак, требуется libcurl3, но в системе есть только libcurl4. Я просто меняю в файле control запись libcurl3 на libcurl4. Ещё один отсутствующий пакет libssl1.0.0. Поскольку указана конкретная версия, можно предположить, что версия в репозитории была обновлена и по этой причине невозможно найти то, что нужно. Ищем по более короткому описанию версии, то есть, например вместо libssl1.0.0 я ищу libssl1: 
 
 Как можно увидеть, найдено целых два варианта: libssl1.0.2 и libssl1.1. На мой взгляд, libssl1.0.2 ближе к libssl1.0.0, поэтому я в файле control меняю запись libssl1.0.0 на libssl1.0.2. 
 Сохраняем и закрываем файл control. Теперь собираем установочный файл — делаем это в обратном разбору порядке. Я уже пробовал, поэтому я знаю, что команда пожалуется на отсутствие файла postrm, поэтому просто создаём пустой файл postrm командой: 
 Упаковываем всё наше «добро» в control.tar.gz: 
 Разберём последнюю команду чуть подробнее. Строки pre{inst,rm} post{inst,rm} раскрываются в следующие: 
 То есть, фактически в создаваемый архив добавляются файлы postinst, postrm, preinst, prerm. Эти файлы представляют собой скрипты, выполняемые на различных этапах установки/удаления: 
 Они являются необязательными — то есть могут отсутствовать. Если команда tar написала, что отсутствует какой-либо файл (например, файл postrm), то отредактируйте эту команду — уберите из списка отсутствующий файл, например, вместо создания postrm можно было записать команду следующим образом: 
 Продолжаем. Вновь собираем deb: 
 Устанавливаем наш пофиксенный пакет: 
 Ошибка «в значении поля «Description» обнаружена пустая строка» Если при установки пакета возникла ошибка: 
 То это означает, что в файле control есть последняя пустая строка — удалите эту пустую строку и пересоберите установочный файл. После этого всё ставится как нужно: 
 
  | 
 ||||||||||||||||||||||||||||||||||||
| 
    
 
 Так же в этом разделе:
  
  
  | 
 ||||||||||||||||||||||||||||||||||||
      
   | 
 ||||||||||||||||||||||||||||||||||||
   
   
  | 
 ||||||||||||||||||||||||||||||||||||
   
  |