Легко подделать вывод lsb_release для разных версий

Легко подделать вывод lsb_release для разных версий

Я часто пересобираю пакеты ПО (в основном Debian) для старых версий (как Debian, так и Ubuntu, включая oldoldstable). Некоторые из этих пакетов используют команду lsb_releaseдля определения текущего дистрибутива, чтобы изменить поведение Build-Dependsи т. д.

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

dpkg-source -x openjdk-7_7u55-2.4.7-1~deb7u1.dsc
cd openjdk-7-7u55-2.4.7
dch --bpo
dpkg-buildpackage -S

Шаг dpkg-buildpackage -Sсоздаетисточникпакет ( *.dscи различные файлы) после запуска чистой цели (которая восстанавливает debian/control во многих пакетах). Но для этого вывод lsb_releaseдолжен быть, например, squeezeили даже lenny.

Отмоя работа над Debian/m68kЯ знаю, что могу создать /etc/lsb-releaseфайл, содержащий магические, недостаточно документированные строки для управления выводом lsb_release, который в противном случае смотрит, например, sources.listв файл APT, preferencesи т. д., чтобы определить дистрибутив. Но нет простого способа сделать вывод зеркальным отражением другого существующего дистрибутива.

Есть ли у кого-нибудь коллекция таких файлов, чтобы отразить целевой дистрибутив?

решение1

Чтобы подделать lsb_release, используйте этот скрипт:

#!/bin/bash
Help()
{
echo "
Usage: lsb_release [options]

    lsb SPOOFER!!!

put this in your home bin dir, then do:
chmod a+x ~/bin/lsb_spoof
cd /usr/bin
mv lsb_release lsb_releaseBAK
ln -s /home/user/bin/lsb_spoof lsb_release

Options:
  -h, --help         show this help message and exit
  -v, --version      show LSB modules this system supports
  -i, --id           show distributor ID
  -d, --description  show description of this distribution
  -r, --release      show release number of this distribution
  -c, --codename     show code name of this distribution
  -a, --all          show all of the above information
  -s, --short        show requested information in short format"
}

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04 LTS"

SILENT=false
while getopts ":hs" option; do
   case $option in
      s) SILENT=true;;
      h) # display Help
         Help
         exit;;
   esac
done

unset OPTIND
while getopts ":hvidrcas" option; do
   case $option in
      h) # display Help
         Help
         exit;;
      v) echo "No LSB modules are available.";;
      i) FIELD_NAME="Distributor ID:    "
         if [ $SILENT = true ]
         then
            FIELD_NAME=""
         fi
         echo $FIELD_NAME$DISTRIB_ID;;
      d) FIELD_NAME="Description:   "
         if [ $SILENT = true ]
         then
            FIELD_NAME=""
         fi
         echo $FIELD_NAME$DISTRIB_DESCRIPTION
         exit;;
      r) FIELD_NAME="Release:   "
         if [ $SILENT = true ]
         then
            FIELD_NAME=""
         fi
         echo $FIELD_NAME$DISTRIB_RELEASE
         exit;;
      c) FIELD_NAME="Codename:  "
         if [ $SILENT = true ]
         then
            FIELD_NAME=""
         fi
         echo $FIELD_NAME$DISTRIB_CODENAME
         exit;;
      a) echo "No LSB modules are available."
            if [ $SILENT = true ]
            then
                echo $DISTRIB_ID
                echo $DISTRIB_DESCRIPTION
                echo $DISTRIB_RELEASE
                echo $DISTRIB_CODENAME
            else
                echo "Distributor ID:   "$DISTRIB_ID
                echo "Description:  "$DISTRIB_DESCRIPTION
                echo "Release:  "$DISTRIB_RELEASE
                echo "Codename: "$DISTRIB_CODENAME
            fi
            exit;;
     *) # Invalid option
         Help
         exit;;
   esac
done

Связанный контент