Как rpm определяет, является ли пакет обновлением?

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

if (abbrev(tcp)) {
    tprints("{");
    printxval(baud_options, tios.c_cflag & CBAUD, "B???");
    tprintf(" %sopost %sisig %sicanon %secho...}",
        (tios.c_oflag & OPOST) ? "" : "-",
        (tios.c_lflag & ISIG) ? "" : "-",
        (tios.c_lflag & ICANON) ? "" : "-",
        (tios.c_lflag & ECHO) ? "" : "-");
    return;
}
tprintf("{c_iflags=%#lx, c_oflags=%#lx, ",
    (long) tios.c_iflag, (long) tios.c_oflag);
tprintf("c_cflags=%#lx, c_lflags=%#lx, ",
    (long) tios.c_cflag, (long) tios.c_lflag);
tprintf("c_line=%u, ", tios.c_line);

0
19.03.2020, 23:36
1 ответ

RPM-пакеты имеют особый формат:[$epoch:]$name-$version-$release.$arch

$epoch— целое число, которое можно легко сравнить, есть пакеты, которые не используют это, и оно просто опущено. $name— это просто строка, которая не должна меняться между версиями. $version— это строка версии в формате, который можно анализировать и сравнивать (обычно целые числа, разделенные точками ). $release— это строка, которая обычно начинается с целого числа, но может также содержать информацию о том, для какого дистрибутива она была создана.

Если все $epoch, $nameи $verionодинаковы, то $releaseсравнивается, чтобы определить, является ли это обновлением. Если $versionразличаются, они анализируются, и более высокий из них является обновлением. Если значение $epochотличается, более высокое значение является обновлением.

Исходный код для сравнения обновлений RPM, как мне кажется, можно найти здесь в функциях parseEVRи rpmdsCompareEVR.

3
28.04.2021, 23:20

Теги

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