Falsifique facilmente a saída lsb_release para diferentes versões

Falsifique facilmente a saída lsb_release para diferentes versões

Muitas vezes estou reconstruindo pacotes de software (principalmente Debian) para versões mais antigas (de Debian e Ubuntu, incluindo oldoldstable). Alguns desses pacotes usam o lsb_releasecomando para descobrir a distribuição atual, para mudar o comportamento, Build-Dependsetc.

eu tenhouma configuração de cowbuilder de distribuição múltipla e arquitetura de CPU, mas para preparar os pacotes fonte (que são construídos em um ambiente limpo que corresponda à distribuição alvo), ainda preciso fazer algo como:

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

A dpkg-buildpackage -Setapa cria umfontepacote ( *.dsce arquivos variados) depois de executar o alvo limpo (que regenera debian/control em muitos pacotes). Mas para isso, a lsb_releasesaída precisa ser, por exemplo, squeezeou mesmo lenny.

Demeu trabalho no Debian/m68kEu sei que posso criar um /etc/lsb-releasearquivo contendo linhas mágicas e pouco documentadas para controlar a saída de lsb_release, que de outra forma examina, por exemplo, o sources.listarquivo APT, preferences, etc., para determinar a distribuição. Mas não há uma maneira fácil de fazer com que o resultado espelhe outra distribuição existente.

Alguém tem uma coleção desses arquivos para espelhar a distribuição alvo?

Responder1

Para falsificar lsb_release, use este script:

#!/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

informação relacionada