異なるバージョンの lsb_release 出力を簡単に偽装する

異なるバージョンの lsb_release 出力を簡単に偽装する

私はよく、ソフトウェア パッケージ (主に Debian) を古いバージョン (Debian と Ubuntu、oldoldstable を含む) 用に再構築しています。これらのパッケージの一部は、動作などlsb_releaseを変更するために、 コマンドを使用して現在のディストリビューションを調べます。Build-Depends

私が持っている複数のディストリビューションとCPUアーキテクチャの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ステップでは、ソース*.dscclean ターゲット (多くのパッケージで debian/control を再生成する) を実行した後、パッケージ (および各種ファイル) が削除されます。ただし、このためには、出力が、たとえば 、または でlsb_releaseある必要があります。squeezelenny

からDebian/m68k での私の仕事/etc/lsb-releaseの出力を制御するための、あまり文書化されていない魔法の行を含むファイルを作成できることはわかっています。lsb_releaseそれ以外の場合は、たとえば APTsources.listファイル、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

関連情報