如何从Linux源码创建RPM或DEB包

如何从Linux源码创建RPM或DEB包,第1张

在Linux系统 *** 作中,因为某些原因而想要直接从源码创建安装的软件包,下面就如何在Linux系统下从源码创建RPM或DEB包,以便将来可以更容易的卸载程序。

如果已经从它的源码运行“make install”安装了linux程序。想完整移除它将变得真的很麻烦,除非程序的开发者在Makefile里提供了uninstall的目标设置。否则必须在安装前后比较系统里文件的完整列表,然后手工移除所有在安装过程中加入的文件。

这时候Checkinstall就可以派上使用。Checkinstall会跟踪install命令行所创建或修改的所有文件的路径(例如:“make install”、“make install_modules”等)并建立一个标准的二进制包,让能用发行版的标准包管理系统安装或卸载它,(例如Red Hat的yum或者Debian的apt-get命令)。已知它在 Slackware、SuSe、Mandrake 和 Gentoo 上也工作很好,请参考其官方文档。

在这只集中在红帽子和Debian为基础的发行版,并展示怎样从源码使用Checkinstall创建一个RPM和DEB软件包

在linux上安装Checkinstall

在Debian及其衍生发行版上安装Checkinstall:

# aptitude install checkinstall

在红帽子的发行版上安装Checkinstall,你需要下载一个已经打包好的Checkinstall rpm包(例如:从 http://rpm.pbone.net/找到),不过它已经从Repoforge库里删除了。这个包是针对Cent OS6的,不过也可在Cent OS7里工作。

# wget

ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/ikoinoba/CentOS_CentOS-6/x86_64/checkinstall-1.6.2-3.el6.1.x86_64.rpm# yum install checkinstall-1.6.2-3.el6.1.x86_64.rpm

一旦checkinstall安装好,你就可以用下列格式创建一个特定的软件包

# checkinstall 《install-command》

如果没有参数,默认安装命令“make install”将被使用

用Checkinstall创建一个RPM或DEB包

在这个例子里,我们将创建一个htop包,这是一个linux交互式文本模式进程查看器(类似 top)。

首先,让我们从项目的官方网站下载源代码,作为一个好的习惯,我们存储源码包到/usr/local/src下,并解压它。

# cd /usr/local/src# wget http://hisham.hm/htop/releases/1.0.3/htop-1.0.3.tar.gz# tar xzf htop-1.0.3.tar.gz# cd htop-1.0.3

让我们看看htop的安装命令是什坦散信么,以便我们能用Checkinstall命令调用它,如下面所示,htop用“make install”命令安装。

# 。/configure# make install

因此,要创建一个htop安装包,我们可以不带任何参数的调用checkinstall,这将使用“make install”命令创建一个包。在这个过程中, checkinstall命令会问你几个问题。

简而言之,如下命令会创建一个htop包:

# 。/configure# checkinstall

“Should I create a default set of package docs?(我会创建一个默认设置的包文件?)”,回答“Y”:

此可以输入一个包的简短描述,然后按两次回车:

输入一个让轮数字以修改下面的任何值或ENTER继续:

然后checkinstall将自掘差动地创建一个.rpm或者.deb包,根据你的linux系统是什么:

在CentOS7:

在Debian 7:

 

上面就来Linux系统下使用checkinstall从源码创建RPM或DEB包的方法。

gentoo安装和使用进行了将近一天的惊心动魄的升级后(很庆幸系统没有挂掉,而且感觉更快了),终于想静下心来把一个星期以来的安装、配置以及升级gentoo大致写出来,一是想纪念一下,另外也许对其他想用gentoo的朋友有一些参考价值。我使用linux不算很长,大概用了一年半的ubuntu和一年的archlinux。用archlinux时逛经常有人谈及gentoo,好像用 gentoo的都是高手。当时感觉可笑,各各发行版区别都那么大吗,之前用ubuntu转到archlinux也就是显卡驱动那碰到点问题,其他都比较顺 利,gentoo又能难到哪去呢?另外gentoo安装软件都是要编译的,我的本性能也不好,就想如果以后换了新的再考虑吧,所以中间虽然想了几次,但一 定没有尝试。一个星期前( 3月4),我把mplayer和ffmpeg都手动升级下,发现编译起来有点纠结,mplayer需要ffmpeg的源迹带码,但ffmpeg还要单独编 译,后来让mplayer用ffmpeg的so后升级ffmpeg后mplayer居然挂了,重编了几回才弄好。系统里有好几个包都自己编译,主要是想去 掉不用的依赖,但手动维护太麻烦了,于是又想到了gentoo。当时已经10点多了,于是想第二天开始着手。废话完毕。 之前的硬盘分区就这样的:/神轮dev/sda1 ext4 6g //dev/sda2 2g 未使用/dev/sda3 ntfs 30g/dev/sda4 jfs 66g /home其中/dev/sda2是以前的swap,但后来不用休眠功能后感觉swap意思不大,就不用了。其余的三个分区都比较重要,基本动不得,这给怎么装啊。想来想去,先用sda2试试吧,如果装不上就没事了,装上再进一步考虑吧。于是把sda2格成了reiserfs(某人说这种格式好,但我从来没用过,正好体验一下)。下载 stage3-i-.tar.bz2 和portage-latest.tar.xz。(前一个文件一周一更新)(我用的32位)国内的镜像有: mount /dev/sda2 /media/zsudo tar xvpf stage3-i-.tar.bz2 -C /media/zsudo tar xvpf portage-latest.tar.xz -C /media/z/usr准备chroot环境:sudo mount -t proc none /media/z/procsudo mount -vt devpts devpts /media/z/dev/ptssudo chroot /media/z/ /bin/bash现在就chroot进去了,之后的 *** 作如不特别说时都是在这个环境下进行的。 初始化环境变量:env-updatesource /etc/profile修改/etc/ke.conf,这个非常重要,最好首先改到位,不然之后有你受的(我就是,不得要领,改了多回,改完还要重编译各种东西):加入源:GENTOO_MIRRORS= #-jn,n是内核数加1,多线程编译用的,不设置也行INPUT_DEICES=keyboard mouse synaptics #键盘、鼠标、触摸板#下面的是很重要的USE,开始时可以只用USE=X gtk,但最开始写好以前就省事了,不然以后会麻烦重重。USE=-pppd -alsa -fortran sse sse2 ssse3 mmx sdl v4l v4l2 oss oss4 X gtk unicode truetype jpeg png gif cairo zsh-completion fontconfig videoopenglIDEO_CARDS=radeon #这个至关重要,显卡驱动类型,具体请查看官方游州信wiki,我的是ati x,只能用这个开源驱动。#CCEPT_KEYWORDS=~x86 #这个要注意,如果要用最新的软件,可以加上这行,但如果是第一次装,强烈不建议加,不然会提升安装难度先改这些就差不多了。改/etc/locale.gen,加(按照自已需要写)en_US.UTF-8 UTF-8zh_CN.UTF-8 UTF-8zh_CN.GB GBzh_CN.GBK GBK运行locale-gencp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime修改/etc/conf.d/clockCLOCK=localTIMEZONE=Asia/Shanghai改/etc/resolv.conf,把本机的/etc/resolv.conf内容写出其中,不然上不了网。改/etc/fstab,这个也可以安装完内核再写,这个应该都会写。查看网络是否正常(如果电脑联网了,resolv.conf也改了就可以上了),然后同步portage(如果portage-latest.tar.xz是刚下的也可以略过这步,但最好还是运行下吧):emerge --sync安装内核源码:emerge gentoo-sources下边就开始编译内核了,如果有手动配置内核的经验强烈建议手动配置编译:cd /usr/src/linuxke menuconfigkeke modules_installcp arch/x86/boot/bzIge /boot,不然最好使用genkernel:emerge genkernelcd /usr/src/linux/genkernel --menuconfig all关于配置内核请上网自行查询,如果下一种方式实在不会也可以不配置,一般也能启动起来。编译时间和很多因素有关,几十分钟到几小时不等。用户相关:(osily是自己要创建的用户名)passwduseradd -m -G audio,cdrom,portage,u,video,wheel,users -s /bin/bash osilypasswd osily如果fstab之前没改好现在一定要改好,然后改自己系统的/boot/grub/menu.lst。此处官方wiki写的很清楚,建议查看。 现在可以继续安装其他软件,如xorg-server,但最好还是重启看看能不能进去。如果不能的话多半是内核(尤其是自己编译的内核)的问题,如果内核没问题,看看/boot/grub/menu.lst是不是有问题,多改几回。如果可以正常进去的话,可以直接在这继续编译,但最好还是返回原来的系统继续。可以写个类似这样的脚本:#!/bin/bashsudo mount /dev/sda2 /media/z/sudo mount -t proc none /media/z/procsudo mount -vt devpts devpts /media/z/dev/ptssudo chroot /media/z/ /bin/bash运行就可以进去chroot环境,如果进去环境变量不正常运行:env-updatesource /etc/profile然后就是安装需要的东西了,主要看自己了,比如dhcpcd、sudo、vim,一般的工具直接emerge xxx就可以了,emerge的具体用法网上查吧。但如果你想要桌面环境的话,最好按以下的步骤:安装点基本工具后,直接安装xorg-server,注意前提/etc/ke.conf里显卡和输入设备等变量一定是正确的。这会安装许多东西,基本要用一个小时以上,耐心等待吧。安装完后:(xorg-x11和驱动相关,请查看wiki相关部分,这部好像可以省略,记不清了) eselect opengl set xorg-x11如果安装好了,可以先重启试试,进去后,运行startx,这是很的一刻了,如果显示找不到xterm找不到什么的,恭喜你,显卡驱动基本正常了,不 然就会有各种稀奇古怪的问题&&×&%×&,那么也恭喜你,在接下来的时间你将对安装显卡驱动、写 xorg.conf等有深刻而透彻的了解。如果是前者,你可以回去继续安装其他东西,如xterm(最好安装完再重启下看看是不是正常,如果不正常,那么你可以回过头处理显卡驱动问题了)、openbox甚至gnome、kde。下文再说。如果是后者或者刚才的xterm显示分辨率不对、鼠标键盘触摸板不能用,那么你要折腾一会了,虽然之前安装内核没有难到你,这里很可能让足够纠结甚至放弃。这也是我安装过程中最混乱的地方,已经没法清晰地回忆了,因为这的问题我先后重装了4次,(第一次因为2g空间不够,2、3次都因为X段错误,非常纠结),而且其中改了几回显卡驱动类似,重编译了多回。如果是X段错误,看出错信息是不是加载某个so出的错,如果是可以先把那个so移到别的地方重试。如果不是段错误,可能是xorg.conf有问题,有的驱动是不需要这个问题的,默认也是没有了,所以如果有先删掉试试,不行的话用X -configure生成一个新的再X -config xorg.conf.new尝试如果不行的话,还很有可能是内核没配置的问题,这往往比较麻烦,可以先仔细阅读wiki,不行再去linuxsir等去找找或者问问。重编译内核后最好把和X相关的包也重编译下(有许多)。再有很可能是你选择的驱动不支持你的显卡,比如老的ati显卡很多都不能用现在的闭源驱动。这样可以试试其他的,改/etc/ke.conf,然后必须把相关的包重新编译。还有其他的可能吧如果xterm能进去了,但鼠标键盘等不能用,保证/etc/ke.conf正确的话,安装xf86-input-evdev,如果xf86-input-keyboard xf86-input-mouse xf86-input-synaptics 没有的话说明/etc/ke.conf没写对,这时安装上这几个包也未必好用,可能要重新编译更多包。这个问题应该是比较好解决的。如果分辩率不正常,首先要确认用的不是xf86-video-vesa的驱动(按我的流程不会安装到这个包),如果是那很可以分辨率就不调不正常了。然后还是显卡驱动安装问题,还有xorg.conf,上网多找找吧。显卡驱动问题如果一时解决不了的话,可能会拖很长时间,甚至直到放弃,或者你甘愿不用图形界面。 如果以上都正常了,gentoo离你就很近了。接下来主要部署桌面环境,推荐比较轻量的,(如openbox、fluxbox、fvwm、dwm、awesome等),可以配合面板(tint2、bmpanel、pypanel等),不然要花很长时间编译。安装完后就按自己的需要进行配置了。现在还没有涉及的问题主要还有:声卡、网卡、摄像头等设备的驱动,以及触摸板不正常等。如果触摸板用手指点无反应,但手指有反应,试试:synclient TapButton1=1如果横向滚动不能用:synclient HorizEdgeScroll=1其他问题请查询synclient用法要把上边的命令放在启动脚本里,如是.xinitrc,确保它能在进入X前被调用。声卡问题,如果用alsa的话,genkernel默认编译的内核包含了alsa驱动,应该就要以正常使用了,如果没包含就要有点麻烦。如果内核包含了oss驱动(这是旧版本的),可能也可以正常用,但效果应该不好,能就算了吧。 如果都没有的话如果内核启用的声卡支持(menuconfig里有一层的里边是alsa和oss,它的上一层要选上),你可以选择安装alsa或者oss 驱动,个人推荐用oss4,它音质比较好,占用资源少(我试和内核的alsa里比mplayer放mp3时cpu占用省了一半)。但安装oss4不是很容 易,因为它不在portage里,要用layn,还要能连接国外网。alsa没装过,wiki有详细说明。如果现在就要安装oss4,也好:emerge laynlayn -a oss-overlay然后再/etc/ke.conf里加一句:source /var/lib/layn/ke.conf然后emerge oss或者emerge oss-devel如果网络没问题的话应该正常安装。要保证/usr/src/linux指向的是当前用的内核然后/etc/init.d/oss start,一般要等几分钟因为要编译内核模块,如果成功了基本就可以用了,可以试试osstest,不成功的话问题就麻烦了,很可能你要重新编译内核


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12394382.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存