如何在debian/ubuntu/kali上重新打包已安装的软件(代码片段)

~晨曦静竹~ ~晨曦静竹~     2022-10-22     734

关键词:

  How To Repack Installed Software on Debian/Ubuntu

  It can happen that a particular version of a specific tweaked package no longer available elsewhere or you want the exact “clone” of the running software. If you have installed some Debian package on your server and want to install the same package on another server either to avoid downloading them again or “clone” with the settings then there are some tools which can help you. If the second machine lacks an internet connection then you’ll need to install the dependencies as well.

  划重点:
	1. 如何将 Debian系 Linux系统或服务器上已安装的软件重新打包,制作 deb 安装包;
	2. 能否实现软件环境的克隆,以避免因缺失依赖而项导致的无法安装;
	3. 保持软件原来的设置状态迁徙,减少后续重新设置时的工作量。

  面对如上困境,博主推荐使用 dpkg-repack 和 apt-clone工具 ~~

   一、 Dpkg-Repack

  dpkg-repack 是一款能对已安装软件进行deb打包的软件。

  Dpkg-Repack 软件的 Ubuntu 使用手册: https://manpages.ubuntu.com/manpages/kinetic/en/man1/dpkg-repack.1.html

  安装方法:
	sudo apt install dpkg-repack -y




  安装成功后,以我 Kali Linux 操作系统中的 百度输入法为例:

   打包百度输入法 Linux版:
	 dpkg-repack fcitx-baidupinyin


  可以看到,在当前文件夹下,生成了名为 fcitx-baidupinyin_1.0.1.0_amd64.deb 的包,对,这是我使用了一年的老旧百度输入法,版本为 1.01,由此,证实 dpkg-repack 工具的确可将已安装的软件重新打包回 deb包。

  如果由于任何权限问题而无法重建 deb 文件,请从fakeroot环境中运行命令:

	fakeroot -u dpkg-repack <package-name>

  我们可以在运行原始软件的主服务器上打印依赖项:

	apt-cache depends Package_name |awk 'print $2'

  也可尝试创建脚本来自动安装依赖项:

package=package
dpkg-repack $(apt-cache depends --false-suggests $package |awk 'print $2') $package

  注意,dpkg-repack 是无法复制你对软件的自定义设置的。它仅能对某台Debian系的系统或服务器上的软件进行deb的打包重建。

  或许有小伙伴想,要是能保持软件设置状态和依赖项移植过去就好了,这样就能顺利的安装,并节省重新设置的时间啦!!

  不着急,热心帅气的博主已为你想好了方法~


   一、Apt-Clone

   apt-clone 是一款非常使用的程序,能够 帮助 dekg-repack 重新构建deb的同时保留被打包软件的设置项和依赖环境。

  Apt-Clone 软件的 Ubuntu 使用手册: http://manpages.ubuntu.com/manpages/bionic/man8/apt-clone.8.html

  Apt-Clone的 Debian 官网下载:https://packages.debian.org/stretch/apt-clone


  当然,该软件同样可通过CLI进行安装:

	apt-get install apt-clone -y

   可以通过 apt 先查阅软件依赖项:

	 C:\\root> apt-cache depends fcitx-baidupinyin | awk 'print $2'
	
	libc6
	fcitx-bin
	fcitx-data
	fcitx-modules
	libglib2.0-0
	libqt5core5a
	qml-module-qtquick-controls
	fcitx
	fcitx	



   指定构建被迁徙软件的 apt-clone.tar.gz 环境包:

	 apt-clone clone fcitx-baidupinyin --with-dpkg-repack


  构建完成:
  最后将构建好的 apt-clone.tar.gz 移动到目标服务器中恢复构建即可:

	apt-clone restore fcitx-baidupinyin.apt-clone.tar.gz

  You can manually install the same packages from one server to another with the below commands :

	dpkg -l | grep ^ii | awk 'print $2' > installed
	# another server
	sudo apt-get install $(cat installed)

  Usually, the settings are saved in the /etc/ directory. There are tools such as etckeeper which can be used with git to restore the settings :
   http://etckeeper.branchable.com/


  注:
  Ubuntu的文档手册和 etckeeper 或许需要科学上网才可访问,但仍建议使用前先阅读。
  另外, 该项过程将 耗费读者 较多的磁盘空间 和操作 时间,请耐心细致的去工作,并酌情处理~~

如何在debian/ubuntu/kali上重新打包已安装的软件(代码片段)

...onthenyou’llneedtoinstallthedependenciesaswell.  划重点: 1.如何将Debian系Linux系统或服务器上已安装的软件重新打包,制作deb安装包; 2.能否实现软件环境的克隆,以避免因缺失依赖而项导致的无法安装; 3.保持软... 查看详情

debian/ubuntu/kali如何安装spotify音乐白嫖神器(代码片段)

  HowtoinstallSpotifyonDebian/Ubuntu/KaliLinux  可能有小伙伴不了解,什么是Spotify?博主照搬维基百科来做简要介绍:  Spotify(/ˈspɒtɪfaɪ/),中文译作“声田”),是一家瑞典线上音乐流媒体平台&... 查看详情

debian/ubuntu/kali如何安装spotify音乐白嫖神器(代码片段)

  HowtoinstallSpotifyonDebian/Ubuntu/KaliLinux  可能有小伙伴不了解,什么是Spotify?博主照搬维基百科来做简要介绍:  Spotify(/ˈspɒtɪfaɪ/),中文译作“声田”),是一家瑞典线上音乐流媒体平台&... 查看详情

debian/ubuntu/kali如何安装spotify音乐白嫖神器(代码片段)

  HowtoinstallSpotifyonDebian/Ubuntu/KaliLinux  可能有小伙伴不了解,什么是Spotify?博主照搬维基百科来做简要介绍:  Spotify(/ˈspɒtɪfaɪ/),中文译作“声田”),是一家瑞典线上音乐流媒体平台&... 查看详情

从 iPhone 主屏幕重新打开时,如何在 jQuery Mobile 应用程序上缓存并保留上次访问的页面?

】从iPhone主屏幕重新打开时,如何在jQueryMobile应用程序上缓存并保留上次访问的页面?【英文标题】:Howtocache&persistthelastvisitedpageonajQueryMobileapplication,whenre-openedfromiPhonehomescreen?【发布时间】:2012-02-0822:41:10【问题描述】:我... 查看详情

在 iPhone 上重新打开 Safari 时如何检测焦点?

】在iPhone上重新打开Safari时如何检测焦点?【英文标题】:HowtodetectfocuswhenreopeningSafarioniPhone?【发布时间】:2012-07-2210:23:01【问题描述】:我有一个适用于iPhone的网络应用程序,我需要在网页处于焦点时触发Javascript函数,换句话... 查看详情

Android如何在屏幕关闭/打开时防止webview重新加载?

】Android如何在屏幕关闭/打开时防止webview重新加载?【英文标题】:Androidhowtopreventwebviewreloadwhenthescreenisoff/on?【发布时间】:2018-03-2005:20:36【问题描述】:我看到了很多与我的问题相关的文档和文章。但我没有得到任何适当的解... 查看详情

如何创建一个倒数计时器,当屏幕关闭时停止并“等待”,重新打开时恢复。安卓

】如何创建一个倒数计时器,当屏幕关闭时停止并“等待”,重新打开时恢复。安卓【英文标题】:Howtocreateacountdowntimerthatstopsand"waits"whenthescreenisoff,resumeswhenbackon.Android【发布时间】:2016-01-2415:34:57【问题描述】:如何创... 查看详情

iPhone SDK - 如何在应用程序关闭和重新打开时保存和恢复计时器标签

】iPhoneSDK-如何在应用程序关闭和重新打开时保存和恢复计时器标签【英文标题】:iPhoneSDK-HowtosaveandresumetimerLabelwhenappisclosedandreopened【发布时间】:2014-07-2800:53:34【问题描述】:我有一个倒数计时器,当您启动它时,它会创建一... 查看详情

Vuetify 对话框在重新打开时重置内容

】Vuetify对话框在重新打开时重置内容【英文标题】:VuetifyDialogResetContentonre-open【发布时间】:2021-11-1303:50:23【问题描述】:我有一个包含iframe的vuetify对话框。我需要每次重新打开对话框时iframe都会重置到开头。现在,每次打开... 查看详情

RTI DDS 两个应用程序在同一域上发布数据。当一个应用程序关闭并重新打开时,它会丢失数据。怎么解决?

...个应用程序在同一域上发布数据。当一个应用程序关闭并重新打开时,它会丢失数据。怎么解决?【英文标题】:RTIDDStwoapplicationspublishingdataonsamedomain.Whenoneapplicationclosesandreopensitloosesthedata.Howtosolve?【发布时间】:2019-02-1510:08:31... 查看详情

阻止本机 Web 应用在 iOS 上打开时自行重新加载

】阻止本机Web应用在iOS上打开时自行重新加载【英文标题】:StopnativewebappfromreloadingitselfuponopeningoniOS【发布时间】:2011-05-1613:28:26【问题描述】:我正在尝试在iOS上使用HTML+JS构建一个“原生网络应用程序”。您可能知道,您可... 查看详情

LongPress on List 确实在 iPad 上重新排序,但如何在 iPhone 上重新排序

】LongPressonList确实在iPad上重新排序,但如何在iPhone上重新排序【英文标题】:LongPressonListdoesre-orderoniPad,buthowtoreorderoniPhone【发布时间】:2019-11-1708:06:46【问题描述】:使用以下代码,在长按时重新排序列表有效,但仅在iPad上,... 查看详情

如何在网格上动态重新布局用户控件?

】如何在网格上动态重新布局用户控件?【英文标题】:HowcanIdynamicallyre-layoutusercontrolsonagrid?【发布时间】:2021-09-1912:13:59【问题描述】:如何动态重新布局放在网格上的用户控件?我可以使用UniformGrid吗?通过像这样在堆栈面... 查看详情

如何在打字稿上重新连接(重新订阅)到 websocket

】如何在打字稿上重新连接(重新订阅)到websocket【英文标题】:Howreconnect(resubscribe)towebsocketontypescript【发布时间】:2018-07-2117:06:34【问题描述】:我有一个Ionic3应用程序,它在某个视图上连接视图进入并订阅websocket可观察/观... 查看详情

如何在 viewWillAppear 上重新加载 fetchedResultsController?

】如何在viewWillAppear上重新加载fetchedResultsController?【英文标题】:HowtoreloadfetchedResultsControlleronviewWillAppear?【发布时间】:2017-11-1605:20:07【问题描述】:因为我想在关闭弹出视图控制器后重新加载表视图和数据。这个获取控制器... 查看详情

如何在 dataproc 集群上重新启动 hadoop 服务

】如何在dataproc集群上重新启动hadoop服务【英文标题】:HowdoIrestarthadoopservicesondataproccluster【发布时间】:2017-08-2820:24:25【问题描述】:我可能使用错误的术语进行搜索,但谷歌并没有告诉我如何执行此操作。问题是如何在更改... 查看详情

java示例代码_在简历上重新加载共享参考?(或如何刷新/重新加载活动)

java示例代码_在简历上重新加载共享参考?(或如何刷新/重新加载活动) 查看详情