Jade Dungeon

软件包

dpkg包管理工具

查看包信息

  • dpkg --info "软件包名" 列出软件包解包后的包名称。
  • dpkg -l 列出当前系统中所有的包。.可以和参数less一起使用在分屏查看。
  • dpkg -l | grep -i "软件包名" 查看系统中与"软件包名"相关联的包。
  • dpkg -l 正则表达式 列出所有与模式相匹配的软件包。
  • dpkg -s 查询已安装的包的详细信息。
  • dpkg -L 查询系统中已安装的软件包所安装的位置。
  • dpkg -S 查询系统中某个文件属于哪个软件包。
  • dpkg -I 查询deb包的详细信息,软件包下载到本地之后看看是不是想要。

安装

  • dpkg -i 手动安装软件包,不解决依赖的问题

如果dpkg -i安装时发生信赖错误,使用sudo apt-get -f安装缺少的包。

卸载

  • dpkg -r 卸载软件包.不是完全的卸载,它的配置文件还存在.
  • dpkg -P 全部卸载(但是还是不能解决软件包的依赖性的问题)
  • dpkg -reconfigure 重新配置

清除所有已删除包的残馀配置文件:

dpkg -l | grep ^rc|awk '{print $2}' | #xargs dpkg -P

64位与32位系统支持

下面的命令可以在 Ubuntu/Debian 13.10 或更高的发行版上运行。

第一步: 确认你有一个64位架构的内核

你可以打开终端然后输入:

dpkg --print-architecture
amd64

这说明着你已经拥有了64位架构内核。 第二步: 确认你打开了多架构支持功能

(多架构支持可以让你在有64位库的情况下使用32位库。)

输入:

dpkg --print-foreign-architectures
i386

如果你还没有多架构支持你需要打开它。

另一种第二步: 打开多架构支持。

输入:

sudo dpkg --add-architecture i386
sudo apt -get update
sudo apt-get dist-upgrade

然后就会开始下载更新然后运行。它会检查你已经拥有的库文件是否有更新的版本。

如此这般,你就已经成功地为你的64位系统安装了32位支持了。

APT管理器

设置软件源

拿安装盘做源,方法如下:

  • apt-cdrom ident 扫描光盘的信息。
  • apt-cdrom add 添加光盘源。

网络源最常用的方法就是把源添加到/etc/apt/source.list中,之后更新 apt-get update

软件源Hash错误

发生 Hash Sum mismatch 时,需要清理:

sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*
sudo apt-get clean
sudo apt-get update
sudo apt-get upgrade

设置PPA源

添加:

sudo add-apt-repository ppa:pi-rho/security
sudo apt-get update
sudo apt-get install nmap

删除:

sudo add-apt-repository --remove ppa:pi-rho/security

或者:

sudo apt-get install ppa-purge
sudo ppa-purge ppa:pi-rho/security 

缺少add-apt-repository的话,要安装:

apt-get install software-properties-common

安装FFmpeg

安装,因为有PPA可用,安装非常方便,打开终端,输入命令:

sudo add-apt-repository ppa:samrog131/ppa

sudo apt-get update

Ubuntu 14.04下PPA安装FFmpeg 2.2.2

sudo apt-get install ffmpeg

卸载ffmpeg命令:

sudo apt-get remove ffmpeg

其他系统下载安装:

使用launchpad软件源

Launchpad是Ubuntu母公司Canonical有限公司所架设的网站,是一个提供维护、 支援或连络Ubuntu开发者的平台.

Launchpad的网址:https://launchpad.net/

针对ubuntu可以使用更加精确的搜索方式:https://launchpad.net/ubuntu/+ppas

然后在输入框里输入要查找的软件,比如:arora

通过标题,可以寻找到你要的软件源

选择符合你的Ubuntu版本的源

添加公钥方法1:选择「SigningKey:1024R/」后的那段数字,然后在前面添加:

添加公钥方法2:也可以点击链接后,会出现’ox*******’,选择「OX」后的数字,然后添加:

查看包信息

apt-cache 加上不同的子命令和参数的使用可以实现查找、显示软件、包信息及包信赖 关系等功能。

  • apt-cache stats 显示当前系统所有使用的Debain数据源的统计信息。
  • apt-cache search 正则表达式 可以查找相关的软件包。
  • apt-cache show 包名 可以显示指定软件包的详细信息。
  • apt-cache showsrc 查在下载之前找看源码包的文件信息。
  • apt-cache depends 包名 可以查找软件包的依赖关系。

安装软件

  • apt-get install 安装软件包。
  • apt-get --reinstall 重新安装软件包。
  • apt-get source 下载源码包。
  • apt-get build-dep 包名 构建源码包的编译环境。
  • auto-apt run ./configure 编译时缺少h文件的自动处理。
  • apt-get -f install 解决依赖性这个问题。

安装时自动构那家依赖

sudo apt-get build-dep ffmpeg该命令会在相应的包安装时自动构建依赖关系。因此 包安装的过程将非常流畅,也是非常容易的。

# apt-get build-dep ffmpeg
libxinerama-dev libxml-namespacesupport-perl libxml-sax-expat-perl
libxml-sax-perl libxml-simple-perl libxrandr-dev libxrender-dev
x11proto-render-dev x11proto-xinerama-dev xulrunner-dev
The following packages will be upgraded:
libpixman-1-0

1 upgraded, 143 newly installed, 0 to remove and 6 not upgraded.
Need to get 205 MB of archives.
After this operation, 448 MB of additional disk space will be used.
Do you want to continue [Y/n]?

删除软件

在用命令apt-get install之前,是先将软件包下载到/var/cache/apt/archives中, 之后再进行安装。可以用apt-get clean清除/var/cache/apt/archives目录中的 软件包。

  • apt-get clean 清除无用的软件包
  • apt-get autoremove 删除系统不再使用的孤立软件
  • apt-get remove 包名 #卸载一个已安装的软件包(保留配置文件)。
  • apt-get --purge remove 完全卸载软件包(删除配置文件)。
  • dpkg --force-all --purge packagename 强制卸载,风险大!

升级包

  • apt-get upgrade 更新系统中所有的包到最新版。
  • apt-get dist-upgrade #将系统升级到新版本

准备信赖包

apt-get build-dep 软件名把指定软件需要的包都装上,这样就可以在包齐的情况下自己 编译这个软件。

为了防止以后卸载时忘记当时信赖的哪些包,可以先记下来:

sudo apt-get build-dep pidgin | tee pidgin-b-d.log

安装和删除的包日志记录

一般来说,安装和删除都有日志记录的,参考 https://serverfault.com/questions/380856/how-to-undo-apt-get-remove

/var/log/apt/history.log中有了安装和删除软件包的记录。

找到类似:

Start-Date: 2021-09-25  00:35:17
Commandline: apt autoremove
Remove: python-colorzero:armhf (1.1)
End-Date: 2021-09-25  00:35:20

常见错误

输入命令查看Ubuntu版本

lsb_release -a
# Description:    Ubuntu 16.04.6 LTS
# Release:        16.04
# Codename:       xenial

源没有KEY:

GPG error: http://extras.ubuntu.com trusty Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 16126D3A3E5C1192

加上KEY:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 16126D3A3E5C1192

GPG error:

sudo apt-get build-dep pidgin | tee pidgin-b-d.log

解决方法是删除lists目录中的缓存:

sudo apt-get clean
cd /var/lib/apt
sudo mv lists lists.old
sudo mkdir -p lists/partial
sudo apt-get clean
sudo apt-get update

修复破损的包

sudo apt update --fix-missing
sudo apt- install -f

aptitude命令行模式

命令行APT的前端工具。aptitude在处理依赖问题上更佳一些,在删除一个包时,会同时 删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。

  • aptitude search string 搜索包。
  • aptitude show pkgname 显示包的详细信息。
  • aptitude install pkgname 安装包。
  • aptitude clean 删除下载的包文件。
  • aptitude autoclean 仅删除过期的包文件。
  • aptitude remove pkgname 删除包。
  • aptitude purge pkgname 删除包及其配置文件。
  • aptitude update 更新可用的包列表。
  • aptitude upgrade 升级可用的包。
  • aptitude dist-upgrade 将系统升级到新的发行版。

aptitude界面模式

软件包列表

软件包分成以下几类列出,在所在的行按回车打开分类。底部会显示当前包的信息,按i 显示更详细信息,按q退出。

  • + 标记安装。
  • - 标记删除。
  • g 让所有标记生效。
Updated Packages
升级的软件包

此选项列出在归档库中出先新版本的软件包。通常,当用户完成选择处理,aptitude 下载安装了请求的软件包后,这里的软件包都将被升级。

New Packages
新软件包

更新(aptitude update,或在 aptitude中键入u)软件包列表后所增加的软件包, 让用户了解Debian归档库增加了哪些内容。每次更新,新的软件包就会累加到这里, 直至您键入f将累加清除,并将它们集合到主包库中。

Installed Packages
已安装软件包

这些软件包已经安装在您的机器上,但资源库软件包列表显示不需要对它们进行升级。

Not Installed Packages
尚未安裝的软件包

就象名称标识的,这些软件包当前没有安装在您的机器上。当您清除未安装的 新软件包时,将会进入这部分。

Obsolete or Locally Created Packages
废弃或本地创建的软件包

这些软件包目前已安装在您的机器上,但是它们并未出现在/etc/apt/sources。 list为APT配置的资源库中。

Virtual Packages
虚拟包

虚拟包是由一些软件包提供的逻辑概念。例如:mail-transport-agent就是由postfix 和sendmail, 以及其它等等软件包提供的。

Tasks
任务

任务是一组软件包,它们提供了一种简单的方法来选择一组预定义的完成特定任务的 软件包。在后面将对此做更进一步的讲解。aptitude允许对任务进行浏览和安装。

软件包列表中的软件包状态:

  • v 虚拟
  • B 损坏
  • u 解包
  • C 预配置
  • H 预安装
  • c 卸载未清除
  • p 清除软件包
  • i 已经安装
  • E 内部错误

在aptitude软件包列表中的请求操作:

  • h 保持
  • p 清除
  • d 删除(卸载)
  • B 损坏
  • i 安装
  • r 重装
  • u 升级

底部窗口

底部窗口给出主窗口当前显示的上下文信息。可以用az实现滚屏,i在不同 信息视图间切换。最后,D则用于显示和隐藏信息区。

下边是默认安装时相关背景颜色说明:

绿 安装新软件包
将软件包升级的最新
品红 删除或清除软件包
保存版本(禁止升级)
  • q 退出。
  • ? 帮助。
  • u 升级已经安装的包。

过滤与查询

和正则表达式一样,可以用^$匹配名称的起始字符和结束字符。

/ 并提供一些判断语句,来查询软件包的名称。 \ 用于查询下一个匹配。

l 以某种标准限制软件包的显示,这同样适用于查询。下边是一些重要的判断谓词:

  • ~ahold 保持现有版本的软件包
  • ~b 损坏的软件包
  • ~d<text> 描述中含有<text>内容的软件包
  • ~g 无用的软件包
  • ~m<maint> 由<maint>维护的软件包
  • ~n<text> 名称中含有<text>的软件包
  • ~V<version> 版本号中含有<version>的软件包

这些谓词是可以联合起来使用的。例如,~ahold~dmail选择在描述字中含有mail的 被保持现有版本的软件包。

在两个谓词间使用管道符号|,可以对两个表达式进行逻辑或操作:~v|~b选择所有 受损软件包或虚拟软件包。

查询不会忽略两个谓词间的空格,~V.0~V .0是不一样的,后边的一个不会 有匹配结果。

感叹号对表达式取反:!~b查询所有未受损的软件包。可以使用括号来表达复杂的 布尔逻辑:~g(~dmanual|~sdoc)将查询所有包含manual或在doc部分的受损软件包。

需要注意的是, 当搜寻正则表达式中含有某些特殊字符, 象(),代字号~,和 感叹号时, 则必须使用代字号进行转义。

选择包

  • + 选定要安装的软件包。
  • - 选定要删除的软件包。
  • _ 选定要清除的软件包。
  • = 保持软件包的当前版本,阻止其被升级。
  • : 仅在aptitude会话期间锁定软件包。
  • L 请求重装软件包。
  • M 将软件包标记为自动安装。这些包会在没有依赖的手动包时自动删除。
  • m 将软件包标记为手动。
  • R 请求重新配置软件包。
  • I 请求立即安装软件包与依赖包,同apt-get install <package>
  • F 禁止安装某个版本的软件包。但是,对更高版本正常使用。
  • B 调用reportbug,申报一个软件包的错误。
  • C 下载并显示一个软件包的变更日志。
  • g 进入所有请求变更的预览窗口。如果在预览屏键入此键,将执行变更操作。
  • d 查询相关软件包: suggest/recommanded/depends
  • r 查询依赖包
  • / 搜索
  • \ 继续搜索

Control-u组合键可用于取消上一步的动作。

展开一个软件包的节点,将会在屏幕上输出软件包的详细信息。除了有关软件包的有用 信息外,在发现aptitude给出的解决方案不能满足您的需求时, 可以在屏幕中方便的 浏览相关声明并交互的解决依赖问题。

受损的软件包

当aptitude遇到不能解决依赖问题时,会以红色背景高亮显示有问题的软件包,并显示 标题窗口中错误数量。并会在标题窗口中显示受损包的数量, 例如:#Broken: 2

mygray Actions Undo Package Search Options Views Help 		 
mygrayf10: Menu ?: Help q: Quit u: Update g: Download/I 		 
mygrayaptitude 0.2.15.9 #Broken: 2 Will use 1118kB of 		 
mygray--- Packages being automatically installed to satisfy 		 
mygray--\ Packages being deleted due to unsatisfied depende 		 
mygrayid postfix -1974kB 2.1.5-9 		 
mygrayiB postfix-mysql 2.1.5-9 		 
mygrayiB postfix-tls 2.1.5-9 		 
mygrayi webmin-postfix 1.180-4 		 
mygray--\ Packages to be installed 		 
mygraypi exim4 +32.8kB <none> 		 
mygray--- Packages which are suggested by other packages 		 
mygray 		 

受损的软件包是指那些不能满足依赖关系的,或相互冲突的软件包(这种情况下两个 软件包都是broken的)。aptitude显然不会允许用户选择安装broken的软件包。因此, 需要首先修正这种问题:

当broken软件包的个数非零,并且aptitude被告知动作未定时(用户键入了g键), 在显示这些未决问题摘要之前aptitude将试图解决所有的问题。通常,使用保守的方法 进行自动修正,所以前面的所做的选择有可能被丢弃。在键入g前将一直检查broken 软件包的数量,或者详细显示broken软件包的信息,这将丢弃前边所做的修改。幸运 的是,aptitude允许通过C_C_u来取消最后的操作,然后进行手动解决。

当在aptitude中修复broken软件包时,它的过滤(或限制)功能非常的有用。键入 I进入~b,aptitude将会只显示broken的软件包。使用软件包细节列表,通过选择 缺少的依赖包,手动解决冲突,稍做努力就可修正出现的问题。另外,您也可以简单的 键入b,找到第二个broken软件包。

当broken的软件包数量增加时,可能需要过滤显示软件包列表。键入I应用前面的 过滤设置,以缩小仍处于broken状态的软件包列表(希望少了很多)。重复操作,在 短时间内就会修复所有broken的软件包。

清洁您的系统

当aptitude选择了软件包以解决其它的依赖问题时,它将这个软件包标记为自动安装。 因此,当依赖软件包卸载时,这些软件包也会自动卸载,这有助于您的系统保持清洁。 也可以使用Mm手动修改安装标示:首先添加这一标示,随后就会卸载它。 ~g谓词可以用于根据这一标示进行搜索和限制。

虽然aptitude的这一功能非常的不错,但是deborphan也提供近似的功能,并且操作起来 更加灵活。

虚拟包

有时候,软件包可能需要其它必需选择的软件包提供一个概念。这种需求的一个典型 例子可以在软件包的关联信息中找到。at被设计为依赖能发送电子邮件的程序。 在Debian中,有不下十种邮件传输代理软件,并不是写死到at的依赖信息中,软件包 只是简单的通过依赖于概念包mail-transport-agent来实现。提供了所需功能的 软件包都声明提供了这种概念,在Debian中,是通过所谓的「虚拟包」来实现的。在系统中 安装了任意一个提供了mail-transport-agent虚拟包的软件包,Debian软件包工具都 认为满足了依赖关系。

mygrayv --\ mail-transport-agent <none> <none> 		 
mygray --- Packages which depend on mail-transport-agent 		 
mygray --\ Versions 		 
mygrayp xmail 1.21-3sarge1 		 
mygrayp masqmail 0.2.20-1sarge1 		 
mygrayp courier-mta 0.47-4sarge4 		 
mygrayp xmail 1.21-3 		 
mygrayp ssmtp 2.61-2 		 
mygrayp sendmail-bin 8.13.4-3 		 
mygrayi postfix 2.1.5-9 		 
mygrayp nullmailer 1.00RC7-22 		 
mygrayp masqmail 0.2.20-1 		 
mygrayp exim4-daemon-light 4.50-8 		 
mygrayp exim4-daemon-heavy 4.50-8 		 
mygrayp exim 3.36-16 		 
mygrayp esmtp-run 0.5.0-4 		 
mygrayp courier-mta 0.47-4 		 

aptitude的Virtual Packages(虚拟包)选项可以用于快速定位提供同一功能的软件包 列表。这样当默认设置不能满足您的需求时,可以使用这一功能快速的完成调整。

任务的概念

一个Debian系统通常用于完成某些任务。比如,您可能把它作为您的桌面系统,或数据库 服务器,或web服务器,邮件服务器,等等。Debian提出的任务的概念是指满足某种需求的 一系列典型的软件包;上边的任务,您可以通过安装一系列的软件包,来分别构建一个 相应的服务器,或一个桌面环境。

mygray--\ Tasks 		 
mygray --\ End-user 		 
mygray --\ Desktop environment 		 
mygrayp fortune-mod <none> 1:1.99.1-2 		 
mygrayp gdm <none> 2.6.0.8-1 		 
mygrayp gimp <none> 2.2.6-1 		 
mygrayp gnome <none> 64 		 
mygrayp gnome-desktop-environment <none> 64 		 
mygrayp kde <none> 5:44 		 
mygrayp kde-core <none> 5:44 		 
mygrayTasks are groups of packages which provide an easy way to select a 		 
mygraypredefinedset of packages for a particular purpose. 		 
mygrayIf you select a package, an explanation of its current state will appear 		 
mygrayin this space. 		 

传统的程序tasksel提供了一个选择这些软件集合的界面,不过它的功能被集成到了 aptitude中,并进行了扩展,因此aptitude更受欢迎。

任务就是选择一个抽象的概念,然后安装一系列的所必需的软包件,让本地系统可以 运行为典型的环境。本质上来讲,任务与关联包(或伪软件包)相似,依赖于扮演着不同 角色的所需软件包,它只是一个虚拟软件包,并没有相关的真实 deb 文件。另外,任务 仅仅是个建议,用户可以不选择任务建议中的一些软件包。您可能会觉得更喜欢aptitude 主选择屏幕最下边的任务界面。与处理软件包相似,任务可以视作单个的实体,或展开 展示的建议的软件包。另外,用户也可将任务展开,检查一下建议安装的软件包列表。 可以只简单的安装任务所包含软件包的一部分,而不是全部安装。您会发现aptitude中的 任务有点象软件包的规则匹配。

也可以通过将任务描述文件放置到/usr/share/tasksel目录下,来自定义任务。在 tasksel软件包安装的README文件中提供了有关如何构建任务的文档。

强大的命令行

aptitude提供了一个有趣的命令行模式,可以作为一个基本的嵌入模式来取代apt-get 并具有apt-cache的查询能力,并在aptitude的交互接口增加了搜索判断。

通常,aptitude的命令行请求形如:

aptitude action [arguments...]

常用的一些操作:

aptitude update * 更新软件包列表, 同图形界面的[u]键 *
aptitude upgrade * 升级软件包, 等同与 apt-get upgrade *
aptitude dist-upgrade *升级系统, 等同与 apt-get dist-upgrade *
aptitude [ install | remove | purge ] pkg1 [pkg2...] * ...*
aptitude search pattern1 [pattern2...] * ...*

就象apt-get,可以在交互界面使用拼接字符将多个不同的查询动作置于同一命令行中。 下面的情况中,安装A,删除B,清除C,保持D.'+'是冗余的,因为默认为安装。

aptitude install A+ B- C_ D=

aptitude的命令行界面的优越之处在于在统一界面下集成了很多程序以及它们的功能。 另外,响应安装请求时,aptitude可以解决依赖问题,并且在不再需要这些软级包时, 将其自动卸载。

操作日志

aptitude将您所有的请求动作写入/var/log/aptitude。这个文件可以方便的用于安装和 删除软件的跟踪。如果您使用apt-get安装软件,用dpkg卸载软件,aptitude的日志很快 就会同步。另外,aptitude只记录请求。如果某一动作失败了,它是不会记录的。

synaptic

GTK图形的APT的前端工具。

以安装Firefox作为例子

安装

安装firefox

源地址:

deb http://downloads.sourceforge.net/project/ubuntuzilla/mozilla/apt/ all main

加密钥并安装:

gpg --keyserver keyserver.ubuntu7.com --recv C1289A29
gpg --export --armor C1289A29 | sudo apt-key add -

可以简写:

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com C1289A29

安装:

sudo apt-get install firefox-mozilla-build

安装前记住一定要把iceweasel完全删除掉:

sudo apt-get purge iceweasel
sudo apt-get install firefox-mozilla-build

安装不完全与安装损坏

备份配置文件并删除相关的package记录:

sudo cp /var/lib/dpkg/status ~/backup/dpkg/
sudo vim /var/lib/dpkg/status

查找你出问题的软件包,全删除整个关于这个包的package(保证下一个package和 上一个package中间有一行空行),保存退出。

然后重新安装。

删除

包括配置文件完全删除:

apt-get purge xxx

相当于:

apt-get remove --purge xxx

flash插件

flashplugin-installer

sudo dpkg-reconfigure flashplugin-installer

一般下载包的位置:

国内很慢,缓存一下比较好:

http://archive.canonical.com/pool/partner/a/adobe-flashplugin/

如果dpkg安装出了问题,手动下载flash的压缩包。

解压后,把usr/目录下的文件都复制到/usr/目录下:

sudo cp -r usr/* /usr

libflashplayer.so拷到firefox的插件目录下:

sudo cp libflashplayer.so /usr/lib/mozilla/plugins 

在ubuntu系统下,可能文件名是flashplugin-alternative.so

sudo cp libflashplayer.so /usr/lib/mozilla/plugins/flashplugin-alternative.so*

安装ffmpeg

sudo add-apt-repository ppa:mc3man/trusty-media
sudo apt-get update
sudo apt-get install ffmpeg gstreamer0.10-ffmpeg

安装Oracle JDK

下载位置:

http://download.oracle.com/otn-pub/java/jdk/7u65-b17/jdk-7u65-linux-x64.tar.gz
http://download.oracle.com/otn-pub/java/jdk/8u11-b12/jdk-8u11-linux-x64.tar.gz

sudo rm /var/lib/apt/lists/*
sudo rm /var/lib/dpkg/lock
sudo rm /var/cache/apt/archives/lock

使用wget下载oracle jdk的话要加上cookie:

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u66-b17/jdk-8u66-linux-x64.tar.gz"

如果没有安装add-apt-repository的话,要先安装:

sudo apt-get install python-software-properties
sudo apt-get install --reinstall software-properties-common

然后ubuntu中使用PPA源:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer

debian中不能直接用ubuntu的源:

sudo echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" > /etc/apt/sources.list.d/webupd8team-java.list 
sudo echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" >> /etc/apt/sources.list.d/webupd8team-java.list 
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886 
sudo apt-get update 
sudo apt-get install oracle-java8-installer

如 果你在一个防火墙/路由器后并且阻止了某些下载Java文件所需的重定向,你可以 手动下载JDK的tar.gz文件,并将其放置在/var/cache/oracle-jdk9-installer下。 那么,安装程序将使用本地文件,而不会试图自行去下载存档。

安装完成后检查当前的版本:

java -version

应该已经是Oracle官方的版本了:

java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
Java HotSpot(TM) Server VM (build 23.0-b21, mixed mode)

以后可以手动选择java运行环境:

sudo update-alternatives --config java

在安装过程中,会要求用户同意Oracle的协议。虽然只要动一下手就可以了,但是在有些 情况下我们希望能全自动安装,以下的命令可以自动同意协议:

sudo echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections

要删除也很简单:

sudo apt-get remove oracle-java7-installer

自动安装oracle java

https://launchpad.net/~linuxuprising/+archive/ubuntu/java

sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
echo oracle-java10-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections

如果没有用,试试:

echo oracle-java10-installer shared/accepted-oracle-licence-v1-1 boolean true | sudo /usr/bin/debconf-set-selections

手动安装oracle-java

First, download the Java archive:

curl -L -b "oraclelicense=a" -O http://download.oracle.com/otn-pub/java/jdk/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_linux-x64_bin.tar.gz

The command above will automatically accept the Oracle licence.

Next, create a directory for the Java installation

sudo mkdir /usr/local/oracle-java-10

Extract the Java .tar.gz file to the previously created directory:

sudo tar -zxf jdk-10.0.2_linux-x64_bin.tar.gz -C /usr/local/oracle-java-10

Once the files are extracted run the following commands to create new alternatives:

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/oracle-java-10/jdk-10.0.2/bin/java" 1500
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/oracle-java-10/jdk-10.0.2/bin/javac" 1500
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/oracle-java-10/jdk-10.0.2/bin/javaws" 1500

The alternatives command is used to create and remove symbolic links which are determining default commands.

We have extracted the Java files in the /usr/local/oracle-java-10 directory, you can use a different directory if you want.

安装OpenJdk 11

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-11-jdk visualvm libnss-mdns fonts-indic fonts-wqy-microhei fonts-wqy-zenhei

安装Oracle Jdk 14

sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
sudo apt install oracle-java14-installer

这应该就完成了,如果你想将它设为默认,那么你可以输入以下命令:

sudo apt install oracle-java14-set-default

不要忘记java的配套证书

sudo apt-get install ca-certificates-java 
sudo update-ca-certificates -f

配置默认程序优先级

update-alternatives管理程序的优先级。如x-www-browser对应了多个在图形界面下 的web浏览器,默认会使用这些程序中优先级最高的:

以web浏览器的组x-www-browser为例。查看现在有哪些程序被定义为web浏览器,以及 它们被调用的优先级:

update-alternatives --display x-www-browser 

或:

update-alternatives --config x-www-browser 

以web浏览器的组x-www-browser为例。我们新安装了firefox浏览器, 现在把它也加到这一组里:

// 格式: update-alternatives --install <配置的链接> <配置的名字> <程序路径> <整数优先级>
update-alternatives --install /usr/bin/x-www-browser x-www-browser /usr/bin/firefox 90 

以web浏览器的组x-www-browser为例。我们现在设置firefox为默认浏览器:

update-alternatives --config x-www-browser

上面的命令会列出所有相关的程序,输入序号选择一个默认的。

对于非Debian系统

~/.local/share/applications/mimeapps.list里覆盖掉 /usr/share/applications/mimeinfo.cache的设置即可。

代码:

x-scheme-handler/ftp=firefox.desktop
x-scheme-handler/http=firefox.desktop
x-scheme-handler/https=firefox.desktop

安装 rpm 格式的软件

很多软件只提供了 rpm 格式的安装包,并未提供 deb 格式的安装包,比如:xmind。 因此我们需要将其转为 deb 安装包在再进行安装。这里我们拿 xmind 来举例,看看如何操作。 比如我们下载了 xmind 安装包XMind-2020.rpm:# 添加 Universe 仓库(如果未添加)

sudo add-apt-repository universe
sudo apt update                  # 更新
sudo apt install alien           # 安装 Alien

# 将.rpm 包转换为.deb 包(当前目录下会生成一个 deb 安装包,比如:XMind-2020.deb)
sudo alien XMind-2020.rpm
sudo dpkg -i XMind-2020.deb      # 安装

关于snap

Snaps 是 Ubuntu 的母公司 Canonical 于 2016 年 4 月发布 Ubuntu 16.04 LTS (Long Term Support,长期支持版)时引入的一种容器化的软件包格式。 自 Ubuntu 16.04 LTS 起,Ubuntu 操作系统可以同时支持 Snap 及 Debian 这两种格式的安装包。

Snap 虽然有一定的优点(请自行搜索),但是不足之处更多。Snap 软件包体积庞大, snapd 进程会导致系统重启等待,并且可能导致卡顿,禁用为佳。

特别是服务器版用不上这种软件包,默认是安装的,必须彻底删除。

Ubuntu 22.04 桌面版中两个关键的程序:软件商店和 Firefox 使用了 Snap 软件包,卡顿明显。

已经确认 snapd 是无法禁用的,只能强制删除。以下操作无需停止 snapd 服务。

(1)删掉所有的已经安装的 Snap 软件。

snap list 用于查看已经安装的 Snap 软件,通过脚本全部删除:

for p in $(snap list | awk '{print $1}'); do
  sudo snap remove $p
done

一般需要执行两次(桌面版三次),提示如下则正确执行:

snap "Name" is not installed
core20 removed
snapd removed

再次执行,提示如下,表明已经删除干净:

No snaps are installed yet. Try 'snap install hello-world'.

(2)删除 Snap 的 Core 文件。

sudo systemctl stop snapd
sudo systemctl disable --now snapd.socket

for m in /snap/core/*; do
   sudo umount $m
done

(3)删除 Snap 的管理工具。

sudo apt autoremove --purge snapd

sudo apt purge snapd

(4)删除 Snap 的目录。

rm -rf ~/snap
sudo rm -rf /snap
sudo rm -rf /var/snap
sudo rm -rf /var/lib/snapd
sudo rm -rf /var/cache/snapd

(5)配置 APT 参数:禁止 apt 安装 snapd。

正确配置(参看 apt_preferences ):

sudo sh -c "cat > /etc/apt/preferences.d/no-snapd.pref" << EOL
Package: snapd
Pin: release a=*
Pin-Priority: -10
EOL
a -> Archive
c -> Component
o -> Origin
l -> Label
n -> Architecture

验证效果:可以查询到该包,但是无法安装。

# sysin @ u22 in ~ [13:59:22]
$ apt list snapd
Listing... Done
snapd/jammy-updates 2.56.2+22.04ubuntu1 amd64
N: There is 1 additional version. Please use the '-a' switch to see it

# sysin @ u22 in ~ [13:59:37]
$ sudo apt install snapd
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package snapd is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'snapd' has no installation candidate

同时禁用 snap Firefox 的更新(Server 版也可以配置):

sudo sh -c "cat > /etc/apt/preferences.d/no-firefox.pref" << EOL
Package: firefox
Pin: release a=*
Pin-Priority: -10
EOL

现在服务器版安装桌面环境也没有 Snap!

sudo apt update
#sudo apt install ubuntu-desktop  #完整 GNOME 桌面环境包括 LibreOffice、视频播放器、游戏等等
sudo apt install ubuntu-desktop-minimal  #仅浏览器和基本工具
sudo reboot

该方法也适用于 Ubuntu 20.04,只是 20.04 中 Firefox 不使用 Snap 软件包,

注意

/etc/apt/preferences.d/目录下的配置文件怎么写呢? 可以使用man apt_preferences查看文档。

安装软件商店和 Firefox

上述操作后,可以安装 deb 格式的软件商店和 Firefox。

安装 Gnome 软件商店

sudo apt install gnome-software
# 确认没有 snapd 在按 y
#sudo apt install --install-suggests gnome-software
# 网传使用 `--install-suggests` 参数防止安装上 Snap 版本的软件包管理器,本例无效。

安装 DEB 格式的 Firefox

添加 Firefox 官方 PPA(Personal Package Archives)仓库:

sudo add-apt-repository ppa:mozillateam/ppa

将 Firefox 官方 PPA 仓库中的 firefox 设为高优先级:

sudo sh -c "cat > /etc/apt/preferences.d/mozillateam-firefox.pref" << EOL
Package: firefox*
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 501
EOL

还要创建一个文件:

sudo vim /etc/apt/preferences.d/firefox-no-snap

内容为:

Package: firefox*
Pin: release o=Ubuntu*
Pin-Priority: -1

现在可以安装最新版的 deb 版 Firefox:

sudo apt update
apt list firefox  #现在已经不是 Snap firefox
sudo apt install firefox
# 或者 Firefox ESR
sudo apt install firefox-esr

使用新安装的 firefox 访问extensions.gnome.org网站, 可以看到安装扩展的功能是完全正常的。

只不过,以后使用sudo apt install安装软件包的时候要多长个心眼, 一旦发现这个软件包有可能把snapd带回来,就要及时停止安装, 然后去找到可以替代它的ppa,再在apt_preferences这里操作一下, 把基于 snap 的软件包屏蔽掉。如果 apt 仓库里面没有的软件,也没有 ppa 的软件, 那就去官网下载 deb 包吧。现在,我们拥有了一个纯净的 Ubuntu 系统。

加入Mozilla Apt repo

另一种方法是手动加入用于存储APT repo密钥的目录:

sudo install-d-m 0755 /etc/apt/keyrings

现在,导入Mozilla APT repo签名密钥:

wget -q https://packages.mozilla.org/apt/repo-signing-key.gpg -O- | sudo tee /etc/apt/keyrings/packages.mozilla.org.asc > /dev/null

然后,您必须运行以下命令:

gpg -n -q --import --import-options import-show /etc/apt/keyrings/packages.mozilla.org.asc | awk '/pub/{getline; gsub(/^ +| +$/,""); print "\n"$0"\n"}'

确保运行命令后指纹与此匹配:

35baa3e9eb396f59ca838c0ba5ce6dc6315a3

此后,您必须将Mozilla APT repo添加到您的源代码列表中:

echo "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc] https://packages.mozilla.org/apt mozilla main" | sudo tee -a /etc/apt/sources.list.d/mozilla.list > /dev/null

接下来,您必须设置APT以对Mozilla repo中的包进行优先级排序:

echo '
Package: *
Pin: origin packages.mozilla.org
Pin-Priority: 1000
' | sudo tee /etc/apt/preferences.d/mozilla

最后,运行以下命令,并在提示时输入“Y”来确认安装:

sudo apt update && sudo apt install firefox

附录:恢复 Snap 的方法

只需要删除配置文件,即可重新使用 Snap 软件包。

sudo rm /etc/apt/preferences.d/no-snap.pref
sudo rm /etc/apt/preferences.d/no-firefox.pref
sudo rm /etc/apt/preferences.d/mozillateam-firefox.pref
sudo apt update
sudo snap install snap-store
sudo apt install firefox