1.从vmlinuz提取出vmlinux
vmlinuz是vmlinux通过gz压缩之后,添加了一段解压缩程序形成的。gzip文件有个标准的文件头,可以通过识别gzip这个头在文件当中的位置来找到vmlinux压缩后所在的位置,然后通过dd将数据导入到一个文件当中。
(1).查找1F 8B 08 00这是gzip的标志头
(2).dd bs=1 skip=x if=/xxx/vmlinuz of=vmlinux.gz
(3).确认文件:file vmlinux.gz
vmlinux.gz: gzip compressed data, from Unix, last modified: Fri Oct 16 22:17:48 2009, max compression
(4).解压缩文件生成vmlinux gunzip vmlinux.gz
2.mock的一些情况
(1). mock操作流程
a.mock -r centos-7-x86_64 --init; // centos-7-x86_64对应/etc/mock下面的cfg文件名
b.mock -r centos-7-x86_64 --rebuild *.src.rpm
c.mock -r centos-7-x86_64 clean // 实际就是把前 两步生成的文件删除
(2).使用root账户进行mock时生成的文件默认放在/var/lib/mock/“/etc/mock目录下面cfg文件名前缀” 目录下面,包括一个干净的根环境和builddir目录,其中builddir/build目录包括BUILD BUILDROOT originals RPMS SOURCES SPECS SRPMS。
(3).--resultdir指定生成 的目标文件目录,包括log和RPMS等,--rootdir指定生成的新的root目录位置。
如:mock -r centos-7-x86_64 --rebuild kernel-4.18.0-147.5.1.el8_1.5es.11.src.rpm --resultdir=/root/centos-7-x86-64 --rootdir=/root/centos-7-x86-64/
3.进制转换
(1).printf %x 172
(2).printf %d 0xac
4.rpm spec语法记录
(1).%files 包名 指定该包需要哪些文件,在%install之后会将%files指定的文件放在rpm包中, -f xxx.list,表示所需要的文件列表放在xxx.list文件当中。
(2).BUILD目录是源码编译的目录,而BUILDROOT存放的需要打包放在rpm的文件。
(3).rpmbuild在%install阶段之后会自动运行一些命令,可通过rpmbuild --showrc查看,带post后缀的就是在%install阶段之后运行的,其中find-debuginfo.sh就是在这个阶段运行的。
(4).一个spec文件可以可以生成多个rpm子包,通过%package指定包名,然后用%files指定该包需要那些文件。
(5).src.rpm解包:rpm2cpio xxxxx.rpm | cpio -idv
(6).debugedit 的-b参数必须和实际的一样,不然不能正确修改。
阅读(824) | 评论(0) | 转发(0) |