6 Linux 包管理以及 systemctl

2023-11-30 11:16:25 浏览数 (3)

本文我们将学习的是 Linux 中的包管理器以及强大的 systemctl命令,并了解 systemd在管理系统服务中的作用。

Linux 中的包管理器

包管理器是在 Linux 系统中安装、更新和删除软件报的重要工具。它们提供集中的软件包存储库并处理依赖关系,确保顺利高效的软件安装。

APT(Advanced Package Tool)

APT(高级打包工具)是一种广泛使用的包管理系统,主要用于 Ubuntu 等基于 Debian 的发行版。它提供了一个用户友好的命令行界面来与软件包管理系统交互。

使用 APT,可以执行各种操作,包括软件包的安装、更新和删除。APT 自动解决依赖关系,确保正确安装所有必需的软件包。

YUM(Yellowdog Updater Modified)

YUM(Yellowdog 更新程序修改版)是另一种流行的包管理系统,用于 CentOS 等基于 Red Hat(红帽)的发行版。它简化了软件包管理和依赖关系处理。

YUM 提供了用户管理包的命令行界面。可以使用 YUM 命令搜索包、安装、更新和删除它们。它负责解决包依赖性,确保安装过程顺利进行。

APT 和 YUM 都极大地简化了管理关键包的过程,使在不同 Linux 发行版上工作的 DevOps 工作变得高效且无忧。

Systemctl 和 Systemd

systemctl是一个命令行实用程序,用于管理采用systemd init系统的 Linux 发行版中的系统服务。systemd是一个系统和服务管理器,提供进程管理、日志记录和服务依赖项等高级功能。

systemd取代了传统的 sysv init系统,并提供增强的功能和对系统服务的控制。它支持并行服务启动、高效的依赖关系管理以及更好的监控和日志记录功能。

systemctlsystemd相关的关键概念如下:

  • 服务单元(Service Uints)systemd使用服务单元(扩展名为 .service的配置文件)来定义和管理服务。这些单元描述了服务的属性和行为。
  • 服务管理(Service Management)systemctl提供诸如 startstoprestartenabledisable等命令来管理服务。这些命令允许我们控制系统中服务的生命周期和行为。
  • 系统状态(System status) :可以使用 systemctl status 获取服务的详细信息,包括其当前状态、启用或禁用状态以及最近的日志条目。该功能有助于排除故障和监控服务。

systemctlsystemd提供了一种现代且高效的方法来管理 Linux 系统上的服务。它们在管理服务方面提供了更大的控制力、灵活性和一致性,是沃尔玛你能够更轻松地处理各种与服务相关的任务。

使用包管理安装 Docker 和 Jenkins

下面,我们将通过使用包管理器在 Ubuntu 上安装 Docker 和 Jenkins,加深我们对包管理器的知识的实践。

在 Ubuntu 上安装 Docker

使用 APT 在 Ubuntu 上安装 Docker,可按照以下步骤操作:

设置存储库
  1. 更新 apt软件包索引并安装软件包以允许 apt通过 Https 使用存储库:
代码语言:javascript复制
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
  1. 添加 Docker 的官方 GPG 密钥:
代码语言:javascript复制
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a r /etc/apt/keyrings/docker.gpg
  1. 使用以下命令设置存储库:
代码语言:javascript复制
 echo 
   "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu 
   "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | 
   sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 更新 apt包索引:
代码语言:javascript复制
sudo apt-get update
  1. 安装 Docker 引擎,containerd 和 Docker Compose:
代码语言:javascript复制
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 启动 Docker:
代码语言:javascript复制
sudo systemctl start docker

在 Ubuntu 上安装 Jenkins

使用 APT 在 Ubuntu 上安装 Jenkins,可按照以下步骤操作:

  1. Jenkins 需要 Java 才能运行,因此我们将更新 Debian apt 存储库,安装 OpenJDK 11,并使用以下命令检查安装:
代码语言:javascript复制
 sudo apt update
 sudo apt install openjdk-11-jre
 java -version
 openjdk version "11.0.20.1" 2023-08-24
 OpenJDK Runtime Environment (build 11.0.20.1 1-post-Ubuntu-0ubuntu122.04)
 OpenJDK 64-Bit Server VM (build 11.0.20.1 1-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
  1. 接下来,我们就可以使用以下命令安装 Jenkins 长期支持版本:
代码语言:javascript复制
 sudo wget -O /usr/share/keyrings/jenkins-keyring.asc 
  https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] 
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee 
  /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update
sudo apt-get install jenkins
  1. 启动 Jenkins 服务:
代码语言:javascript复制
sudo systemctl start jenkins
  1. 在系统启动自动启动 jenkins:
代码语言:javascript复制
sudo systemctl enable jenkins
  1. jenkins 现在应该已安装并在你的 ubuntu 系统上运行了。你可以通过打开浏览器输入:http://localhost:8080来访问它。

检查 Docker 服务的状态

现在 Docker 已经安装,我们可以使用 systemctl检查 Docker 服务的状态。

要检查 Docker 服务的状态,可以运行以下命令:

代码语言:javascript复制
systemctl status docker

输出将显示有关 Docekr 服务当前状态的信息,包括它是否正在运行,已启动以及任何最近的日志信息。

代码语言:javascript复制
root@huang-ubuntu:~# systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-11-28 15:03:29 UTC; 24min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 1630 (dockerd)
      Tasks: 7
     Memory: 24.3M
        CPU: 713ms
     CGroup: /system.slice/docker.service
             └─1630 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Nov 28 15:03:27 huang-ubuntu systemd[1]: Starting Docker Application Container Engine...
Nov 28 15:03:27 huang-ubuntu dockerd[1630]: time="2023-11-28T15:03:27.874467315Z" level=inf>Nov 28 15:03:27 huang-ubuntu dockerd[1630]: time="2023-11-28T15:03:27.876008569Z" level=inf>Nov 28 15:03:28 huang-ubuntu dockerd[1630]: time="2023-11-28T15:03:28.367600524Z" level=inf>Nov 28 15:03:29 huang-ubuntu dockerd[1630]: time="2023-11-28T15:03:29.139869418Z" level=inf>Nov 28 15:03:29 huang-ubuntu dockerd[1630]: time="2023-11-28T15:03:29.200860701Z" level=inf>Nov 28 15:03:29 huang-ubuntu dockerd[1630]: time="2023-11-28T15:03:29.201228267Z" level=inf>Nov 28 15:03:29 huang-ubuntu dockerd[1630]: time="2023-11-28T15:03:29.279347015Z" level=inf>Nov 28 15:03:29 huang-ubuntu systemd[1]: Started Docker Application Container Engine.

停止 Jenkins 服务

下面,我们来停止 jenkins 服务并查看下前后的状态显示。

要停止 Jenkins 服务,请运行以下命令:

代码语言:javascript复制
sudo systemctl stop jenkins

在停止 Jenkins 之前显示的状态:

代码语言:javascript复制
root@huang-ubuntu:~# systemctl status jenkins.service
● jenkins.service - Jenkins Continuous Integration Server
     Loaded: loaded (/lib/systemd/system/jenkins.service; enabled; vendor preset: enabled)
     Active: activating (start) since Tue 2023-11-28 15:29:59 UTC; 1min 11s ago
   Main PID: 5995 (java)
      Tasks: 41 (limit: 2221)
     Memory: 150.0M
        CPU: 16.078s
     CGroup: /system.slice/jenkins.service
             └─5995 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war>
Nov 28 15:30:13 huang-ubuntu jenkins[5995]: d981ea8b31ef481c9957d0f9798bed39
Nov 28 15:30:13 huang-ubuntu jenkins[5995]: This may also be found at: /var/lib/jenkins/sec>Nov 28 15:30:13 huang-ubuntu jenkins[5995]: ***********************************************>Nov 28 15:30:13 huang-ubuntu jenkins[5995]: ***********************************************>Nov 28 15:30:13 huang-ubuntu jenkins[5995]: ***********************************************>Nov 28 15:30:13 huang-ubuntu jenkins[5995]: WARNING: An illegal reflective access operation>Nov 28 15:30:13 huang-ubuntu jenkins[5995]: WARNING: Illegal reflective access by org.codeh>Nov 28 15:30:13 huang-ubuntu jenkins[5995]: WARNING: Please consider reporting this to the >Nov 28 15:30:13 huang-ubuntu jenkins[5995]: WARNING: Use --illegal-access=warn to enable wa>Nov 28 15:30:13 huang-ubuntu jenkins[5995]: WARNING: All illegal access operations will be >

在停止 Jenkins 之后显示的状态:

代码语言:javascript复制
root@huang-ubuntu:~# systemctl stop jenkins.service
root@huang-ubuntu:~# systemctl status jenkins.service
○ jenkins.service - Jenkins Continuous Integration Server
     Loaded: loaded (/lib/systemd/system/jenkins.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Tue 2023-11-28 15:33:44 UTC; 1s ago
    Process: 6150 ExecStart=/usr/bin/jenkins (code=exited, status=143)
   Main PID: 6150 (code=exited, status=143)
     Status: "Jenkins stopped"
        CPU: 14.866s

Nov 28 15:33:43 huang-ubuntu jenkins[6150]:         at jenkins.model.Jenkins.<init>(Jenkins>Nov 28 15:33:43 huang-ubuntu jenkins[6150]:         at hudson.model.Hudson.<init>(Hudson.ja>Nov 28 15:33:43 huang-ubuntu jenkins[6150]:         at hudson.model.Hudson.<init>(Hudson.ja>Nov 28 15:33:43 huang-ubuntu jenkins[6150]:         at hudson.WebAppMain$3.run(WebAppMain.j>Nov 28 15:33:43 huang-ubuntu jenkins[6150]: Caused: hudson.util.HudsonFailedToLoad
Nov 28 15:33:43 huang-ubuntu jenkins[6150]:         at hudson.WebAppMain$3.run(WebAppMain.j>Nov 28 15:33:43 huang-ubuntu jenkins[6150]: 2023-11-28 15:33:43.957 0000 [id=24]        INF>Nov 28 15:33:44 huang-ubuntu systemd[1]: jenkins.service: Deactivated successfully.
Nov 28 15:33:44 huang-ubuntu systemd[1]: Stopped Jenkins Continuous Integration Server.
Nov 28 15:33:44 huang-ubuntu systemd[1]: jenkins.service: Consumed 14.866s CPU time.

了解 systemctl 和 service

systemctlservice都是用于管理 Linux 上的服务的命令行实用程序。但是,它们之间存在一些差异:

  • systemctl是用于管理使用 systemd的 Linux 发行版中的服务的主要命令行实用程序。它提供了更高级的特性和功能,例如服务依赖性管理和改进的日志记录。
  • service是一个向后兼容的命令。适用于 systemd和旧版 SysV init系统。它在许多系统上仍然可用,但逐渐被 systemctl取代。

为了比较特定服务的 systemctlservice的输出,我们以 Docker 为例。

运行以下命令,实用 systemctlservice检查 Docker 服务的状态:

代码语言:javascript复制
systemctl status docker
service docker status

观察上面命令的输出中的差异(如果有,有可能是一样的)。那么将帮助你了解 systemctlservice之间的差异以及它们在不同 Linux 发行版中的用法。

以上就是本文介绍的内容,我们学习了 Linux 中的包管理器,以及使用 apt 安装了 Docker 和 Jenkins,并了解systemctlsystem两个命令,并执行了与服务管理相关的各种任务。

1 人点赞