Как загрузить пакеты из репозитория, заданного командной строкой?

Если вы знаете пароль root, вы можете запустить su -s / bin / bash , чтобы получить оболочку root bash.

sudo -s / bin / bash тоже должно работать, и в зависимости от того, как настроено sudo , вам нужно будет знать только свой собственный пароль или не знать пароля.

Затем вы можете использовать chsh -s / bin / bash , чтобы снова изменить командную оболочку root на bash.

Кстати, как правило, менять оболочку root в любой системе UNIX - плохая идея. Многие задания cron и т. Д. Зависят от того, является ли корневая оболочка корневой оболочкой по умолчанию для этой ОС, и БУДЕТ сломаться, если вы ее измените.

3
11.08.2016, 18:30
4 ответа

Если вы используете достаточно свежую версию Debian или другого дистрибутива с использованием apt, вы можете использовать для этого apt-get . Поместите следующие настройки в файл с именем apt-get.conf , чтобы он не использовался

Dir::Etc::main ".";
Dir::Etc::Parts "./apt.conf.d";
Dir::Etc::sourcelist "./sources.list";
Dir::Etc::sourceparts "./sources.list.d";
Dir::State "./apt-tmp";
Dir::State::status "./apt-tmp/status";
Dir::Cache "./apt-tmp";

Подготовьте некоторые необходимые файлы:

mkdir -p apt-tmp/lists/partial
touch apt-tmp/status
apt-get -c apt.conf update >/dev/null

Затем вы можете загружать пакеты в текущий каталог с помощью

apt-get -c apt.conf download $packages

Со старым версии apt-get , в которых отсутствует команда загрузить , вы можете использовать

apt-get -c apt.conf install -d $packages

для загрузки пакетов и их зависимостей в apt-tmp / archives .

3
27.01.2020, 21:08

Все инструменты, которые я могу найти, используют локальную информацию apt (и, следовательно, репозитории в / etc / apt / sources. list и т. д., как определено при последнем запуске apt-get update ). Однако интерпретировать формат репозитория не так уж сложно.

Сохраните

#!/bin/sh
# Downloads a package from a repository
# dlpkg repo distro suite arch package

for arch in all "${4}"; do
    curl "${1}/dists/${2}/${3}/binary-${arch}/Packages.xz" | xz -d | "$(dirname $0)/pkgfilename" -v "PACKAGE=${5}" | while read filename; do
        curl -O "${1}/${filename}"
    done
done

как dlpkg и

#!/usr/bin/awk -f

/Package:/ {
    package = $2
}

package == PACKAGE && /Filename:/ {
    print $2
}

как pkgfilename , сделайте их исполняемыми, а затем вы можете загрузить пакет, запустив

./dlpkg <repository URL> <distribution> <suite> <architecture> <package>

, например

./dlpkg http://ftp.fr.debian.org/debian unstable main amd64 libc6

Если вам нужно обрабатывать репозитории, файлы пакетов которых не находятся в каноническом порядке ( Пакет до Имя файла ), вы можете вместо этого использовать следующий сценарий AWK:

#!/usr/bin/awk -f

BEGIN {
    filename = ""
}

/^$/ {
    filename = ""
    stanza = 0
}

/Package:/ {
    if ($2 == PACKAGE) {
        stanza = 1
        if (filename != "") {
            print filename
            stanza = 0
        }
    }
}

/Filename:/ {
    filename = $2
    if (stanza == 1) {
        print filename
        filename = ""
    }
}

Здесь нет обработки ошибок, это оставлено в качестве упражнения для читателя. Также нет проверки подписи ...

10
27.01.2020, 21:08

Я не думаю, что то, что вы пытаетесь достичь, соответствует идее наличия репозиториев как таковых. Идея в том, что вам нужно будет добавить репо в реполист, а затем установить из него и т. Д.

Можно загрузить пакет вручную (я делаю это довольно часто с пакетами RPM для Fedora) и установить пакет вручную штатными средствами (в моем случае dnf ).

Обычно я использую URL из /etc/yum.repos.d/ .repo , а затем просто просматриваю в браузере и загружаю с помощью wget . Это должно быть аналогично пакетам DEB.

Итак,

  1. Загрузите пакет вручную с помощью браузера или wget
  2. Установите с помощью клиента управления пакетами из cli.

Если репо доступно напрямую в Интернете (что я не понимаю, почему нет), dnf понимает, когда ему дается URL-адрес для пакета RPM. Я уверен, что эквивалентный инструмент Debian будет делать то же самое. Так что вы сэкономите, загрузив пакет в браузере или с помощью wget .

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

2
27.01.2020, 21:08

Ну, может быть, этот скрипт является решением для ваших нужд:

#!/bin/bash

U="$1"
FILE="$2"

[[ -z "$U" ]] && echo -e "Usage: $0 repo-url [file to download]\nwithout give \"file to download\" this script will list the files inside the repo\n";

for i in $(curl -l "$U" 2>/dev/null|grep -i 'href='|sed -e 's/.*href=//g' -e 's/>.*//g' -e 's/"//g'|grep -v '/$'|grep "$FILE")
do
 if [[ -z "$FILE" ]]
 then
  echo "FILE: $i"
 else
  echo "Download file: $i"
  curl -q "${U}/${i}" --output "$i" 2>/dev/null
  ls -la "$i"
 fi
done

2
27.01.2020, 21:08

Теги

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