当前位置: 首页 > news >正文

如何从 apt-get 升级中排除特定软件包

在处理某些项目时,有时您需要环境的稳定性。更新包可能会导致整个项目失败。有时,我们不小心升级了这些软件包,这会在服务器上造成严重问题。这就是为什么维护特定版本的软件包很重要的原因。

本教程将向您展示如何从 Ubuntu 或 Debian 发行版的升级中排除特定软件包。

1)用一些命令排除包

在系统的全面升级过程中,存在一些排除或保留特定包的各种方法。可以将包裹标记为保留。在本文中,我们将使用 virtualbox 包作为示例。可以看到安装的版本

# dpkg -l | grep virtualbox
ii  virtualbox    5.0.18-dfsg-2build1   amd64   x86  virtualization solution - base binaries

现在您可以看到我们有可用的更新版本

# apt list --upgradable
Listing... Done
virtualbox/xenial-updates 5.0.40-dfsg-0ubuntu1.16.04.2 amd64 [upgradable from: 5.0.18-dfsg-2build1]

您可以使用以下命令标记包

apt-mark

您可以使用apt-mark命令后跟hold选项。这将防止软件包被自动安装、升级或删除。语法如下

apt-mark hold package

您可以按如下方式实际使用它

# apt-mark hold virtualbox 
virtualbox set on hold.

现在你可以检查如下

# apt upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  virtualbox
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

可以看到无法升级包。

要取消标记,请使用以下语法

apt-mark unhold package

实际上你有下面的命令

# apt-mark unhold virtualbox
Canceled hold on virtualbox.

dpkg

您也可以使用该dpkg --set-selection命令标记包。语法如下

# echo " hold" | dpkg --set-selections

实际上,您可以按以下方式进行

# echo "virtualbox hold" | dpkg --set-selections

您没有任何显示结果的回报。所以,直接检查升级

# apt upgrade
Reading package lists... Done
Building dependency tree 
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
 virtualbox
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

你可以看到它有效。

现在取消保留,命令不同并且尊重语法

echo "package install" | sudo dpkg --set-selections

所以,使用命令

# echo "virtualbox install" | dpkg --set-selections

你不会有回报。因为我们已经是 root 用户,所以我们不使用sudo

Aptitude

您也可以使用 aptitude 命令。默认情况下,您的系统上不存在此命令,因此您需要按以下方式安装它

# apt install aptitude
Reading package lists... Done
Building dependency tree 
Reading state information... Done
The following additional packages will be installed:
 aptitude-common libcwidget3v5

要使用命令标记包,请使用语法

aptitude hold package

当你用 aptitude 标记一个包裹时,你没有回报。

# aptitude hold virtualbox
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.

如果您使用 来检查结果aptitude upgrade,您将不会提及已标记的包,但如果您尝试,您将拥有它apt upgrade

您可以使用语法取消保留

aptitude unhold package

如下

# aptitude unhold virtualbox
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

Dselect

您可以使用 dselect dpkg 的前端命令,该命令用于管理 Debian 和基于 Debian 的 Linux 发行版中的软件包。默认情况下不存在,因此您需要安装它

# apt install dselect

启动命令

现在仔细阅读帮助。

现在您可以使用空格键盘退出帮助并找到要保存的包。你可以/用来做研究

现在您可以使用H=

现在你可以退出了Q。它将打开第一个菜单,选择退出。您可以通过升级检查

# apt upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  virtualbox
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

你可以看到它有效。

如果要取消标记包,则需要使用+而不是H=用于保持在结果上具有三颗星,如下所示

2) 使用apt配置文件的block包

标记包的一种方法是编辑 /etc/apt/preferences文件。要在升级整个系统的同时不升级软件包,我们必须设置一个小于零 (0) 的 apt pin 优先级。如果文件不存在,则必须创建它。您需要尊重以下语法

Package: <package-name> ('*' for all packages)
Pin: release * (o=Ubuntu for Ubuntu origin)
Pin-Priority: <less than 0>

在 Release Pin 行上,您可以添加包的发起者,对于 Pin-Priority 数字,数字越大意味着偏好越高, -1 等于忽略该包。还有一些其他选项可以使用。

要阻止 virtualbox 包,请编辑文件如下

Package: virtualbox
Pin: release o=Ubuntu
Pin-Priority: -1

保存并退出。这就是您阻止包裹的全部内容。要取消保留包,您可以注释文件的行或简单地删除文件。

您可以看到可以使用一些方法来阻止一个包。这对于维护项目的稳定版本很有用。您可以选择您喜欢的方法。您不需要为同一目标使用两种或多种方法。

相关文章:

  • C++/Python:罗德里格斯旋转矩阵
  • c++征途 --- STL初识
  • 学习编程的第二十三天
  • 上交所技术——2020春招应用开发工程师(Java)笔试
  • 猿创征文|时间序列分析算法之二次指数平滑法和三次指数平滑法详解+Python代码实现
  • 基于人工兔优化算法的函数寻优和工程优化
  • 网络安全无小事, 所有艾思运维人员, 在nginx中必须对thinkphp的目录做以下安全设置, 未尽目录请自行添加
  • Shiro 权限绕过漏洞(CVE-2020-1957)
  • 【python脚本】用于生成简单握手接口与自测环境的gen_uvm_agent脚本
  • Java多线程下——各类锁的详解
  • vue——VM对象和基础指令
  • 手把手带你刷好题(牛客刷题②)
  • 【web-攻击用户】(9.7.1)本地隐私攻击:持久性cookie、缓存Web内容、浏览历史记录、Flash本地共享对象……
  • Linux shell 内建命令
  • 计算机网络 --- TCP与UDP协议
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【刷算法】求1+2+3+...+n
  • ESLint简单操作
  • Node + FFmpeg 实现Canvas动画导出视频
  • Promise面试题,控制异步流程
  • React-flux杂记
  • SAP云平台里Global Account和Sub Account的关系
  • Xmanager 远程桌面 CentOS 7
  • 后端_ThinkPHP5
  • 基于web的全景—— Pannellum小试
  • 老板让我十分钟上手nx-admin
  • 每天一个设计模式之命令模式
  • 前端之React实战:创建跨平台的项目架构
  • 人脸识别最新开发经验demo
  • 走向全栈之MongoDB的使用
  • HanLP分词命名实体提取详解
  • Python 之网络式编程
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (07)Hive——窗口函数详解
  • (13)Hive调优——动态分区导致的小文件问题
  • (Note)C++中的继承方式
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)http协议
  • (转)关于pipe()的详细解析
  • (转)关于多人操作数据的处理策略
  • **PHP二维数组遍历时同时赋值
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET/C# 使用反射注册事件
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET开源项目介绍及资源推荐:数据持久层
  • @Controller和@RestController的区别?
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @RequestBody与@ModelAttribute
  • @vue/cli 3.x+引入jQuery