Страницы

Поиск по вопросам

Показаны сообщения с ярлыком apt-get. Показать все сообщения
Показаны сообщения с ярлыком apt-get. Показать все сообщения

вторник, 7 апреля 2020 г.

Почему появляются дубли одного пакета в разных путях и как исправить ситуацию?

#ubuntu #debian #apt_get

                    
По какой-то причине у меня оказались установленными две версии пакета ansible. 
Я удалил один из них с помощью apt-get purge, но второй остался установлен.

ppa:ansible/ansible это официальный репозиторий ansible (кто бы мог подумать)
ubuntu.local — это наше локальное зеркало.

$ cat /etc/apt/sources.list.d/ppa_ansible_ansible_trusty.list
http://ppa.launchpad.net/ansible/ansible/ubuntu

$ sudo apt-cache policy ansible
ansible:
  Installed: (none)
  Candidate: 2.0.0.2-1ppa~trusty
  Version table:
     2.0.0.2-1ppa~trusty 0
        500 http://ppa.launchpad.net/ansible/ansible/ubuntu/ trusty/main amd64 Packages
     1.7.2+dfsg-1~ubuntu14.04.1 0
        100 http://ubuntu.local/ubuntu/ trusty-backports/universe amd64 Packages
     1.5.4+dfsg-1 0
        500 http://ubuntu.local/ubuntu/ trusty/universe amd64 Packages

$ dpkg -l | grep ansible
(возвращает пустую строку)

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

$ ansible --version
ansible 1.9.4
  configured module search path = None

$ which ansible
/usr/local/bin/ansible


Похоже, apt-get устанавливает его в другое место

$ sudo apt-get install ansible
$ ls /usr/bin/ansible -l
-rwxr-xr-x 1 root root 3944 Jan 15 04:33 /usr/bin/ansible


Понятно, что я могу просто поменять переменную $PATH и будет использоваться нужная
мне версия. Но я хочу разобраться в причине дублирования и полностью его устранить.
    


Ответы

Ответ 1



/usr/local/bin/ansible — этот файл явно появился здесь в обход пакетного менеджера. проверить это можно, сделав запрос к базе данных dpkg: $ dpkg -S /usr/local/bin/ansible и получив в ответ, что no path found matching pattern. Но я хочу разобраться в причине дублирования и полностью его устранить. вероятно, вы запустили какой-нибудь «инсталлятор» (install.sh, pip install что-нибудь и т.д. и т.п.) Понятно, что я могу просто поменять переменную $PATH вот этого делать, по-моему, не стоит. если у использованного «инсталлятора» нет функции «убрать весь мусор, который он разложил по разным уголкам файловой системы», то, в конце концов, можно удалить/переименовать (например, в /usr/local/bin/ansible-1.9.4) неиспользуемый файл.

воскресенье, 8 марта 2020 г.

Получить список пакетов, установленных пользователем

#debian #apt_get


apt-get иногда выдаёт сообщение, что некоторые пакеты были установлены автоматически
и их можно удалить командой apt-get autoremove. Значит, где-то хранится признак, по
какой причине был установлен тот или иной пакет.

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


Ответы

Ответ 1



с помощью «тёплого лампового» aptitude: $ aptitude search -F '%p' '!~M ~i' с помощью apt-mark: $ apt-mark showmanual дату/время запуска (а также параметры и ещё много другой информции) программы apt-get можно найти в файлах /var/log/apt/*, программы aptitude — в файлах /var/log/aptitude*, программы dpkg (её ведь можно запустить и вручную для установки пакета из скачанного «вручную» файла) — в файлах /var/log/dpkg.log*. что плохо — все эти файлы ротируются и (насколько помню, но стоит это уточнить в настройках logrotate) со временем удаляются. доп. информация: поисковые шаблоны aptitude настройка того, как отображаются пакеты в aptitude дополнение по поводу даты установки. вообще-то она не фиксируется в «базе данных» dpkg, но более или менее релевантный результат можно получить, например, по дате последней модификации файлов /var/lib/dpkg/info/имя-пакета* (например, имя-пакета[:архитектура].list, содержащий список файлов пакета). при распаковке архивов, содержащихся в файле с пакетом, программа dpkg указанные файлы (как минимум) перезаписывает (более точный алгоритм можно узнать в документации dpkg, или непосредственно в её исходных кодах). как-нибудь так: #!/bin/bash export arch=$(dpkg --print-architecture) dostat() { stat --printf="$1\t%y\n" $2 } apt-mark showmanual | while read p; do if [ -f /var/lib/dpkg/info/$p.list ]; then dostat $p /var/lib/dpkg/info/$p.list elif [ -f /var/lib/dpkg/info/$p:$arch.list ]; then dostat $p /var/lib/dpkg/info/$p:$arch.list else echo $p fi done пример вывода: 2vcard 2010-03-25 11:56:42.000000000 +0300 abcde 2013-07-20 20:50:31.000000000 +0400 abiword 2013-07-20 22:48:50.000000000 +0400 abook 2013-07-20 22:48:51.000000000 +0400 acl 2013-07-20 22:46:20.000000000 +0400 acpi 2013-07-20 20:50:34.000000000 +0400 acpid 2013-07-20 20:50:34.000000000 +0400 adduser 2013-07-20 20:48:04.000000000 +0400 alien 2013-07-20 20:50:38.000000000 +0400 alsa-base 2013-07-20 22:45:48.000000000 +0400

воскресенье, 12 января 2020 г.

Установка пакетов на несколько машин одновременно

#debian #ssh #apt_get


Есть сеть из n машин под управлением ОС Debian и доступ к ним по ssh. Также есть
один диск с репозиторием.

Как параллельно установить набор пакетов с этого диска на все n машин?
    


Ответы

Ответ 1



на какой-нибудь общедоступной машине «расшариваете» содержимое диска по любому подходящиему протоколу: http, nfs, samba, ftp и т.д. на каждой из n машин добавляете соответствующую строчку в /etc/apt/sources.list (а лучше — в отдельный файл в /etc/apt/sources.list.d/). на каждой из n машин обновляете список пакетов (sudo apt-get update). на кажлой из n машин устанавливаете нужные пакеты (sudo apt-get install ...). как выполнить одну и ту же команду на множестве машин параллельно, я описывал, например, здесь: https://ru.stackoverflow.com/a/439394/178576

Ответ 2



ansible/puppet/chief/salt/etc ?

суббота, 11 января 2020 г.

Репозиторий не содержит файла Release

#linux #ubuntu #apt_get


Версия ОС Ubuntu 16.04.3 LTS

Поставил из deb файла приложение pomodoro. Чтобы получать обновление для программы,
по инструкции с сайта, добавил репозиторий: 

curl -L https://download.opensuse.org/repositories/home:kamilprusko/xUbuntu_16.04/Release.key
| sudo apt-key add -
sudo sh -c "echo 'deb https://download.opensuse.org/repositories/home:kamilprusko/xUbuntu_16.04/
/' >> /etc/apt/sources.list.d/gnome-pomodoro.list"


На попытку получить данные о пакетах apt-get update отвечает: 

W: Репозиторий «https://download.opensuse.org/repositories/home:kamilprusko/xUbuntu_16.04
 Release» не содержит файла Release.
N: Данные из этого репозитория нельзя аутентифицировать, и поэтому потенциально из
небезопасно использовать.
N: Смотрите справочную страницу apt-secure(8) о создании репозитория и настройке
пользователя.
E: Не удалось получить https://download.opensuse.org/repositories/home:kamilprusko/xUbuntu_16.04/Packages
 Protocol "http" not supported or disabled in libcurl
E: Некоторые индексные файлы не скачались. Они были проигнорированы или вместо них
были использованы старые версии.


При этом в логе все записи относящиеся к целевому репозиторию имеют вид: 

Игн:10 https://download.opensuse.org/repositories/home:kamilprusko/xUbuntu_16.04
 Translation-en


Смотрел похожие вопросы, (например), но это решение мне не подходит судя по всему.
По предлагаемой в том топике команде tail -n 100 /etc/apt/sources.list /etc/apt/sources.list.d/*;
lsb_release -a получаю следующее (комментарии удалил):

==> /etc/apt/sources.list <==
deb http://ru.archive.ubuntu.com/ubuntu/ xenial main restricted
deb http://ru.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb http://ru.archive.ubuntu.com/ubuntu/ xenial universe
deb http://ru.archive.ubuntu.com/ubuntu/ xenial-updates universe
deb http://ru.archive.ubuntu.com/ubuntu/ xenial multiverse
deb http://ru.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
deb http://ru.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe
multiverse
deb http://archive.canonical.com/ubuntu xenial partner
deb http://security.ubuntu.com/ubuntu xenial-security main restricted
deb http://security.ubuntu.com/ubuntu xenial-security universe
deb http://security.ubuntu.com/ubuntu xenial-security multiverse


==> /etc/apt/sources.list.d/gnome-pomodoro.list <==
deb https://download.opensuse.org/repositories/home:kamilprusko/xUbuntu_16.04/ /
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:    16.04
Codename:   xenial

    


Ответы

Ответ 1



при обращении по указанному адресу сервер возвращает 301-й код — перенаправление на правильный адрес (у которого перед именем репозитория указан слэш): $ curl -s -D - -o /dev/null 'https://download.opensuse.org/repositories/home:kamilprusko/xUbuntu_16.04/Release' HTTP/1.1 301 Moved Permanently Date: Wed, 18 Oct 2017 15:42:36 GMT Server: Apache/2.2.34 (Linux/SUSE) Location: http://download.opensuse.org/repositories/home:/kamilprusko/xUbuntu_16.04/Release Content-Length: 381 Content-Type: text/html; charset=iso-8859-1 именно так (/kamilprusko, а не kamilprusko) должен быть указан путь к репозиторию в obs-e. см. пример в документации: https://en.opensuse.org/openSUSE:Build_Service_Debian_builds#Configuring_sources.list если в файл /etc/apt/sources.list.d/*.list внести такое исправление, то apt нормально получит всё, что запрашивает у сервера. доп. информация: apt does not handle HTTP redirects.

пятница, 10 января 2020 г.

Многопоточная работа apt-get

#linux #apt_get


Есть новая рабочая машина, постепенно устанавливаю нужный софт. Для установки использую
apt-get, некоторые пакеты .deb и .run качаю и устанавливаю через Ubuntu Software Center.

Я определенно могу выполнять apt-get install в нескольких инстансах терминала одновременно,
но стоит ли так делать? Может ли привести к ошибкам при установке?

Можно ли одновременно выполнять apt-get install и установку через Software Center?
    


Ответы

Ответ 1



можно дать команду на установку нескольких пакетов сразу: $ sudo apt-get install пакет1 пакет2 ... $ sudo dpkg -i файл1 файл2 ... установка пакета — это не атомарное действие, а состоит из нескольких взаимосвязанных, поэтому при вызове всех упомянутых программ они устанавливают блокировку, препятствующую одновременному запуску нескольких экземпляров программ, вносящих изменения в пакетную базу. ubuntu software center, как и прочие графические обёртки вокруг пакетной базы, для непосредственных манипуляций (в зависимости от реализации) либо напрямую вызывают упомянутые программы, либо действуют через библиотечные функции, и в конечном итоге тоже устанавливают ту же самую блокировку. небольшое отступления с изложением некоторых подробностей: apt, apt-get, aptitude — собственно установкой пакета не занимаются, а предназначены для: взаимодействия с репозиториями: скачивания списков пакетов и файлов с пакетами разрешения зависимостей и конфликтов на основе информации из списков пакетов и из уже установленных пакетов принятия решений о том, какие именно пакеты устанавливать, какие удалять, какие обновлять а собственно для установки/удаления/обновления пакетов эти программы вызывают уже dpkg, чей алгоритм работы достаточно сложен и подробно изложен в документации. многие из всех выше-перечисленных действий (выполняемых как apt*, так и dpkg), будучи выполнены одновременно в произвольном порядке, могут приводить к конфликтам и несогласованности. потому одновременный запуск этих программ нежелателен и (где возможно) запрещается блокировками. доп. информация из Часто задаваемые вопросы о Debian GNU/Linux: Основы системы управления пакетами Debian Инструменты управления пакетами Debian Поддержание обновлений системы Debian

понедельник, 6 января 2020 г.

У вас отложены (held) битые пакеты

#debian #apt_get


При попытке установить libreoffice-core (или другие пакеты), выскакивает ошибка:

Пакеты, имеющие неудовлетворённые зависимости:
 libreoffice-core : Зависит: libreoffice-common (> 1:4.3.3) но он не будет установлен
                    Зависит: ure (>= 4.2~) но он не будет установлен
                    Зависит: libboost-date-time1.55.0 но он не будет установлен
                    Зависит: libclucene-contribs1 (>= 2.3.3.4) но он не будет установлен
                    Зависит: libclucene-core1 (>= 2.3.3.4) но он не будет установлен
                    Зависит: libcmis-0.4-4 (>= 0.4.0) но он не будет установлен
                    Зависит: libgltf-0.0-0 (>= 0.0.2) но он не будет установлен
                    Зависит: libglu1-mesa но он не будет установлен или
                                    libglu1
                    Зависит: libharfbuzz-icu0 (>= 0.9.18) но он не будет установлен
                    Зависит: libhunspell-1.3-0 (>= 1.3.3) но он не будет установлен
                    Зависит: libicu52 (>= 52~m1-1~) но он не будет установлен
                    Зависит: libmythes-1.2-0 но он не будет установлен
                    Зависит: libodfgen-0.1-1 но он не будет установлен
                    Зависит: librevenge-0.0-0 но он не будет установлен
                    Зависит: libstdc++6 (>= 4.9) но он не будет установлен
                    Зависит: uno-libs3 (>= 4.3.0~alpha) но он не будет установлен
E: Невозможно исправить ошибки, у вас отложены (held) битые пакеты.


Как это можно попытаться вылечить? У меня Debian 8 Jessie x64.

UPD_0: Удалил все из репозиториев, осталось только:

deb http://mirror.yandex.ru/debian/ jessie main
deb-src http://mirror.yandex.ru/debian/ jessie main

deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main


sources.list.d тоже чист.

Для "лечения" пытался выполнить:

sudo dpkg --configure -a
sudo apt-get install -f
sudo apt-get --fix-broken install
sudo rm /var/lib/apt/lists/* -vf //Не удалилась какая-то папка
sudo apt-get clean
sudo apt-get autoclean 
sudo apt-get autoremove


Вывод apt-cache policy libreoffice-common libreoffice-core:

libreoffice-common:
  Установлен: (отсутствует)
  Кандидат:   1:4.3.3-2+deb8u2
  Таблица версий:
     1:5.1.3~rc2-3 0
        100 /var/lib/dpkg/status
     1:4.3.3-2+deb8u2 500
        500 http://ftp.ru.debian.org/debian jessie/main amd64 Packages
        500 http://ftp.ru.debian.org/debian jessie/main i386 Packages
libreoffice-core:
  Установлен: (отсутствует)
  Кандидат:   1:4.3.3-2+deb8u2
  Таблица версий:
     1:4.3.3-2+deb8u3 0
        100 /var/lib/dpkg/status
     1:4.3.3-2+deb8u2 500
        500 http://ftp.ru.debian.org/debian jessie/main amd64 Packages

    


Ответы

Ответ 1



$ apt-cache policy libreoffice-common libreoffice-common: Установлен: (отсутствует) Кандидат: 1:4.3.3-2+deb8u2 Таблица версий: 1:5.1.3~rc2-3 0 100 /var/lib/dpkg/status 1:4.3.3-2+deb8u2 500 500 http://ftp.ru.debian.org/debian jessie/main amd64 Packages 500 http://ftp.ru.debian.org/debian jessie/main i386 Packages вы подключали репозиторий(-ии) с более новыми версиями пакетов. информация об этих версиях хранится в /var/lib/dpkg/status. удалите из этого файла информацию про версию 1:5.1.3~rc2-3 пакета libreoffice-common (начиная со строки Package: libreoffice-common и до следующей строки, начинающейся со слова Package:, обязательно сохранив разделяющую описания пакетов пустую строку). и обновите список пакетов: $ sudo apt-get update но вообще, вероятно, более правильным было бы удаление конфигурации неустанавливающихся пакетов. начать можно с того же libreoffice-common: $ sudo apt-get purge libreoffice-common

Ответ 2



Попробуй обнови репы в Software & Update, и поставь галочки(включи): Официально поддерживается (main), DFSG-совместимое ПО с зависимостями от несвободного ПО (contrib), Не-DFCG-совместимое ПО (non-free), Исходный код. Всё это в первой вкладке Software & Update, мне помогло.

суббота, 28 декабря 2019 г.

Как поставить последнюю версию git?

#linux #git #debian #apt_get


У меня веб-сервер на debian поставил git через apt-get install git поставилась версия
2.1.4 но на хабре была статья про версию 2.7 и в ней есть несколько интересных фишек,
которые меня заинтересовали.

Как правильно обновить git на сервере до последней версии? Нужно свежие репозитории
вручную добавлять? И как перед установкой узнать какая версия установится?
    


Ответы

Ответ 1



судя по информации о пакете git в разных релизах дистрибутива debian gnu/linux, у вас стоит релиз jessie (доступная версия пакета: 1:2.1.4-2.1+deb8u4. символы 1: означают «эпоху», это «внутренняя кухня» пакетирования, upstream-версия программы здесь — 2.1.4). уточнить версию релиза можно командой: $ lsb_release -rc Release: 8.9 Codename: jessie если программа lsb_release отсутствует, то можно просто посмотреть файлы в /etc такой, например, командой (пример вывода как раз на системе с релизом jessie): $ cat /etc/*release* PRETTY_NAME="Debian GNU/Linux 8 (jessie)" NAME="Debian GNU/Linux" VERSION_ID="8" VERSION="8 (jessie)" ID=debian HOME_URL="http://www.debian.org/" SUPPORT_URL="http://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" путей поставить более новую версию программы много. наименее «болезненный» — подключить репозиторий jessie-backports и установить имеющуюся там версию 1:2.11.0-3~bpo8+1. согласно инструкциям с сайта backports.debian.org: надо добавить описание репозитория: $ echo "deb http://mirror.yandex.ru/debian jessie-backports main" | sudo tee /etc/apt/sources.list.d/jbp.list и обновить список пакетов: $ sudo apt-get update теперь будет доступна для установки более новая версия пакета git (в данном случае — 1:2.11.0-3~bpo8+1 0): $ apt-cache policy git git: Installed: (none) Candidate: 1:2.1.4-2.1+deb8u4 Version table: 1:2.11.0-3~bpo8+1 0 100 http://mirror.yandex.ru/debian/ jessie-backports/main amd64 Packages 1:2.1.4-2.1+deb8u4 0 500 http://security.debian.org/ jessie/updates/main amd64 Packages 1:2.1.4-2.1+deb8u3 0 500 http://deb.debian.org/debian/ jessie/main amd64 Packages вот её и устанавливайте: $ sudo apt-get install --no-install-recommends -t=jessie-backports git=1:2.11.0-3~bpo8+1 --no-install-recommends — не ствить пакеты, рекомендумые в устанавливаемом пакете (на сервере имеет смысл всегда пользоваться такой опцией или даже настроить apt на такое умолчальное поведение) -t=jessie-backports — брать при необходимости пакеты из репозитория jessie-backports git=1:2.11.0-3~bpo8+1 — установить пакет git именно указанной версии в конце концов проверяем, что же установилось: $ git --version git version 2.11.0

Ответ 2



Можно установить Git последней версии из репозитория нестабильного дистрибутива. echo 'deb http://mirror.yandex.ru/debian unstable main' | sudo tee /etc/apt/sources.list.d/unstable.list sudo apt-get update sudo apt-get install git/unstable А чтобы нечайно вся система не обновилась до нестабильного состояния, создайте файл /etc/apt/preferences.d/unstable со следующим содержимым Package: * Pin: release a=unstable Pin-Priority: 90 Package: git Pin: release a=unstable Pin-Priority: 200 Кстати, обратите внимание, в последней версии Git 2.14.1 была исправлена серьёзная уязвимость, настоятельно рекомендуется обновиться. Кроме того, у вас на сервере, судя по всему, стоит Debian Jessie, срок поддержки которого уже меньше года. Так же стоит обновить.

Ответ 3



Последняя версия 2.14 2.14 выпущена 2017-08-04, а 2.7 зарелизили почти 2 года назад 2015-10-04 https://en.wikipedia.org/wiki/Git Попробуйте: sudo add-apt-repository ppa:git-core/ppa -y sudo apt-get update sudo apt-get install git -y git --version

понедельник, 23 декабря 2019 г.

Как найти информацию про установленный пакет на Linux?

#linux #debian #apt_get #package #install


Доброго времени суток.

Вопрос довольно глобального характера. Я не могу понять саму концепцию.

Как найти информацию по работе установленного пакета? Где найти примеры использования?
Где расположены в системе файлы, файлы с примерами, мануалы? Какие методы использует
этот пакет, чтобы к нему обратиться?

На данный момент я представляю себе поиск информации так:


Поиск на форумах и сайтах статей и вопросов от тех, кто уже делал похожий проект
и устанавливал данные пакеты (оттуда и знание о существовании самого пакета)
Stackoverflow
Git репозиторий проекта и его Вики
apt-cache show [пакет] - обычно лишь общие слова о работе пакета, которые я уже знаю
man [пакет] - не работает, потому что нужно знать название методов данного пакета


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

А хотелось бы получить хотя бы название методов, чтобы дальше уже копать по ним,
примеры использования. В идеале структурированную информацию о пакете

Для примера: установил я пакеты sudo apt install zbar-tools python-zbar python-qrtools
- для распознавания qr кода на изображении или же sudo apt-get install bluetooth bluez
blueman (это для работы с bluetooth на Raspberry Pi). Я знаю о существовании мифического
файла blescan.py с примером работы, но не могу найти его расположения.

Буду признателен за объяснения и разжёвывание общих принципов.
    


Ответы

Ответ 1



начинать можно с просмотра файлов, входящих в пакет: $ dpkg -L имя.пакета например, рассмотрим пакет bluez. исполняемые файлы обычно располагаются в каталогах, содержащих в пути строку bin: $ dpkg -L bluez | grep bin /bin /bin/hciconfig /usr/sbin /usr/bin /usr/bin/bluetoothctl /usr/bin/bccmd /usr/bin/btmon /usr/bin/rctest /usr/bin/hciattach /usr/bin/hcitool /usr/bin/sdptool /usr/bin/ciptool /usr/bin/l2ping /usr/bin/l2test /usr/bin/rfcomm /usr/bin/gatttool /usr/sbin/bluetoothd видим ряд исполняемых файлов, начиная с hciconfig и заканчивая bluetoothd. man-страницы обычно располагаются в каталогах, содержащих в пути строку man: $ dpkg -L bluez | grep man /usr/share/man /usr/share/man/man8 /usr/share/man/man8/bluetoothd.8.gz /usr/share/man/man1 /usr/share/man/man1/bluetoothctl.1.gz /usr/share/man/man1/btmon.1.gz /usr/share/man/man1/l2test.1.gz /usr/share/man/man1/hid2hci.1.gz /usr/share/man/man1/l2ping.1.gz /usr/share/man/man1/rctest.1.gz /usr/share/man/man1/rfcomm.1.gz /usr/share/man/man1/ciptool.1.gz /usr/share/man/man1/hcitool.1.gz /usr/share/man/man1/hciconfig.1.gz /usr/share/man/man1/hciattach.1.gz /usr/share/man/man1/bccmd.1.gz /usr/share/man/man1/sdptool.1.gz видим ряд man-страниц, начиная с bluetoothd и заканчивая sdptool. просмотреть их можно командами man bluetoothd, ..., man sdptool. документацию (иногда содержащую примеры) можно отобрать по признаку «содержит строку doc в пути»: $ dpkg -L bluez | grep doc /usr/share/doc /usr/share/doc/bluez /usr/share/doc/bluez/README.Debian.gz /usr/share/doc/bluez/changelog.Debian.gz /usr/share/doc/bluez/changelog.Debian.amd64.gz /usr/share/doc/bluez/NEWS.Debian.gz /usr/share/doc/bluez/changelog.gz /usr/share/doc/bluez/copyright нередко, если документации много, её выделют в отдельный пакет, имя которого заканчивается суффиксом -doc (а иногда ещё и с дополнительным разбиением на языки, с добавлением суффикса -язык). например, документация к пакету aptitude содержится в таких пакетах: $ apt-cache search aptitude doc aptitude-doc-cs - Czech manual for aptitude, a terminal-based package manager aptitude-doc-en - English manual for aptitude, a terminal-based package manager aptitude-doc-es - Spanish manual for aptitude, a terminal-based package manager aptitude-doc-fi - Finnish manual for aptitude, a terminal-based package manager aptitude-doc-fr - French manual for aptitude, a terminal-based package manager aptitude-doc-it - Italian manual for aptitude, a terminal-based package manager aptitude-doc-ja - Japanese manual for aptitude, a terminal-based package manager aptitude-doc-ru - Russian manual for aptitude, a terminal-based package manager

пятница, 13 декабря 2019 г.

Очистка кэша apt-get

#apt_get #ubuntu


Как правильно удалить закачанные архивы пакетов apt-get? Я посмотрел в папку
/var/cache/apt/archives

и нашел там список пакетов *.deb, можно их просто удалить, но непонятно, правильно
ли это.    


Ответы

Ответ 1



Для очистки локального кэша пакетов используется apt-get с командой clean: sudo apt-get clean Подробнее - в man apt-get.

Ответ 2



В процессе установки через APT в каталоге /var/cache/apt/archives кэшируются файлы пакетов, и их можно удалить. # apt-get autoclean # удаляет только неиспользованные файлы пакетов # apt-get clean # удаляет все файлы из кэша

вторник, 10 декабря 2019 г.

Установка последней версии Git на Ubuntu

#ubuntu #git #apt_get


Ubuntu 14.04. Устанавливаю Git:

sudo apt-get install git


git --version показывает, что установлена 1.9.0. При этом последний релиз уже 2.6.0
и я хочу установить его. Как это сделать?
    


Ответы

Ответ 1



Для этого есть специальный персональный архив пакетов (PPA) add-apt-repository ppa:git-core/ppa apt-get update # установить, если ещё нет apt-get install git # если уже установлен, то обновить apt-get install --only-upgrade git

суббота, 30 ноября 2019 г.

Можно ли установить библиотеку без root прав?

#cpp #linux #c #apt_get


Мне нужно установить библиотеку libjansson. С root правами я бы ввёл:


apt-get install libjansson-dev



но у меня нет root прав.
Можно ли поставить эту библиотеку без root прав? 

Пожалуйста, дайте примеры, если так можно (то что делать надо).
    


Ответы

Ответ 1



Скачиваем: aptitude download libjansson4 Распаковываем: dpkg --extract libjansson4_2.7-3_amd64.deb Смотрим ls: libjansson4_2.7-3_amd64.deb usr В каталоге usr будет всё что нужно.

Ответ 2



Для установки библиотеки в любую директорию. Скачайте исходный код библиотеки libjansson При конфигурировании укажите нужную директорию ./configure --prefix=/home/user/local соберите и установите. make install Также настройте переменные окружения LD_LIBRARY_PATH PKG_CONFIG_PATH чтобы программы могли найти вашу библиотеку export LD_LIBRARY_PATH=/home/user/local/lib:$LD_LIBRARY_PATH export PKG_CONFIG_PATH=/home/user/local/lib/pkgconfig/:$PKG_CONFIG_PATH

Ответ 3



Докинь совместимую версию(в основном надо смотреть libc) в папку с исполнимым файлом и она будет загружвться без установки. Или в папку из LD_PATH_LIBRARY или можно воспользоваться LD_PRELOAD

понедельник, 15 июля 2019 г.

Aptitude. Шаблоны поиска

apt-get purge avahi*
Выдаст все пакеты, которые начинаются на avahi (символ * - любые символы после)
aptitude purge avahi*
Тоже для aptitude выведет : Не удалось найти пакеты, содержащих «avahi*» в своём имени или описании.
Так что, для aptitude шаблоны не действуют, или есть другой способ? Или можно как-то настроить?


Ответ

аналогом этой команды:
$ sudo apt-get purge 'avahi*'
можно считать примерно такую конструкцию:
$ sudo aptitude purge '?installed?name(^avahi)'
или, более коротко:
$ sudo aptitude purge '~i~n^avahi'

руководство по поисковым терминам

среда, 10 июля 2019 г.

Роутинг node js

Доброго времени суток. пишу сайт вопреки node js. И в главном файле у меня есть два роутера app get
app.get('/:actReg',function(req, res, next) { pid = req.originalUrl.substring(15, 30); req.session.linkPass=pid;
someq.pool.query('UPDATE Users SET Active ="'+ 1 +'" WHERE Email="'+ rows[0].email +'"', function (err, rows, field) { }); if (rows.length > 0) { newForm = '

' + '

'+'Ваша активація пройшла успішно'+'

' + '
'; } else { newForm = 'Посилання не дійсне' } res.f=newForm; next() });
}); var lang = require('./bin/langKey.js'); app.get('/:actReg', function(req, res, next) { languageSess = lang.funcLang(req.session.lang, 'missPassword'); languageSess.text_1 = res.f; languageSess.title = 'a3boot'; var men = menu.rightSide(req,res,next, languageSess); languageSess.menu = men; res.render('missPassword', languageSess)
});

app.get('/:missPass',function(req, res, next) {
pid = req.originalUrl.substring(10, 25); req.session.linkPass=pid; someq.pool.query('Select * From missPassword WHERE link ="' + pid + '"', function (err, rows, field) {
if (rows.length > 0) { newForm = '

'
} else { newForm = 'Посилання не дійсне' } res.f=newForm; next() });
});
app.get('/:missPass', function(req, res, next) { languageSess = lang.funcLang(req.session.lang, 'contacts'); languageSess.text_1 = res.f; languageSess.title = 'a3boot'; res.render('missPassword', languageSess) });
Но почему-то node js рендерит только роутер, который прописан выше(в файле). Тоисть даже если вызывать /:missPass роутерит к /:actReg. Возможно это изза того что он види ":" и неважно что там дальше. Но как это пофиксить?


Ответ

даже если вызывать /:missPass роутерит к /:actReg
Для примера, в строке /:missPass спрятано две сущности сразу:
Шаблон /* для совпадения путевой части URL (имя переменной распознать из пути невозможно, его там просто нет) Шаблон /missPass для разбора путевой части на поля в запросе
Вот и получается, что у /:actReg и у /:missPass шаблоны для совпадения одинаковые: /*
Как починить? Сделать правила так, чтобы шаблоны для совпадения были разными. Например, сделав опознавательные префиксы:
/actReg/:actReg /missPass/:missPass
/missPass/* != /actReg/*, шаблоны для совпадения разные, победа.

пятница, 21 июня 2019 г.

Почему появляются дубли одного пакета в разных путях и как исправить ситуацию?

По какой-то причине у меня оказались установленными две версии пакета ansible. Я удалил один из них с помощью apt-get purge, но второй остался установлен.
ppa:ansible/ansible это официальный репозиторий ansible (кто бы мог подумать) ubuntu.local — это наше локальное зеркало.
$ cat /etc/apt/sources.list.d/ppa_ansible_ansible_trusty.list http://ppa.launchpad.net/ansible/ansible/ubuntu
$ sudo apt-cache policy ansible ansible: Installed: (none) Candidate: 2.0.0.2-1ppa~trusty Version table: 2.0.0.2-1ppa~trusty 0 500 http://ppa.launchpad.net/ansible/ansible/ubuntu/ trusty/main amd64 Packages 1.7.2+dfsg-1~ubuntu14.04.1 0 100 http://ubuntu.local/ubuntu/ trusty-backports/universe amd64 Packages 1.5.4+dfsg-1 0 500 http://ubuntu.local/ubuntu/ trusty/universe amd64 Packages
$ dpkg -l | grep ansible (возвращает пустую строку)
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ ansible --version ansible 1.9.4 configured module search path = None
$ which ansible /usr/local/bin/ansible
Похоже, apt-get устанавливает его в другое место
$ sudo apt-get install ansible $ ls /usr/bin/ansible -l -rwxr-xr-x 1 root root 3944 Jan 15 04:33 /usr/bin/ansible
Понятно, что я могу просто поменять переменную $PATH и будет использоваться нужная мне версия. Но я хочу разобраться в причине дублирования и полностью его устранить.


Ответ

/usr/local/bin/ansible — этот файл явно появился здесь в обход пакетного менеджера.
проверить это можно, сделав запрос к базе данных dpkg:
$ dpkg -S /usr/local/bin/ansible
и получив в ответ, что no path found matching pattern

Но я хочу разобраться в причине дублирования и полностью его устранить.
вероятно, вы запустили какой-нибудь «инсталлятор» (install.sh, pip install что-нибудь и т.д. и т.п.)
Понятно, что я могу просто поменять переменную $PATH
вот этого делать, по-моему, не стоит. если у использованного «инсталлятора» нет функции «убрать весь мусор, который он разложил по разным уголкам файловой системы», то, в конце концов, можно удалить/переименовать (например, в /usr/local/bin/ansible-1.9.4) неиспользуемый файл.

вторник, 11 июня 2019 г.

Репозиторий не содержит файла Release

Версия ОС Ubuntu 16.04.3 LTS
Поставил из deb файла приложение pomodoro. Чтобы получать обновление для программы, по инструкции с сайта, добавил репозиторий:
curl -L https://download.opensuse.org/repositories/home:kamilprusko/xUbuntu_16.04/Release.key | sudo apt-key add - sudo sh -c "echo 'deb https://download.opensuse.org/repositories/home:kamilprusko/xUbuntu_16.04/ /' >> /etc/apt/sources.list.d/gnome-pomodoro.list"
На попытку получить данные о пакетах apt-get update отвечает:
W: Репозиторий «https://download.opensuse.org/repositories/home:kamilprusko/xUbuntu_16.04 Release» не содержит файла Release. N: Данные из этого репозитория нельзя аутентифицировать, и поэтому потенциально из небезопасно использовать. N: Смотрите справочную страницу apt-secure(8) о создании репозитория и настройке пользователя. E: Не удалось получить https://download.opensuse.org/repositories/home:kamilprusko/xUbuntu_16.04/Packages Protocol "http" not supported or disabled in libcurl E: Некоторые индексные файлы не скачались. Они были проигнорированы или вместо них были использованы старые версии.
При этом в логе все записи относящиеся к целевому репозиторию имеют вид:
Игн:10 https://download.opensuse.org/repositories/home:kamilprusko/xUbuntu_16.04 Translation-en
Смотрел похожие вопросы, (например), но это решение мне не подходит судя по всему. По предлагаемой в том топике команде tail -n 100 /etc/apt/sources.list /etc/apt/sources.list.d/*; lsb_release -a получаю следующее (комментарии удалил):
==> /etc/apt/sources.list <== deb http://ru.archive.ubuntu.com/ubuntu/ xenial main restricted deb http://ru.archive.ubuntu.com/ubuntu/ xenial-updates main restricted deb http://ru.archive.ubuntu.com/ubuntu/ xenial universe deb http://ru.archive.ubuntu.com/ubuntu/ xenial-updates universe deb http://ru.archive.ubuntu.com/ubuntu/ xenial multiverse deb http://ru.archive.ubuntu.com/ubuntu/ xenial-updates multiverse deb http://ru.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse deb http://archive.canonical.com/ubuntu xenial partner deb http://security.ubuntu.com/ubuntu xenial-security main restricted deb http://security.ubuntu.com/ubuntu xenial-security universe deb http://security.ubuntu.com/ubuntu xenial-security multiverse
==> /etc/apt/sources.list.d/gnome-pomodoro.list <== deb https://download.opensuse.org/repositories/home:kamilprusko/xUbuntu_16.04/ / No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.3 LTS Release: 16.04 Codename: xenial


Ответ

при обращении по указанному адресу сервер возвращает 301-й код — перенаправление на правильный адрес (у которого перед именем репозитория указан слэш):
$ curl -s -D - -o /dev/null 'https://download.opensuse.org/repositories/home:kamilprusko/xUbuntu_16.04/Release' HTTP/1.1 301 Moved Permanently Date: Wed, 18 Oct 2017 15:42:36 GMT Server: Apache/2.2.34 (Linux/SUSE) Location: http://download.opensuse.org/repositories/home:/kamilprusko/xUbuntu_16.04/Release Content-Length: 381 Content-Type: text/html; charset=iso-8859-1
именно так (/kamilprusko, а не kamilprusko) должен быть указан путь к репозиторию в obs-e
см. пример в документации: https://en.opensuse.org/openSUSE:Build_Service_Debian_builds#Configuring_sources.list
если в файл /etc/apt/sources.list.d/*.list внести такое исправление, то apt нормально получит всё, что запрашивает у сервера.

доп. информация: apt does not handle HTTP redirects

четверг, 30 мая 2019 г.

Получить список пакетов, установленных пользователем

apt-get иногда выдаёт сообщение, что некоторые пакеты были установлены автоматически и их можно удалить командой apt-get autoremove. Значит, где-то хранится признак, по какой причине был установлен тот или иной пакет.
Как получить список пакетов, установленных по запросу пользователя, без автоматически добавленных по зависимостям, и, если возможно, с датой установки?


Ответ

с помощью «тёплого лампового» aptitude
$ aptitude search -F '%p' '!~M ~i' с помощью apt-mark
$ apt-mark showmanual

дату/время запуска (а также параметры и ещё много другой информции) программы apt-get можно найти в файлах /var/log/apt/*, программы aptitude — в файлах /var/log/aptitude*, программы dpkg (её ведь можно запустить и вручную для установки пакета из скачанного «вручную» файла) — в файлах /var/log/dpkg.log*. что плохо — все эти файлы ротируются и (насколько помню, но стоит это уточнить в настройках logrotate) со временем удаляются.

доп. информация:
поисковые шаблоны aptitude настройка того, как отображаются пакеты в aptitude

дополнение по поводу даты установки. вообще-то она не фиксируется в «базе данных» dpkg, но более или менее релевантный результат можно получить, например, по дате последней модификации файлов /var/lib/dpkg/info/имя-пакета* (например, имя-пакета[:архитектура].list, содержащий список файлов пакета).
при распаковке архивов, содержащихся в файле с пакетом, программа dpkg указанные файлы (как минимум) перезаписывает (более точный алгоритм можно узнать в документации dpkg, или непосредственно в её исходных кодах).
как-нибудь так:
#!/bin/bash
export arch=$(dpkg --print-architecture)
dostat() { stat --printf="$1\t%y
" $2 }
apt-mark showmanual | while read p; do if [ -f /var/lib/dpkg/info/$p.list ]; then dostat $p /var/lib/dpkg/info/$p.list elif [ -f /var/lib/dpkg/info/$p:$arch.list ]; then dostat $p /var/lib/dpkg/info/$p:$arch.list else echo $p fi done
пример вывода:
2vcard 2010-03-25 11:56:42.000000000 +0300 abcde 2013-07-20 20:50:31.000000000 +0400 abiword 2013-07-20 22:48:50.000000000 +0400 abook 2013-07-20 22:48:51.000000000 +0400 acl 2013-07-20 22:46:20.000000000 +0400 acpi 2013-07-20 20:50:34.000000000 +0400 acpid 2013-07-20 20:50:34.000000000 +0400 adduser 2013-07-20 20:48:04.000000000 +0400 alien 2013-07-20 20:50:38.000000000 +0400 alsa-base 2013-07-20 22:45:48.000000000 +0400

четверг, 21 марта 2019 г.

Развертывание deb-репозитория и ftp сервера

Настроил deb репозиторий, локально по протоколу file:/ все работает. Для того чтобы расшарить его в сеть развернул ftp сервер, который тоже работает. Выставил опцию anonymous_enable=YES. Через терминал могу подключиться как anonymous.
В source.list добавил репозиторий. При выполнении sudo apt-get update выводится
игн ftp://10.10.2.18 wily InRelease игн ftp://10.10.2.18 wily Release.gpg игн ftp://10.10.2.18 wily Release [100%] ожидание заголовков
В лог ftp сервер ничего не пишет, значит apt-get не может достучаться до машины с рерозиторием.
В чем может быть проблема?


Ответ

В лог ftp сервер ничего не пишет, значит apt-get не может достучаться до машины с рерозиторием.
неправильный вывод. файлы игнорируются потому, что сервер сообщил, что таких файлов нет. см. этот ответ: How do Ign and Hit affect apt-get update?
если бы возникли ошибки с доступом, apt так бы об этом и написал.

дополнение: насколько я понимаю, отсутствуют перечисленные файлы в каталоге /корень-вашего-ftp/dists/wily/

четверг, 7 марта 2019 г.

Установка пакетов на несколько машин одновременно

Есть сеть из n машин под управлением ОС Debian и доступ к ним по ssh. Также есть один диск с репозиторием.
Как параллельно установить набор пакетов с этого диска на все n машин?


Ответ

на какой-нибудь общедоступной машине «расшариваете» содержимое диска по любому подходящиему протоколу: http, nfs, samba, ftp и т.д. на каждой из n машин добавляете соответствующую строчку в /etc/apt/sources.list (а лучше — в отдельный файл в /etc/apt/sources.list.d/). на каждой из n машин обновляете список пакетов (sudo apt-get update). на кажлой из n машин устанавливаете нужные пакеты (sudo apt-get install ...).
как выполнить одну и ту же команду на множестве машин параллельно, я описывал, например, здесь: https://ru.stackoverflow.com/a/439394/178576

понедельник, 25 февраля 2019 г.

У вас отложены (held) битые пакеты

При попытке установить libreoffice-core (или другие пакеты), выскакивает ошибка:
Пакеты, имеющие неудовлетворённые зависимости: libreoffice-core : Зависит: libreoffice-common (> 1:4.3.3) но он не будет установлен Зависит: ure (>= 4.2~) но он не будет установлен Зависит: libboost-date-time1.55.0 но он не будет установлен Зависит: libclucene-contribs1 (>= 2.3.3.4) но он не будет установлен Зависит: libclucene-core1 (>= 2.3.3.4) но он не будет установлен Зависит: libcmis-0.4-4 (>= 0.4.0) но он не будет установлен Зависит: libgltf-0.0-0 (>= 0.0.2) но он не будет установлен Зависит: libglu1-mesa но он не будет установлен или libglu1 Зависит: libharfbuzz-icu0 (>= 0.9.18) но он не будет установлен Зависит: libhunspell-1.3-0 (>= 1.3.3) но он не будет установлен Зависит: libicu52 (>= 52~m1-1~) но он не будет установлен Зависит: libmythes-1.2-0 но он не будет установлен Зависит: libodfgen-0.1-1 но он не будет установлен Зависит: librevenge-0.0-0 но он не будет установлен Зависит: libstdc++6 (>= 4.9) но он не будет установлен Зависит: uno-libs3 (>= 4.3.0~alpha) но он не будет установлен E: Невозможно исправить ошибки, у вас отложены (held) битые пакеты.
Как это можно попытаться вылечить? У меня Debian 8 Jessie x64
UPD_0: Удалил все из репозиториев, осталось только:
deb http://mirror.yandex.ru/debian/ jessie main deb-src http://mirror.yandex.ru/debian/ jessie main
deb http://security.debian.org/ jessie/updates main deb-src http://security.debian.org/ jessie/updates main
sources.list.d тоже чист.
Для "лечения" пытался выполнить:
sudo dpkg --configure -a sudo apt-get install -f sudo apt-get --fix-broken install sudo rm /var/lib/apt/lists/* -vf //Не удалилась какая-то папка sudo apt-get clean sudo apt-get autoclean sudo apt-get autoremove
Вывод apt-cache policy libreoffice-common libreoffice-core
libreoffice-common: Установлен: (отсутствует) Кандидат: 1:4.3.3-2+deb8u2 Таблица версий: 1:5.1.3~rc2-3 0 100 /var/lib/dpkg/status 1:4.3.3-2+deb8u2 500 500 http://ftp.ru.debian.org/debian jessie/main amd64 Packages 500 http://ftp.ru.debian.org/debian jessie/main i386 Packages libreoffice-core: Установлен: (отсутствует) Кандидат: 1:4.3.3-2+deb8u2 Таблица версий: 1:4.3.3-2+deb8u3 0 100 /var/lib/dpkg/status 1:4.3.3-2+deb8u2 500 500 http://ftp.ru.debian.org/debian jessie/main amd64 Packages


Ответ

$ apt-cache policy libreoffice-common libreoffice-common: Установлен: (отсутствует) Кандидат: 1:4.3.3-2+deb8u2
Таблица версий: 1:5.1.3~rc2-3 0 100 /var/lib/dpkg/status 1:4.3.3-2+deb8u2 500 500 http://ftp.ru.debian.org/debian jessie/main amd64 Packages 500 http://ftp.ru.debian.org/debian jessie/main i386 Packages
вы подключали репозиторий(-ии) с более новыми версиями пакетов. информация об этих версиях хранится в /var/lib/dpkg/status
удалите из этого файла информацию про версию 1:5.1.3~rc2-3 пакета libreoffice-common (начиная со строки Package: libreoffice-common и до следующей строки, начинающейся со слова Package:, обязательно сохранив разделяющую описания пакетов пустую строку).
и обновите список пакетов:
$ sudo apt-get update

но вообще, вероятно, более правильным было бы удаление конфигурации неустанавливающихся пакетов. начать можно с того же libreoffice-common
$ sudo apt-get purge libreoffice-common

четверг, 20 декабря 2018 г.

Очистка кэша apt-get

Как правильно удалить закачанные архивы пакетов apt-get? Я посмотрел в папку /var/cache/apt/archives и нашел там список пакетов *.deb, можно их просто удалить, но непонятно, правильно ли это.


Ответ

Для очистки локального кэша пакетов используется apt-get с командой clean: sudo apt-get clean Подробнее - в man apt-get