对不同打包方式在方便、高效方面的探讨
我的观点:make编译方式繁琐、每个人安装都需要重复make编译。(开发、测试、以及打包的人员除外,他们是贡献者)
make只是没有其他安装方式情况下的最后选择。有其他可行的安装方法肯定不使用make方式。
linux最不好就是要n多个人重复进行繁琐的make,
就算make出来的性能好一些,我也情愿使用rpm包。
还有更多的就是为了make,就必须安装n多个运行时并不需要的东西。---又要进行那个东西的make。但是其实那个东西只是make的时候使用到,平时几乎不用的。
如那个trigger 3d的赛车游戏就是一个代表。
这样就是为了make而make,并且n多个人都要这样做。
但是其实一个rpm包就ok(要谢谢那个rpm提供者)
其实最方便就是3种方式:
1、解压就可以使用(绿色软件)---代表firefox
2、bin格式的软件,运行就可以进行安装。---典型代表:红旗网友subbo的bin安装包,和n多商业软件。
3、就是rpm包,最大的问题就是--存在一个依赖的问题。
4、还有一种是make预编译,只要make就可以(也比较高效)。
个人觉得最贴心就是那个bin格式。(可以自定义安装)
附上subbo的bin包的打包方法的链接地址
http://www.linuxkit.com/showthread.php?t=10691 我还是最喜欢bin格式的安装。但是这样的软件太少了,rpm安装就是依赖问题,常常不能成功安装。所以我还是最多使用configure……make…… install…… 你要 源码, 就只能用 make .
其他的都是 binary 格式的.
这是两个不同领域, 不能相提并论. 新的编译工具是scons(ML自带了),目前kdelibs4的一个branch就采用scons控制编译的,而且据kde官方的说法,以后的kde应该都采用scons
附:MI的制作也是是用它 如果软件包里只有 configure Makefile.am 等, scons 可以用吗? build tools还有几个,但是都一样是从源码编译的.
bin格式的包,一个两个的可以,多了的话,就有可能存在冲突问题,而且比rpm或deb更难解决.或者像windows一样,每个软件都有自己的安装目录,代价就是空间,很难说那种更好的. 我不喜欢编译,稍大的软件要花不少时间,另外如果要卸载则不得不保存源码包(./config加原编译使用的参数后直接make unistall,不需要去编译它)。我现在编译软件,都尽量把编译结果打成rpm包,方便安装也方便别人。
我不是很喜欢bin安装包,原因在于不少bin安装包目前还没有很好的管理器,bin包其实不见得就强过rpm包,因为rpm包也可以做成不依赖环境,而且有成熟的管理器进行卸载。bin包目前还不是流行方式,bin安装包是种仿WIN不透明的安装过程,其中有的也有编译过程,所以bin现在还算不上是个合理的安装格式。事实上如果只是做无依赖性的rpm包很容易,只要把需要部份从/usr开始打包进去,安装时rpm包是从/覆盖进去的,这和bin包就没有区别了。
rpm包的依赖在于制做rpm包的作者对环境的定义,一个rpm包我也可以做成什么都不依赖,网上的软件也有提供××-nodep.rpm,问题是,这种什么都不依赖的rpm会影响到后面rpm包的正确判断,进而影响系统的稳定性。rpm包管理器的毛病就在于它对环境的检测是依赖于所有rpm包整体,而不是机器的真实的环境,所以有依赖检查的rpm包对系统依赖性太高。
rpm包也有安装运行脚本的能力,所以思考至此,我实在想不出bin包好在哪里,bin包应该是非开源软件的一种打包方式,是种不可见的安装和编译过程。最直接的证据就是bin包和run包不能被直接解压。
是否寻求一种rpm-bin安装方式,能够对真实的系统环境进行判断后安装,而不是仅仅依靠rpm包自我依赖性的安装,安装以rpm-bin包方式,安装后接受rpm包管理器的管理,并且拥有另外的rpm-bin软件管理器来管理这些包。我想应该可以开发一些适用于普通用户的打包工具,事实上Win程序的安装包也是由不少好的打包工具生成的,目前单一的rpm、deb、bin、run都不是很好的管理方式。 我觉得社区不该只是对开源的东西进行打包和汉化,更多时候应该有自己的想法和实践。
如果rpm-bin方式能被实践出来,就不必要把软件库存整理放在apt-get更新当中了,少量人员集中的软件管理打包不如合理、开放、自由的软件管理更加友好。
debian的方式只会加剧linux发行版之间软件安装的不兼容和混乱。 问题是做的人会很少,没有对开源有热情的人是不可能的 如果有个不错的、操作不复杂的打包工具,我想就算是初学Linux的用户也会喜欢向大伙推荐自己新发现的软件的。 bin包也有类似rpm的那种,其实包管理方式基本原理都是一样的.只是得在各种问题间找一个平衡. 回haulm
“bin包应该是非开源软件的一种打包方式,是种不可见的安装和编译过程。最直接的证据就是bin包和run包不能被直接解压。”
subbo的bin打包全部都是使用开源文件的,同时bin可以解压。subbo的bin包就是由脚本和文件共同打包出来的,完全可以把里面的文件解压出来。
回sejishikong
subbo的bin
这种打包方式几乎是最完善的(同windows安装方式几乎一样),任何一个会使用windows的人都可以完成安装和卸载。---根本不需要使用者考虑依赖问题。而且通用性极强,红旗4.1做出来的bin包,其他好多linux版本(如ml2、红旗5等)都通用。
至于安装空间问题,bin包不会比rpm包大多少。bin包里面的文件本来就是rpm里面的文件。bin包的打包过程,就附带生成相关的rpm包。 正如KDE 版主所说的---软件的打包者就有必要为软件解决依赖的问题。
而subbo的bin包恰恰就是可以实行这样的目的。 如果软件包里只有 configure Makefile.am 等, scons 可以用吗?
不可以,同make依赖Makefile一样。它也依赖一个文件 附上早期bin包的生成方法(还不支持自定义安装目录)
由红旗网友subbo提供!
那个bin文件实际上是一个包含RPM包以及执行解压、安装的脚本文件,以制作supertux-0.1.3-rfdt4.1-i586-installer.bin为例,首先我建立一个名为supertux的文件夹(便于操作),然后把制作好的supertux的RPM包、Xdialog的RPM包(这个是图形界面程序)、supertux.desktop(用来建立桌面快捷方式的)、SDL_net和SDL_image的RPM包(这两个被supertux依赖)放到这个文件夹里面,然后在这个文件夹里面建立一个名为supertux-0.1.3-rfdt4.1-i586-installer.sh的脚本文件,输入一下内容:
#!/bin/bash
#
#本脚本根据waker发表在 LinuxSir.Org ?? Linuxsir [黄嘴企鹅论坛]Linux 综合讨论区 ?? Linux shell进阶应用与shell编程 的脚本改编,
#地址为:[www.linuxsir.org]
#
#by Subbo ([email protected])
#
#本脚本作用是将解压可执行安装包里的文件并开启安装界面。
#
# 系统环境
PATH=.:/bin:/usr/bin:/usr/local/bin:/sbin:$PATH
export PATH
#判断是否存在所需临时目录,如果不存在则建立之。
[ -d /tmp/supertux-0.1.3-rfdt4.1-i586-installer ]|| mkdir -p /tmp/supertux-0.1.3-rfdt4.1-i586-installer
#释放可执行安装包里的的文件。
sed -e '1,/BIGIN SELFEXTR/d' $0 |sed -e '1,/BIGIN SELFEXTR/d' > /tmp/supertux-0.1.3-rfdt4.1-i586-installer/supertux.tar.gz
#进入临时目录解压并执行安装脚本。
cd /tmp/supertux-0.1.3-rfdt4.1-i586-installer
tar zxvf supertux.tar.gz >/dev/null
if [ ! -f /usr/bin/Xdialog ];then
kdesu "rpm -ivh Xdialog-2.1.2-rfdt4.1.i586.rpm --nodeps --force"
fi
kdesu "konsole --schema GreenOnBlack.schema --nomenubar --notabbar --noscrollbar --noxft -T 安装SuperTUX_For_红旗桌面版4.1 -e sh supertux-0.1.3-rfdt4.1-setup"
exit 0
#BIGIN SELFEXTR
再建立一个名为supertux-0.1.3-rfdt4.1-setup的脚本文件,输入一下内容:
#!/bin/bash
#
# SpuerTUX For 红旗桌面版4.1一体化安装程序 版本0.0.1 2005年12月18日
#
# by Subbo ([email protected])
#
# SuperTUX For 红旗桌面版4.1一体化安装程序的脚本。
#
# 系统环境
PATH=.:/bin:/usr/bin:/usr/local/bin:/sbin:$PATH
export PATH
# 一半是必要的警告,一半是故弄玄虚。
echo "请不要关闭本窗口,否则会导致程序终止。本窗口会在 SuperTUX 安装完毕后自动关闭。"
echo ""
echo "请不要关闭本窗口,否则会导致程序终止。本窗口会在 SuperTUX 安装完毕后自动关闭。"
echo ""
echo "请不要关闭本窗口,否则会导致程序终止。本窗口会在 SuperTUX 安装完毕后自动关闭。"
echo ""
echo "正在启动相关进程,请稍候………"
echo ""
# 显示百分比的代码转自:www.chinaunix.net,在本脚本中没有实际用处。
drawper ()
{
_per=`expr $1 \* 100 / $2`
case `expr $_per / 4 % 4` in
0) _char="|" ;;
1) _char="/" ;;
2) _char="-" ;;
3) _char="\\" ;;
esac
printf "\r$_char $_per%%"
if [ $1 -eq $2 ];then
printf "\n"
fi
}
i=1
while [ $i -le 100 ]
do
drawper $i 100
i=`expr $i + 1`
done
# 显示百分比的代码结束
echo ""
echo "相关进程启动完毕,请系好安全带,发动机点火!"
echo ""
# 以下是安装RPM包
cat << EOF > /tmp/textbox.tmp.$$
SuperTUX 版本:0.1.3
SuperTUX 是一款类似于超级马里奥的游戏(《超级马里奥》是任天
堂公司在红白机上推出的横版过关游戏),玩家在游戏中通过踩、
顶、发射子弹这些方式消灭敌人,以此来通过关卡。
游戏剧情:
Tux 和 Penny(我第一次知道 Tux 有女朋友:-P)住在南极洲上,
有一天他们外出野餐,突然有一个怪物从一座冰山后跳出来,一阵
闪光后,Tux 就什么都不知道了。
Tux 醒来后发现 Penny 失踪了,在她原来站的地方有一封信,Tux
拆开一看,信上是这样写着的:“Tux,我宿命中的敌人!我已经俘
获你漂亮的 Penny 并将她送到我的城堡去了,通往城堡的道路上都
是我的人,如果你想要回你的 Penny,就到我的城堡来吧,除此之
外,你别无选择!by Nolok”
Tux 看着远处 Nolok 的城堡,下定决心要救回心爱的 Penny,就这
样,Tux 开始了惊心动魄的旅程………
如果在使用 SuperTUX for 红旗桌面版4.1的过程中遇到问题,
您可以给 [email protected] 发邮件以获得有限的技术支持。
EOF
Xdialog --wrap --title "SuperTUX For 红旗桌面版4.1的安装程序" --backtitle " 如果您确定要安装 SuperTUX For 红旗桌面版4.1,请点击下面的“确定”按钮,否则点击“取消”按钮。"\
--textbox "/tmp/textbox.tmp.$$" 430x300 0
case $? in
0)
if [ ! -f /usr/lib/libSDL_mixer-1.2.so.0 ];then
(rpm -ivh SDL_mixer-1.2.4-7.i386.rpm --nodeps --force )| Xdialog --title "安装进行中!" --progress "正在安装 SDL_mixer,这是必须的RPM包,请稍候………\n\n" 0 0 \ $RPM_MAX_DOTS_NUMBER $RPM_LEADING_MSG_LENGTH
fi
if [ ! -f /usr/lib/libSDL_image-1.2.so.0 ];then
(rpm -ivh SDL_image-1.2.2-5.i386.rpm --nodeps --force )| Xdialog --title "安装进行中!" --progress "正在安装 SDL_image,这是必须的RPM包,请稍候………\n\n" 0 0 \ $RPM_MAX_DOTS_NUMBER $RPM_LEADING_MSG_LENGTH
fi
(rpm -ivh supertux-0.1.3-rfdt4.1.i586.rpm --nodeps --force )| Xdialog --title "安装进行中!" --progress "正在安装 lbreakout2,请稍候………\n\n" 0 0 \ $RPM_MAX_DOTS_NUMBER $RPM_LEADING_MSG_LENGTH
# 以下是增加桌面快捷方式
Xdialog --wrap --title "安装完毕。" \
--no-tags --no-cancel --no-close \
--checklist "
supertux-0.1.3已经安装完毕。您可以通过点击“开始菜单→应用
程序→游戏→SuperTUX→SuperTUX”或者点击桌面图标来启动
SuperTUX。如果要卸载 SuperTUX,请点击“开始菜单→应用程序
→游戏-SuperTUX→卸载”,最好不要通过控制面板里面的软件包
管理器进行卸载,以免出现卸载不全的情况。
" 430x300 0 \
"desktop" "设置桌面快捷方式" "on" 2> /tmp/checklist.tmp.$$
retval=$?
case $retval in
0)
# 至少选择了一项。
if grep "desktop" /tmp/checklist.tmp.$$ >& /dev/null ;
then
# 设置桌面快捷方式。
if grep "desktop" /tmp/checklist.tmp.$$ >& /dev/null;
then
# 拷贝快捷方式到普通用户模板和root用户的桌面文件夹。
cp -f supertux.desktop /root/Desktop
cp -f supertux.desktop /etc/skel/Desktop
# 拷贝快捷方式到每个普通用户的桌面文件夹。
find /home -name Desktop -maxdepth 2 > tmp.sh
cat tmp.sh | sed 's/^/cp -f supertux.desktop /g' > desktop.sh
sh desktop.sh
fi
# 一项都没有选择
else
echo "什么都不做。"
fi
;;
esac
;;
1)
echo "程序退出。"
;;
255)
echo "关闭窗口。"
;;
esac
# 删除临时文件
rm -f /tmp/checklist.tmp.$$
rm -f /tmp/textbox.tmp.$$
rm -rdf /tmp/supertux-0.1.3-rfdt4.1-i586-installer
用tar czvf命令将supertux的RPM包、Xdialog的RPM包、supertux.desktop、SDL_net和SDL_image的RPM包、supertux-0.1.3-rfdt4.1-setup压缩成一个名为supertux.tar.gz的压缩包,最后是合成一个bin文件(实际上是一个脚本文件),执行:
cat supertux-0.1.3-rfdt4.1-i586-installer.sh supertux.tar.gz > supertux-0.1.3-rfdt4.1-i586-installer.bin
右击得到的supertux-0.1.3-rfdt4.1-i586-installer.bin,在属性--权限里面勾选“可执行”就完成了。Sample Text