2017年8月

这是游客投稿的本系列两篇中的第一篇;作者:Dominik Nowak,Husarion 的 CEO

过去十年,我们见证了 IT 行业的许多突破。可以说对消费者最有意义的一个方面是智能手机和移动开发的普及。接下来的大事件是什么,现在智能手机是如此常见,我们天天对着它,是不是有点无聊吗?所以,我们猜是:机器人。

众所周知,许多生产线完全由机器人运行。但在消费者和服务方面,还没有看到巨大的突破。我们认为这是一个可达性和降低开发人员进入的门槛的问题。只需要有好的、简单的工具来快速做出原型和开发机器人。为了测试新的想法并赋予工程师们更多能力,以便他们可以解决许多人类仍然面临的问题,那些比在应用中的点按一下更棘手的问题。

构建机器人是一个具有挑战性的任务,Husarion 团队正在努力使其更容易。Husarion 是一家从事于机器人快速开发平台的机器人公司。该公司的产品是 CORE2 机器人控制器和用于管理所有基于 CORE2 的机器人的云平台。CORE2 是第二代 Husarion 机器人控制器,它可在这里找到。

CORE2 结合了实时微控制器板和运行 Ubuntu 的单板计算机。Ubuntu 是最受欢迎的 Linux 发行版,不仅适用于桌面,还适用于物联网和 机器人程序中的嵌入式硬件。

CORE2 控制器有两种配置。第一款是采用 ESP32 Wi-Fi 模块的,专用于需要低功耗和实时、安全遥控的机器人应用。第二款,称为 CORE2-ROS,基本上是将两块板子集成到了一起:

  • 使用实时操作系统(RTOS)的实时微控制器并集成电机、编码器和传感器接口的电路板
  • 带有 ROS(Robot Operating System)包的运行 Linux 的单板计算机(SBC)和其他软件工具。

“实时”电路板做底层工作。它包含高效的 STM32F4 系列微控制器,非常适用于驱动电机、读码器、与传感器通信,并控制整个机电或机器人系统。在大多数应用中,CPU 负载不超过几个百分点,实时操作由基于 RTOS 的专用编程框架支持。我们还保证与 Arduino 库的兼容性。大多数任务都在微控制器外设中处理,如定时器、通信接口、ADC 等,它具有中断和 DMA 通道的强大支持。简而言之,对于具有其他任务的单板计算机来说,这不是一项任务。

另一方面,很显然,现代先进的机器人程序不能仅仅基于微控制器,原因如下:

  • 自动机器人需要大量的处理能力来执行导航、图像和声音识别、移动等等,
  • 编写先进的软件需要标准化才能有效 - SBC 在行业中越来越受欢迎,而对于为 SBC 编写的软件也是如此,这与 PC 电脑非常相似
  • SBC 每年都变得越来越便宜 – Husarion 认为,结合这两个世界在机器人技术方面是非常有益的。

CORE2-ROS 控制器有两种配置:Raspberry Pi 3ASUS Tinker Board。CORE-ROS 运行于 Ubuntu、Husarion 开发和管理工具以及 ROS 软件包上。

下篇文章将介绍为何 Husarion 决定使用 Ubuntu 。


via: https://insights.ubuntu.com/2017/07/12/robot-development-made-easy-with-husarion-core2-ros-running-ubuntu/

作者:Dominik Nowak 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

什么是 Let’s Encrypt

Let’s Encrypt 是互联网安全研究组织 (ISRG) 提供的免费证书认证机构。它提供了一种轻松自动的方式来获取免费的 SSL/TLS 证书 - 这是在 Web 服务器上启用加密和 HTTPS 流量的必要步骤。获取和安装证书的大多数步骤可以通过使用名为 Certbot 的工具进行自动化。

特别地,该软件可在可以使用 shell 的服务器上使用:换句话说,它可以通过 SSH 连接使用。

在本教程中,我们将看到如何使用 certbot 获取免费的 SSL 证书,并在 Ubuntu 16.04 服务器上使用 Nginx。

安装 Certbot

第一步是安装 certbot,该软件客户端可以几乎自动化所有的过程。 Certbot 开发人员维护自己的 Ubuntu 仓库,其中包含比 Ubuntu 仓库中存在的软件更新的软件。

添加 Certbot 仓库:

# add-apt-repository ppa:certbot/certbot

接下来,更新 APT 源列表:

# apt-get update

此时,可以使用以下 apt 命令安装 certbot

# apt-get install certbot

Certbot 现已安装并可使用。

获得证书

有各种 Certbot 插件可用于获取 SSL 证书。这些插件有助于获取证书,而证书的安装和 Web 服务器配置都留给管理员。

我们使用一个名为 Webroot 的插件来获取 SSL 证书。

在有能力修改正在提供的内容的情况下,建议使用此插件。在证书颁发过程中不需要停止 Web 服务器。

配置 NGINX

Webroot 会在 Web 根目录下的 .well-known 目录中为每个域创建一个临时文件。在我们的例子中,Web 根目录是 /var/www/html。确保该目录在 Let’s Encrypt 验证时可访问。为此,请编辑 NGINX 配置。使用文本编辑器打开 /etc/nginx/sites-available/default

# $EDITOR /etc/nginx/sites-available/default

在该文件中,在 server 块内,输入以下内容:

 location ~ /.well-known {
    allow all;
 }

保存,退出并检查 NGINX 配置:

# nginx -t

没有错误的话应该会显示如下:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重启 NGINX:

# systemctl restart nginx

使用 Certbot 获取证书

下一步是使用 Certbot 的 Webroot 插件获取新证书。在本教程中,我们将保护示例域 www.example.com。需要指定应由证书保护的每个域。执行以下命令:

# certbot certonly --webroot --webroot-path=/var/www/html -d www.example.com

在此过程中,Cerbot 将询问有效的电子邮件地址,用于进行通知。还会要求与 EFF 分享,但这不是必需的。在同意服务条款之后,它将获得一个新的证书。

最后,目录 /etc/letsencrypt/archive 将包含以下文件:

  • chain.pem:Let’s Encrypt 加密链证书。
  • cert.pem:域名证书。
  • fullchain.pemcert.pemchain.pem 的组合。
  • privkey.pem:证书的私钥。

Certbot 还将创建符号链接到 /etc/letsencrypt/live/domain_name/ 中的最新证书文件。这是我们将在服务器配置中使用的路径。

在 NGINX 上配置 SSL/TLS

下一步是服务器配置。在 /etc/nginx/snippets/ 中创建一个新的代码段。 snippet 是指一段配置,可以包含在虚拟主机配置文件中。如下创建一个新的文件:

# $EDITOR /etc/nginx/snippets/secure-example.conf

该文件的内容将指定证书和密钥位置。粘贴以下内容:

ssl_certificate /etc/letsencrypt/live/domain_name/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem;

在我们的例子中,domain_nameexample.com

编辑 NGINX 配置

编辑默认虚拟主机文件:

# $EDITOR /etc/nginx/sites-available/default

如下:

server {
 listen 80 default_server;
 listen [::]:80 default_server;
 server_name www.example.com
 return 301 https://$server_name$request_uri;

 # SSL configuration
 #
 listen 443 ssl default_server;
 listen [::]:443 ssl default_server;
 include snippets/secure-example.conf
 #
 # Note: You should disable gzip for SSL traffic.
 # See: https://bugs.debian.org/773332
 # ...  
}

这将启用 NGINX 加密功能。

保存、退出并检查 NGINX 配置文件:

# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重启 NGINX:

# systemctl restart nginx

总结

按照上述步骤,此时我们已经拥有了一个安全的基于 NGINX 的 Web 服务器,它由 Certbot 和 Let’s Encrypt 提供加密。这只是一个基本配置,当然你可以使用许多 NGINX 配置参数来个性化所有东西,但这取决于特定的 Web 服务器要求。


via: https://www.unixmen.com/encryption-secure-nginx-web-server-ubuntu-16-04/

作者:Giuseppe Molica 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

什么是 Docker Compose

Docker Compose 是一个运行多容器 Docker 应用的工具。Compose 通过一个配置文件来配置一个应用的服务,然后通过一个命令创建并启动所有在配置文件中指定的服务。

Docker Compose 适用于许多不同的项目,如:

  • 开发:利用 Compose 命令行工具,我们可以创建一个隔离(而可交互)的环境来承载正在开发中的应用程序。通过使用 Compose 文件,开发者可以记录和配置所有应用程序的服务依赖关系。
  • 自动测试:此用例需求一个测试运行环境。Compose 提供了一种方便的方式来管理测试套件的隔离测试环境。完整的环境在 Compose 文件中定义。

Docker Compose 是在 Fig 的源码上构建的,这个社区项目现在已经没有使用了。

在本教程中,我们将看到如何在 Ubuntn 16.04 上安装 Docker Compose。

安装 Docker

我们需要安装 Docker 来安装 Docker Compose。首先为官方 Docker 仓库添加公钥。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

接下来,添加 Docker 仓库到 apt 源列表:

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

更新包数据库,并使用 apt 安装 Docker

$ sudo apt-get update
$ sudo apt install docker-ce

在安装进程结束后,Docker 守护程序应该已经启动并设为开机自动启动。我们可以通过下面的命令来查看它的状态:

$ sudo systemctl status docker
---------------------------------

● docker.service - Docker Application Container Engine
 Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
 Active: active (running) 

安装 Docker Compose

现在可以安装 Docker Compose 了。通过执行以下命令下载当前版本。

# curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

为二进制文件添加执行权限:

# chmod +x /usr/local/bin/docker-compose

检查 Docker Compose 版本:

$ docker-compose -v

输出应该如下:

docker-compose version 1.14.0, build c7bdf9e

测试 Docker Compose

Docker Hub 包含了一个用于演示的 Hello World 镜像,可以用来说明使用 Docker Compose 来运行一个容器所需的配置。

创建并打开一个目录:

$ mkdir hello-world
$ cd hello-world

创建一个新的 YAML 文件:

$ $EDITOR docker-compose.yml

在文件中粘贴如下内容:

unixmen-compose-test:
 image: hello-world

注意: 第一行是容器名称的一部分。

保存并退出。

运行容器

接下来,在 hello-world 目录执行以下命令:

$ sudo docker-compose up

如果一切正常,Compose 输出应该如下:

Pulling unixmen-compose-test (hello-world:latest)...
latest: Pulling from library/hello-world
b04784fba78d: Pull complete
Digest: sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f
Status: Downloaded newer image for hello-world:latest
Creating helloworld_unixmen-compose-test_1 ... 
Creating helloworld_unixmen-compose-test_1 ... done
Attaching to helloworld_unixmen-compose-test_1
unixmen-compose-test_1 | 
unixmen-compose-test_1 | Hello from Docker!
unixmen-compose-test_1 | This message shows that your installation appears to be working correctly.
unixmen-compose-test_1 | 
unixmen-compose-test_1 | To generate this message, Docker took the following steps:
unixmen-compose-test_1 | 1\. The Docker client contacted the Docker daemon.
unixmen-compose-test_1 | 2\. The Docker daemon pulled the "hello-world" image from the Docker Hub.
unixmen-compose-test_1 | 3\. The Docker daemon created a new container from that image which runs the
unixmen-compose-test_1 | executable that produces the output you are currently reading.
unixmen-compose-test_1 | 4\. The Docker daemon streamed that output to the Docker client, which sent it
unixmen-compose-test_1 | to your terminal.
unixmen-compose-test_1 | 
unixmen-compose-test_1 | To try something more ambitious, you can run an Ubuntu container with:
unixmen-compose-test_1 | $ docker run -it ubuntu bash
unixmen-compose-test_1 | 
unixmen-compose-test_1 | Share images, automate workflows, and more with a free Docker ID:
unixmen-compose-test_1 | https://cloud.docker.com/
unixmen-compose-test_1 | 
unixmen-compose-test_1 | For more examples and ideas, visit:
unixmen-compose-test_1 | https://docs.docker.com/engine/userguide/
unixmen-compose-test_1 | 
helloworld_unixmen-compose-test_1 exited with code 0

Docker 容器只能在命令(LCTT 译注:此处应为容器中的命令)还处于活动状态时运行,因此当测试完成运行时,容器将停止运行。

结论

本文是关于在 Ubuntu 16.04 中安装 Docker Compose 的教程。我们还看到了如何通过一个 YAML 格式的 Compose 文件构建一个简单的项目。


via: https://www.unixmen.com/container-docker-compose-ubuntu-16-04/

作者:Giuseppe Molica 译者:Locez 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

网络和系统管理工作工资高、岗位多。

 title=

我们为秩序而战,而服务器大叔则需要你成为系统管理员。

这是个很好的机会,因为你已经管理过你有的那些系统,你本可以不需酬劳地管理那些日逐一日地运行的系统。但还是有一些面试官,愿意拿一笔很不错的薪水来找一些人去管理他们的系统。目前,系统和网络管理的失业率几乎为零,但是美国劳工统计局估计到 2024 年该领域将持续 9% 的增长

你可能会问,自动化运维怎么样?大概你已经听一些系统管理员说过,他们打算如何来自动化他们所有的工作,或者,他们如何在一个 shell 脚本里自动化完成他们前任者的工作。你听过的有多少成功的?自动化了某个任务,就会有更多的东西需要自动化。

如果你参加过系统管理者会议或观看过他们的视频,你会发现这是一个需要新鲜血液的领域。不仅仅是明显的缺少年轻人,而且相当地性别和种族不平等。虽然有点儿跑题,但是多样性已经被证明可以提高系统管理员非常感兴趣的自我恢复力、解决问题的能力,创新力和决策力。

我要成为一名系统管理员吗?

有人要你,但是你要做系统管理工作吗?如果你生活在一个第一世界国家,每年 70,000 美元的收入看上去是一个可以感到幸福的标准收入,或者说至少减少了大部分的与钱相关的压力。系统和网络管理员的中位年度收入是 80,000 美元,很容易达标,尽管明显有些人赚的更少或更多。

你曾经免费做过一些系统管理工作吗?我们大多数人都多多少少地管理一些设备,但是那并不代表你喜欢管理它。如果你曾经在你家的网络中添加了一些服务器,你就是一个备选的系统管理员。你想要为自己的孩子添加一个“我的世界”的游戏服务器么,所以你用树莓派搭建了一个?也许是时候来考虑通过做这样的工作来获取报酬了。

作为一份需要全面知识的工作,系统管理工作有很大的跨度。各种行业和各种规模的公司都需要系统管理员。大多数的位于市区里的公司需要一些现场上班的人员,但是远程办公也有很大的可能性。

每个人都是免费地用开源软件工作,但是,作为系统管理员,你也可以计酬工作。系统管理员经常把对开源项目做贡献、支持开源供应商、使用各种各样的有趣而强大的开源软件为他们日常工作的一部分。

最后,谈一下社区。以我多年的经验来看,找到一个欢迎新人的、鼓励参与的、气氛友好的、彼此帮助的社区是非常难的。系统管理员给人的刻板印象就是性情乖戾,但是我感觉现在这只不过是个过时的笑话。现在大多数的系统管理员积极地回应各种形式的有建设性的反馈,尤其是欢迎新手。我们总是能敏锐的察觉到各种各样的入门级问题,并且热心于解决它们。我们是一个有深度的、兴趣广泛的社区。问一下一个系统管理员在工作之余都干了些什么,你肯定会感到吃惊。

那么,我要从哪儿开始?

如果你被说服了,首先有个好消息。与许多技术类职业相比,从不是直接相关的四年制学历转为系统管理员是可能的。事实上,全世界有四年本科学历的系统管理员相对较少,所以不用太担心这个。对于现在的白领工作,学历确实有用,而且越相关越好。与其他的技术类职业相比,这儿有一个很自然的入门级别的职位:技术支持。

对系统管理工作的候选人来说有个坏消息是真的,在技术类领域(甚至非技术类领域):雇主在寻找有多年经验的和有高学历的人,即便是在入门级别的岗位上。雇主是刻薄的,雇主不会花钱给你培训。不过稍嫌安慰的是,这些问题在人才市场上是非常普遍的,所以不管你找什么工作都得面对这种问题。

系统管理工作可以作为其他 IT 领域的起点。比如:网络管理、数据库管理、网站可靠性工程师(SRE),再远一些的也有,软件工程师、质量保证(QA)、IT 管理。

系统管理工作的具体情况,包括其刻板的印象和一些明显的方面以及不明显的方面,是未来我们的文章的主题。我们也会涵盖这个领域可能会改变的重要方面,提供一些方法来评估和比较系统管理职位,以及在面试中问到的一些重要问题。

如果你对加入这个领域有兴趣,可以考虑加入专业系统管理者联盟(LOPSA),我在这个组织任董事会成员。会员资格是你负担得起的(可能由您的雇主负责),而学生免费。成为 LOPSA 会员,是找到同行们和与有各种经验、各种行业和工作环境中的人员讨论职业生涯的绝佳方式。

(题图 : Jason Baker, CC BY-SA 4.0)


作者简介:

Paul English - 他是 PreOS 安全公司的首席执行官,也是专业系统管理员联盟的董事会成员,该专业系统管理员联盟是一个非营利性专业协会,从 2015 年至今致力于提升系统管理工作实践。 Paul 在 1998 年获得了伍斯特理工学院的计算机学士学位。自 1996 年以来,Paul 一直是 UNIX 和 Linux 系统管理员和许多场合冠以 IT 之名的那个人。最近他在管理一些系统管理员。


via: https://opensource.com/article/17/7/why-become-sysadmin

作者:Paul English 译者:sugarfillet 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

窗口管理器 window manager 负责管理打开窗口的大小、布置以及其它相关的方面。

我喜欢极简。如果可能,我会尽量在一个终端下运行所有需要的程序。这避免了一些浮夸的特效占用我的资源或者分散我的注意力。而且,无论怎么调整窗口大小和位置却依旧无法使它们完美地对齐,这也让我感到厌烦。

出于对极简化的追求,我喜欢上了 Xfce 并且把它作为我主要的 Linux 桌面环境好几年了。直到后来我看了 Bryan Lunduke 关于他所使用的名为 Awesome窗口管理器的视频。Awesome 为用户整齐地布置好他们的窗口,看起来就是我想要的效果。但在我尝试之后却发现我难以把它配置成我喜欢的样子。于是我继续搜寻,发现了 xmonad,然而我遇到了同样的问题。xmonad 可以良好运作但为了把它配置成我理想中的样子我却不得不先通过 Haskell 语言这关。(LCTT 译注: AwesomeWM 使用 lua 语言作为配置语言,而 xmonad 使用 Haskell 语言)

几年后,我无意间发现了 suckless.org 和他们的窗口管理器 dwm

简而言之,一个窗口管理器,例如 KDE,Gnome 或者 Xfce,包括了许多部件,其中除了窗口管理器还有其它应用程序。窗口管理器负责管理打开窗口的大小、布置(以及其它窗口相关的方面)。不同的桌面环境使用不同的窗口管理器,KDE 使用 KWin,Gnome 2 使用 Metacity, Gnome 3 使用 Mutter, 以及 Xfce 使用 Xfwm。当然,你可以方便地替换这些桌面环境的默认窗口管理器。我已经把我的窗口管理器替换成 dwm,下面我说说我喜欢 dwm 的理因。

动态窗口管理

与 Awesome 及 xmonad 一样,dwm 的杀手锏是它能利用屏幕的所有空间为你自动排布好窗口。当然,在现在的大多数桌面环境中,你也可以设置相应的快捷键把你的窗口放置在屏幕的上下左右或者是全屏,但是有了 dwm 我们就不需要考虑这么多了。

dwm 把屏幕分为主区域和栈区域。它包含三种布局:平铺,单片镜(monocle)和浮动。平铺模式是我最常使用的,它把一个主要的窗口放置在主区域来获取最大关注力,而将其余窗口平铺在栈区域中。在单片镜模式中,所有窗口都会被最大化,你可以在它们之间相互切换。浮动模式允许你自由调整窗口大小(就像在大多数窗口管理器下那样),这在你使用像 Gimp 这类需要自定义窗口大小的应用时更为方便。

一般情况下,在你的桌面环境下你可以使用不同的工作空间(workspace)来分类你的窗口,把相近的应用程序放置在计划好的工作空间中。在工作时,我会使用一个工作空间来进行工作,同时使用另一个工作空间来浏览网页。dwm 有一个相似的功能叫标签。你可以使用标签给窗口分组,当你选中一个标签时,就能显示具有相应标签的窗口。

高效

dwm 能让你的计算机尽量地节省电量。Xfce 和其它轻量桌面环境在较旧或者较低性能的机器上很受欢迎,但是相比于 Xfce,dwm 在登录后只使用了它们 1/3 的资源(在我的例子中)。当我在使用一台 1 GB 内存的 Eee PC (LCTT 译注:华硕生产的一款上网本,已停产)时,占用 660 MB 和 230MB 的差别就很大了。这让我有足够的内存空间运行我的编辑器和浏览器。

极简

通常,我让我的应用程序彼此相邻:作为主窗口的终端(通常运行着 Vim)、用来查阅邮件的浏览器,和另外一个用来查阅资料或者打开 Trello 的浏览器窗口。对于临时的网页浏览,我会在另一个工作空间或者说是另一个 标签 中开启一个 Chromium 窗口。

来自作者的屏幕截图。

在标准的桌面环境下,通常会有一或两个面板占据着屏幕上下或者两侧的空间。我尝试过使用自动隐藏功能,但当光标太靠近边缘导致面板弹出造成的不便实在让我很厌烦。你也可以把它们设置得更小,但我还是更喜欢 dwm 的极简状态栏。

速度

评判速度时,我比较看重 dwm 在登录后的加载速度和启动程序的速度。如果使用更快、更新的计算机,你可能不会在意这些细节,但是对我来说,不同的桌面环境和窗口管理器会有明显的差距。我实在不想连这种简单的操作也要等待,它们应该一下子就完成。另外,使用键盘快捷键来启动程序比起用鼠标或者触控板要快一些,而且我不想让双手离开键盘。

小结

即便如此,我也不会向新手用户推荐 dwm。研究如何配置它需要耗费一些时间(除非你对你的发行版提供的默认配置感到满意)。我发现要让一些你想要的补丁正常工作可能会有点棘手,而且相应的社区也比较小(其 IRC 频道明确表示不提供补丁的手把手帮助)。所以,为了得到你想要的效果,你得有些付出才行。不过,这也是值得的。

而且你看,它就像 Awesome 一样 awesome。

(题图:cinderwick.ca)


作者简介:

Jimmy Sjölund - 他是 Telia Company 的高级 IT 服务经理,关注团队开发、探索敏捷工作流和精益工作流的创新导师,以及可视化方向爱好者。他同时也是一名开源布道者,先前从事于 Ubuntu Studio 和 Plume Creator。


via: https://opensource.com/article/17/7/top-4-reasons-i-use-dwm-linux-window-manager

作者:Jimmy Sjölund 译者:haoqixu 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

以手动方式安装和升级最新的 Linux 内核对于每个人来说都不是一件小事,甚至包括一些有经验的人也是如此。它需要对 Linux 内核有深入的了解。过去我们已经介绍了 UKUU(Ubuntu Kernel Upgrade Utility),它可以从 kernel.ubuntu.com 网站上自动检测最新的主线内核,并弹出一个不错的窗口界面进行安装。

Linux Kernel Utilities (LKU)提供一组 shell 脚本(三个 Shell 脚本),可以帮助用户从 kernel.org 获取并编译和安装最新的 Linux 内核,也可以从 kernel.ubuntu.com 获取安装最新的预编译的 Ubuntu 内核。甚至可以根据需要选择所需的内核(手动内核选择)。

该脚本还将根据 PGP 签名文件检查下载的归档文件,并且可以选择通用和低延迟版内核。

建议阅读:ukuu:一种在基于 Ubuntu 的系统上轻松安装升级 Linux 内核的方式

它可以删除或清除所有非活动的内核,并且不会为了安全目的留下备份的内核。强烈建议在执行此脚本之前重新启动一次。

  • compile_linux_kernel.sh :用户可以从 kernel.org 编译和安装所需的或最新的内核
  • update_ubuntu_kernel.sh :用户可以从 kernel.ubuntu.com 安装并更新所需或最新的预编译 Ubuntu 内核
  • remove_old_kernels.sh :这将删除或清除所有非活动内核,并且只保留当前加载的版本

kernel.org 有固定的发布周期(每三个月一次),发布的内核包括了新的功能,改进了硬件和系统性能。由于它具有标准的发布周期,除了滚动发布的版本(如 Arch Linux,openSUSE Tumbleweed 等),大多数发行版都不提供最新的内核。

如何安装 Linux Kernel Utilities (LKU)

正如我们在文章的开头所说的,它的 shell 脚本集只是克隆开发人员的 github 仓库并运行相应的 shell 文件来执行这个过程。

$ git clone https://github.com/mtompkins/linux-kernel-utilities.git && cd linux-kernel-utilities

安装指定版本内核

为了测试的目的,我们将安装 Linux v4.4.10-xenial 内核。在安装新内核之前,我们需要通过 uanme -a 命令检查当前安装的内核版本,以便我们可以检查新内核是否可以安装。

$ uname -a
Linux magi-VirtualBox 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

根据上面的输出,我们的系统使用的是 4.4.0-21 通用内核。

只需运行 update_ubuntu_kernel.sh shell 脚本。第一次运行脚本时会检查是否满足所有的依赖关系,然后自动安装缺少的依赖项。它会检测系统使用的发行版,并检索 kernel.ubuntu.com 中可用的预编译内核。现在,从列表中选择你需要的内核并输入序号,然后按回车键,它将下载内核映像(linux-headers-4.4.10,linux-headers-4.4.10-xxx-generic 和 linux-image-4.4.10-xxx-generic)。

一旦内核镜像被下载,它将要求输入 sudo 密码来启动新内核的安装。

$ ./update_ubuntu_kernel.sh

[+] Checking Distro
 \_ Distro identified as LinuxMint.

[+] Checking Dependencies
    curl                    Found
    dkms                    Found
    git                     Found
    sudo                    Found
    wget                    Found
    whiptail                Found
    lynx                    Not Found

-- Installing Dependencies --

[!] The first time this script is run missing dependencies will be installed.
    For compiling a kernel this may take a bit of time. Feedback will be provided.

[+] Dependencies
 \_Elevating permissions as necessary . . .
[%] Elevated

[+] Testing for previous held packages and trying to correct any found.
 \_Passed

[+] Updating package cache . . .
 \_Complete

[+] Installing dependencies . . .
 \_Complete

    curl                    Found
    dkms                    Found
    git                     Found
    sudo                    Found
    wget                    Found
    whiptail                Found
    lynx                    Found

[+] Changing to temporary directory to work in . . .
 \_ Temporary directory access granted: /tmp/tmp.97eHDsmg2K

[+] Removing any conflicting remnants . . .
 \_ Done

[+] Retrieving available kernel choices . . .
 \_ Precompiled kernels available from kernel.ubuntu.com:

 1)  Linux v4.11                2)  Linux v4.11.3              3)  Linux v4.11.2              4)  Linux v4.11.1             
 5)  Linux v4.10                6)  Linux v4.10.17             7)  Linux v4.10.16             8)  Linux v4.10.15            
 9)  Linux v4.10.14             10) Linux v4.10.13             11) Linux v4.10.12
[ 节略 ……]                     
 249) Linux v4.0.3-wily          250) Linux v4.0.2-wily          251) Linux v4.0.1-wily          252) Linux v4.0-vivid          

Select your desired kernel: 158

Do you want the lowlatency kernel? (y/[n]):

[+] Processing selection
 \_ Determining CPU type: amd64
 \_ Locating source of v4.4.10-xenial generic kernel packages.
 \_ Done

[+] Checking AntiVirus flag and disabling if necessary
[+] Installing kernel . . .
[sudo] password for magi:
Selecting previously unselected package linux-headers-4.4.10-040410.
(Reading database ... 230647 files and directories currently installed.)
Preparing to unpack linux-headers-4.4.10-040410_4.4.10-040410.201605110631_all.deb ...
Unpacking linux-headers-4.4.10-040410 (4.4.10-040410.201605110631) ...
Selecting previously unselected package linux-headers-4.4.10-040410-generic.
Preparing to unpack linux-headers-4.4.10-040410-generic_4.4.10-040410.201605110631_amd64.deb ...
Unpacking linux-headers-4.4.10-040410-generic (4.4.10-040410.201605110631) ...
Selecting previously unselected package linux-image-4.4.10-040410-generic.
Preparing to unpack linux-image-4.4.10-040410-generic_4.4.10-040410.201605110631_amd64.deb ...
Done.
Unpacking linux-image-4.4.10-040410-generic (4.4.10-040410.201605110631) ...
Setting up linux-headers-4.4.10-040410 (4.4.10-040410.201605110631) ...
Setting up linux-headers-4.4.10-040410-generic (4.4.10-040410.201605110631) ...
Examining /etc/kernel/header_postinst.d.
run-parts: executing /etc/kernel/header_postinst.d/dkms 4.4.10-040410-generic /boot/vmlinuz-4.4.10-040410-generic
Setting up linux-image-4.4.10-040410-generic (4.4.10-040410.201605110631) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 4.4.10-040410-generic /boot/vmlinuz-4.4.10-040410-generic
run-parts: executing /etc/kernel/postinst.d/dkms 4.4.10-040410-generic /boot/vmlinuz-4.4.10-040410-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 4.4.10-040410-generic /boot/vmlinuz-4.4.10-040410-generic
update-initramfs: Generating /boot/initrd.img-4.4.10-040410-generic
Warning: No support for locale: en_IN
run-parts: executing /etc/kernel/postinst.d/pm-utils 4.4.10-040410-generic /boot/vmlinuz-4.4.10-040410-generic
run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 4.4.10-040410-generic /boot/vmlinuz-4.4.10-040410-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 4.4.10-040410-generic /boot/vmlinuz-4.4.10-040410-generic
Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-4.4.10-040410-generic
Found initrd image: /boot/initrd.img-4.4.10-040410-generic
Found linux image: /boot/vmlinuz-4.4.9-040409-lowlatency
Found initrd image: /boot/initrd.img-4.4.9-040409-lowlatency
Found linux image: /boot/vmlinuz-4.4.0-21-generic
Found initrd image: /boot/initrd.img-4.4.0-21-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
done
 \_ Done

安装后需要重新启动以使用新安装的内核。

$ sudo reboot now

现在,你正在使用的就是新安装的 4.4.10-040410-generic 版本内核。

$ uname -a
Linux magi-VirtualBox 4.4.10-040410-generic #201605110631 SMP Wed May 11 10:33:23 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

安装最新版本内核

过程与上述相同,它将自动安装最新版本的内核。

$ ./update_ubuntu_kernel.sh --latest

[+] Checking Distro
 \_ Distro identified as LinuxMint.

[+] Checking Dependencies
    curl                    Found
    dkms                    Found
    git                     Found
    sudo                    Found
    wget                    Found
    whiptail                Found
    lynx                    Found

[+] Changing to temporary directory to work in . . .
 \_ Temporary directory access granted: /tmp/tmp.pLPYmCze6S

[+] Removing any conflicting remnants . . .
 \_ Done

[+] Retrieving available kernel choices . . .
 \_ Precompiled kernels available from kernel.ubuntu.com:
.
.
.
.
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-4.11.3-041103-generic
Found initrd image: /boot/initrd.img-4.11.3-041103-generic
Found linux image: /boot/vmlinuz-4.4.10-040410-generic
Found initrd image: /boot/initrd.img-4.4.10-040410-generic
Found linux image: /boot/vmlinuz-4.4.9-040409-lowlatency
Found initrd image: /boot/initrd.img-4.4.9-040409-lowlatency
Found linux image: /boot/vmlinuz-4.4.0-21-generic
Found initrd image: /boot/initrd.img-4.4.0-21-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
done
 \_ Done

安装后需要重新启动以使用新安装的内核。

$ sudo reboot now

现在,你正在使用的就是最新版本 4.11.3-041103-generic 的内核。

$ uname -a
Linux magi-VirtualBox 4.11.3-041103-generic #201705251233 SMP Thu May 25 16:34:52 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

删除或清除旧内核

只需要运行 remove_old_kernels.sh shell 脚本即可删除或清除所有非活动状态的内核。

$ ./remove_old_kernels.sh

        ++++++++++++++++++++++++++++++++
        +++       W A R N I N G      +++
        ++++++++++++++++++++++++++++++++

A reboot is recommended before running this script to ensure the current kernel tagged
as the boot kernel is indeed registered and old kernels properly marked for removal.
If you have just installed or modified your existing kernel and do not reboot before
running this script it may render you system INOPERABLE and that would indeed suck.

You have been warned.
~the Mgmt

[?]Continue to automagically remove ALL old kernels? (y/N)y
\_ Removing ALL old kernels . . .
[sudo] password for magi:
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  linux-headers-4.4.0-21* linux-headers-4.4.0-21-generic* linux-headers-4.4.10-040410*
  linux-headers-4.4.10-040410-generic* linux-headers-4.4.9-040409* linux-headers-4.4.9-040409-lowlatency*
  linux-image-4.4.0-21-generic* linux-image-4.4.10-040410-generic* linux-image-4.4.9-040409-lowlatency*
  linux-image-extra-4.4.0-21-generic* linux-kernel-generic*
0 upgraded, 0 newly installed, 11 to remove and 547 not upgraded.
After this operation, 864 MB disk space will be freed.
(Reading database ... 296860 files and directories currently installed.)
Removing linux-kernel-generic (4.4.0-21) ...
Removing linux-headers-4.4.0-21-generic (4.4.0-21.37) ...
Removing linux-headers-4.4.0-21 (4.4.0-21.37) ...
Removing linux-headers-4.4.10-040410-generic (4.4.10-040410.201605110631) ...
Removing linux-headers-4.4.10-040410 (4.4.10-040410.201605110631) ...
Removing linux-headers-4.4.9-040409-lowlatency (4.4.9-040409.201605041832) ...
Removing linux-headers-4.4.9-040409 (4.4.9-040409.201605041832) ...
Removing linux-image-extra-4.4.0-21-generic (4.4.0-21.37) ...
.
.
.
done
Purging configuration files for linux-image-4.4.9-040409-lowlatency (4.4.9-040409.201605041832) ...
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 4.4.9-040409-lowlatency /boot/vmlinuz-4.4.9-040409-lowlatency
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 4.4.9-040409-lowlatency /boot/vmlinuz-4.4.9-040409-lowlatency

via: http://www.2daygeek.com/lku-linux-kernel-utilities-compile-install-update-latest-kernel-in-linux-mint-ubuntu/

作者:2DAYGEEK 译者:firmianay 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出