私はよく、ソフトウェア パッケージ (主に 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
ステップでは、ソース*.dsc
clean ターゲット (多くのパッケージで debian/control を再生成する) を実行した後、パッケージ (および各種ファイル) が削除されます。ただし、このためには、出力が、たとえば 、または でlsb_release
ある必要があります。squeeze
lenny
から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