热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析FCEUX源码:两种制作DEB包的方法及修改现有DEB包的技术细节

本文深入解析了FCEUX源码,并详细介绍了两种制作DEB包的方法及其技术细节。首先,DEB包通常由两部分组成:控制信息(位于DEBIAN目录)和安装内容(模拟目录)。通过解压现有的DEB包,可以查看其内部结构,进而理解其工作原理。具体操作包括将安装内容释放到指定目录中,以便进行进一步的修改和定制。此外,文章还探讨了如何修改现有的DEB包,以满足特定需求,提供了实用的步骤和技巧。

1. 原理

1) deb包通常包含两部分:控制信息(DEBIAN目录)、安装内容(模拟"/"目录)

2) 通过解开已有的deb包看其中内容

i. 释放安装内容到dirname目录中

$ dpkg-X xxx.deb dirname

ii. 释放控制信息到当前目录下的DEBIAN子目录中

$ dpkg-e xxx.deb

2. 准备

1) 安装相关工具

$ sudo apt-getinstall dh-make checkinstall

2) 下载示例软件源码包

以游戏模拟器为例(也可使用其它源码包),制作它的deb包,下载地址:

3. 方法一: 使用checkinstall方法创建deb包

checkinstall不仅可以生成deb包,还可以生成rpm包,使用简单。

$ tar xvjf fceu-0.98.12.src.tar.bz2# 解包

$ cd fceu;./configure;make# 编译

$ checkinstall-D-install=no--pkgversion=0.98--pkgname=fceuxy make install# 制作deb包

此时当前目录下生成了deb包。

4. 方法二: 使用dpkg方法创建deb包

dpkg是最基本的制作deb包的方法,推荐使用

$ tar xvjf fceu-0.98.12.src.tar.bz2# 解包

$ mv fceu fceu-0.98# 改目录名为 包名-版本号

$ cd fceu-0.98

$ dh_make-f../fceu-0.98.12.src.tar.bz2# 生成制作deb包所需的默认信息

此时当前目录下生成了debian目录,此时通常修改两个文件:

修改debian/control文件,配置你的信息,具体字段见参考资料部分

修改debian/rules脚本,它决定编译参数(也可以不改)$ dpkg-buildpackage-rfakeroot

此时可以看到,上层目录中已建立了deb包。

修改已有deb包

自己创建deb所需目录结构(控制信息和安装内容),然后打包,一般使用这种方法来修改已有的deb包,而不是新建deb包,命令如下:

$ mkdir-p test

$ dpkg-X xxx.deb test# 解包安装内容

$ cd test

$ dpkg-e../xxx.deb# 解包控制信息

修改DEBIAN目录下的内容,然后重新打包:

$ cd../

$ dpkg-b test xxx_new.deb# 重新打包

关于deb包的常用命令

1. 查看deb包含有哪些文件

$ dpkg-c xxx.deb# 安装前根据deb文件查看

$ dpkg-L debname# 安装后根据包名查看

2. 安装deb包

$ dpkg-i xxx.deb

3. 查看某个文件属于哪个deb包

$ dpkg-S filefullpath

4. 卸载deb包

$ dpkg-r debname

5. 完全卸载deb包(包含配置文件)

$ dpkg-P debname

6. 下载源码包

$ apt-getsource packagename

7. 根据软件包名模糊检索

$ dpkg-l|grep xxx#在已安装的软件包列表中搜索

$ apt-cache search xxx#在源中的所有软件包列表中搜索

参考资料

debian/control文件中信息说明Package 包名

Version 版本

Architecture 目标机架构(i386,arm,amd64等)

Maintainer 维护者

Depends 依赖软件包

Description 描述



推荐阅读
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 16.04 系统上配置 Qt 5.5 的交叉编译环境,特别针对 i.MX6 平台进行了优化设置。内容涵盖从基本的软件安装到高级配置的全过程。 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • 本文详细介绍了Elasticsearch中的分页查询机制,包括基本的分页查询流程、'from-size'浅分页与'scroll'深分页的区别及应用场景,以及两者在性能上的对比。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
  • Beetl是一款先进的Java模板引擎,以其丰富的功能、直观的语法、卓越的性能和易于维护的特点著称。它不仅适用于高响应需求的大型网站,也适合功能复杂的CMS管理系统,提供了一种全新的模板开发体验。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文介绍了如何在不同操作系统上安装Git,以及一些基本和高级的Git操作,包括项目初始化、文件状态检查、版本控制、分支管理、标签处理、版本回退等,并简要提及了开源许可协议的选择。 ... [详细]
  • 本文探讨了在UIScrollView上嵌入Webview时遇到的一个常见问题:点击图片放大并返回后,Webview无法立即滑动。我们将分析问题原因,并提供有效的解决方案。 ... [详细]
  • 本文介绍了一种方法,通过在Linux启动时运行一个Python程序,该程序可以在PMOD OLED上显示PYNQ板的IP地址。 ... [详细]
  • 在Ubuntu 18.04上使用Nginx搭建RTMP流媒体服务器
    本文详细介绍了如何在Ubuntu 18.04上使用Nginx和nginx-rtmp-module模块搭建RTMP流媒体服务器,包括环境搭建、配置文件修改和推流拉流操作。适用于需要搭建流媒体服务器的技术人员。 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中安装 Python 3.7 的步骤,包括编译工具的安装、Python 3.7 源码的下载与编译、软链接的创建以及常见错误的处理方法。 ... [详细]
author-avatar
讲述华哥传奇的生活_616
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有