2016年12月

这是 LXD 2.0 系列介绍文章的第四篇。

  1. LXD 入门
  2. 安装与配置
  3. 你的第一个 LXD 容器
  4. 资源控制
  5. 镜像管理
  6. 远程主机及容器迁移
  7. LXD 中的 Docker
  8. LXD 中的 LXD
  9. 实时迁移
  10. LXD 和 Juju
  11. LXD 和 OpenStack
  12. 调试,及给 LXD 做贡献

因为 LXD 容器管理有很多命令,因此这篇文章会很长。 如果你想要快速地浏览这些相同的命令,你可以尝试下我们的在线演示

可用资源限制

LXD 提供了各种资源限制。其中一些与容器本身相关,如内存配额、CPU 限制和 I/O 优先级。而另外一些则与特定设备相关,如 I/O 带宽或磁盘用量限制。

与所有 LXD 配置一样,资源限制可以在容器运行时动态更改。某些可能无法启用,例如,如果设置的内存值小于当前内存用量,但 LXD 将会试着设置并且报告失败。

所有的限制也可以通过配置文件继承,在这种情况下每个受影响的容器将受到该限制的约束。也就是说,如果在默认配置文件中设置 limits.memory=256MB,则使用默认配置文件(通常是全都使用)的每个容器的内存限制为 256MB。

我们不支持资源限制池,将其中的限制由一组容器共享,因为我们没有什么好的方法通过现有的内核 API 实现这些功能。

磁盘

这或许是最需要和最明显的需求。只需设置容器文件系统的大小限制,并对容器强制执行。

LXD 确实可以让你这样做!

不幸的是,这比它听起来复杂得多。 Linux 没有基于路径的配额,而大多数文件系统只有基于用户和组的配额,这对容器没有什么用处。

如果你正在使用 ZFS 或 btrfs 存储后端,这意味着现在 LXD 只能支持磁盘限制。也有可能为 LVM 实现此功能,但这取决于与它一起使用的文件系统,并且如果结合实时更新那会变得棘手起来,因为并不是所有的文件系统都允许在线增长,而几乎没有一个允许在线收缩。

CPU

当涉及到 CPU 的限制,我们支持 4 种不同的东西:

  • 只给我 X 个 CPU 核心

在这种模式下,你让 LXD 为你选择一组核心,然后为更多的容器和 CPU 的上线/下线提供负载均衡。

容器只看到这个数量的 CPU 核心。

  • 给我一组特定的 CPU 核心(例如,核心1、3 和 5)

类似于第一种模式,但是不会做负载均衡,你会被限制在那些核心上,无论它们有多忙。

  • 给我你拥有的 20% 处理能力

在这种模式下,你可以看到所有的 CPU,但调度程序将限制你使用 20% 的 CPU 时间,但这只有在负载状态才会这样!所以如果系统不忙,你的容器可以跑得很欢。而当其他的容器也开始使用 CPU 时,它会被限制用量。

  • 每测量 200ms,给我 50ms(并且不超过)

此模式与上一个模式类似,你可以看到所有的 CPU,但这一次,无论系统可能是多么空闲,你只能使用你设置的极限时间下的尽可能多的 CPU 时间。在没有过量使用的系统上,这可使你可以非常整齐地分割 CPU,并确保这些容器的持续性能。

另外还可以将前两个中的一个与最后两个之一相结合,即请求一组 CPU,然后进一步限制这些 CPU 的 CPU 时间。

除此之外,我们还有一个通用的优先级调节方式,可以告诉调度器当你处于负载状态时,两个争夺资源的容器谁会取得胜利。

内存

内存听起来很简单,就是给我多少 MB 的内存!

它绝对可以那么简单。 我们支持这种限制以及基于百分比的请求,比如给我 10% 的主机内存!

另外我们在上层支持一些额外的东西。 例如,你可以选择在每个容器上打开或者关闭 swap,如果打开,还可以设置优先级,以便你可以选择哪些容器先将内存交换到磁盘!

内存限制默认是“hard”。 也就是说,当内存耗尽时,内核将会开始杀掉你的那些进程。

或者,你可以将强制策略设置为“soft”,在这种情况下,只要没有别的进程的情况下,你将被允许使用尽可能多的内存。一旦别的进程想要这块内存,你将无法分配任何内存,直到你低于你的限制或者主机内存再次有空余。

网络 I/O

网络 I/O 可能是我们看起来最简单的限制,但是相信我,实现真的不简单!

我们支持两种限制。 第一个是对网络接口的速率限制。你可以设置入口和出口的限制,或者只是设置“最大”限制然后应用到出口和入口。这个只支持“桥接”和“p2p”类型接口。

第二种是全局网络 I/O 优先级,仅当你的网络接口趋于饱和的时候再使用。

块 I/O

我把最古怪的放在最后。对于用户看起来它可能简单,但有一些情况下,它的结果并不会和你的预期一样。

我们在这里支持的基本上与我在网络 I/O 中描述的相同。

你可以直接设置磁盘的读写 IO 的频率和速率,并且有一个全局的块 I/O 优先级,它会通知 I/O 调度程序更倾向哪个。

古怪的是如何设置以及在哪里应用这些限制。不幸的是,我们用于实现这些功能的底层使用的是完整的块设备。这意味着我们不能为每个路径设置每个分区的 I/O 限制。

这也意味着当使用可以支持多个块设备映射到指定的路径(带或者不带 RAID)的 ZFS 或 btrfs 时,我们并不知道这个路径是哪个块设备提供的。

这意味着,完全有可能,实际上确实有可能,容器使用的多个磁盘挂载点(绑定挂载或直接挂载)可能来自于同一个物理磁盘。

这就使限制变得很奇怪。为了使限制生效,LXD 具有猜测给定路径所对应块设备的逻辑,这其中包括询问 ZFS 和 btrfs 工具,甚至可以在发现一个文件系统中循环挂载的文件时递归地找出它们。

这个逻辑虽然不完美,但通常会找到一组应该应用限制的块设备。LXD 接着记录并移动到下一个路径。当遍历完所有的路径,然后到了非常奇怪的部分。它会平均你为相应块设备设置的限制,然后应用这些。

这意味着你将在容器中“平均”地获得正确的速度,但这也意味着你不能对来自同一个物理磁盘的“/fast”和一个“/slow”目录应用不同的速度限制。 LXD 允许你设置它,但最后,它会给你这两个值的平均值。

它怎么工作?

除了网络限制是通过较旧但是良好的“tc”实现的,上述大多数限制是通过 Linux 内核的 cgroup API 来实现的。

LXD 在启动时会检测你在内核中启用了哪些 cgroup,并且将只应用你的内核支持的限制。如果你缺少一些 cgroup,守护进程会输出警告,接着你的 init 系统将会记录这些。

在 Ubuntu 16.04 上,默认情况下除了内存交换审计外将会启用所有限制,内存交换审计需要你通过swapaccount = 1这个内核引导参数来启用。

应用这些限制

上述所有限制都能够直接或者用某个配置文件应用于容器。容器范围的限制可以使用:

lxc config set CONTAINER KEY VALUE

或对于配置文件设置:

lxc profile set PROFILE KEY VALUE

当指定特定设备时:

lxc config device set CONTAINER DEVICE KEY VALUE

或对于配置文件设置:

lxc profile device set PROFILE DEVICE KEY VALUE

有效配置键、设备类型和设备键的完整列表可以看这里

CPU

要限制使用任意两个 CPU 核心可以这么做:

lxc config set my-container limits.cpu 2

要指定特定的 CPU 核心,比如说第二和第四个:

lxc config set my-container limits.cpu 1,3

更加复杂的情况还可以设置范围:

lxc config set my-container limits.cpu 0-3,7-11

限制实时生效,你可以看下面的例子:

stgraber@dakara:~$ lxc exec zerotier -- cat /proc/cpuinfo | grep ^proces
processor : 0
processor : 1
processor : 2
processor : 3
stgraber@dakara:~$ lxc config set zerotier limits.cpu 2
stgraber@dakara:~$ lxc exec zerotier -- cat /proc/cpuinfo | grep ^proces
processor : 0
processor : 1

注意,为了避免完全混淆用户空间,lxcfs 会重排 /proc/cpuinfo 中的条目,以便没有错误。

就像 LXD 中的一切,这些设置也可以应用在配置文件中:

stgraber@dakara:~$ lxc exec snappy -- cat /proc/cpuinfo | grep ^proces
processor : 0
processor : 1
processor : 2
processor : 3
stgraber@dakara:~$ lxc profile set default limits.cpu 3
stgraber@dakara:~$ lxc exec snappy -- cat /proc/cpuinfo | grep ^proces
processor : 0
processor : 1
processor : 2

要限制容器使用 10% 的 CPU 时间,要设置下 CPU allowance:

lxc config set my-container limits.cpu.allowance 10%

或者给它一个固定的 CPU 时间切片:

lxc config set my-container limits.cpu.allowance 25ms/200ms

最后,要将容器的 CPU 优先级调到最低:

lxc config set my-container limits.cpu.priority 0

内存

要直接应用内存限制运行下面的命令:

lxc config set my-container limits.memory 256MB

(支持的后缀是 KB、MB、GB、TB、PB、EB)

要关闭容器的内存交换(默认启用):

lxc config set my-container limits.memory.swap false

告诉内核首先交换指定容器的内存:

lxc config set my-container limits.memory.swap.priority 0

如果你不想要强制的内存限制:

lxc config set my-container limits.memory.enforce soft

磁盘和块 I/O

不像 CPU 和内存,磁盘和 I/O 限制是直接作用在实际的设备上的,因此你需要编辑原始设备或者屏蔽某个具体的设备。

要设置磁盘限制(需要 btrfs 或者 ZFS):

lxc config device set my-container root size 20GB

比如:

stgraber@dakara:~$ lxc exec zerotier -- df -h /
Filesystem                        Size Used Avail Use% Mounted on
encrypted/lxd/containers/zerotier 179G 542M  178G   1% /
stgraber@dakara:~$ lxc config device set zerotier root size 20GB
stgraber@dakara:~$ lxc exec zerotier -- df -h /
Filesystem                       Size  Used Avail Use% Mounted on
encrypted/lxd/containers/zerotier 20G  542M   20G   3% /

要限制速度,你可以:

lxc config device set my-container root limits.read 30MB
lxc config device set my-container root.limits.write 10MB

或者限制 IO 频率:

lxc config device set my-container root limits.read 20Iops
lxc config device set my-container root limits.write 10Iops

最后你在一个过量使用的繁忙系统上,你或许想要:

lxc config set my-container limits.disk.priority 10

将那个容器的 I/O 优先级调到最高。

网络 I/O

只要机制可用,网络 I/O 基本等同于块 I/O。

比如:

stgraber@dakara:~$ lxc exec zerotier -- wget http://speedtest.newark.linode.com/100MB-newark.bin -O /dev/null
--2016-03-26 22:17:34-- http://speedtest.newark.linode.com/100MB-newark.bin
Resolving speedtest.newark.linode.com (speedtest.newark.linode.com)... 50.116.57.237, 2600:3c03::4b
Connecting to speedtest.newark.linode.com (speedtest.newark.linode.com)|50.116.57.237|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 104857600 (100M) [application/octet-stream]
Saving to: '/dev/null'

/dev/null 100%[===================>] 100.00M 58.7MB/s in 1.7s 

2016-03-26 22:17:36 (58.7 MB/s) - '/dev/null' saved [104857600/104857600]

stgraber@dakara:~$ lxc profile device set default eth0 limits.ingress 100Mbit
stgraber@dakara:~$ lxc profile device set default eth0 limits.egress 100Mbit
stgraber@dakara:~$ lxc exec zerotier -- wget http://speedtest.newark.linode.com/100MB-newark.bin -O /dev/null
--2016-03-26 22:17:47-- http://speedtest.newark.linode.com/100MB-newark.bin
Resolving speedtest.newark.linode.com (speedtest.newark.linode.com)... 50.116.57.237, 2600:3c03::4b
Connecting to speedtest.newark.linode.com (speedtest.newark.linode.com)|50.116.57.237|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 104857600 (100M) [application/octet-stream]
Saving to: '/dev/null'

/dev/null 100%[===================>] 100.00M 11.4MB/s in 8.8s 

2016-03-26 22:17:56 (11.4 MB/s) - '/dev/null' saved [104857600/104857600]

这就是如何将一个千兆网的连接速度限制到仅仅 100Mbit/s 的!

和块 I/O 一样,你可以设置一个总体的网络优先级:

lxc config set my-container limits.network.priority 5

获取当前资源使用率

LXD API 可以导出目前容器资源使用情况的一点信息,你可以得到:

  • 内存:当前、峰值、目前内存交换和峰值内存交换
  • 磁盘:当前磁盘使用率
  • 网络:每个接口传输的字节和包数。

另外如果你使用的是非常新的 LXD(在写这篇文章时的 git 版本),你还可以在lxc info中得到这些信息:

stgraber@dakara:~$ lxc info zerotier
Name: zerotier
Architecture: x86_64
Created: 2016/02/20 20:01 UTC
Status: Running
Type: persistent
Profiles: default
Pid: 29258
Ips:
 eth0: inet 172.17.0.101
 eth0: inet6 2607:f2c0:f00f:2700:216:3eff:feec:65a8
 eth0: inet6 fe80::216:3eff:feec:65a8
 lo: inet 127.0.0.1
 lo: inet6 ::1
 lxcbr0: inet 10.0.3.1
 lxcbr0: inet6 fe80::f0bd:55ff:feee:97a2
 zt0: inet 29.17.181.59
 zt0: inet6 fd80:56c2:e21c:0:199:9379:e711:b3e1
 zt0: inet6 fe80::79:e7ff:fe0d:5123
Resources:
 Processes: 33
 Disk usage:
  root: 808.07MB
 Memory usage:
  Memory (current): 106.79MB
  Memory (peak): 195.51MB
  Swap (current): 124.00kB
  Swap (peak): 124.00kB
 Network usage:
  lxcbr0:
   Bytes received: 0 bytes
   Bytes sent: 570 bytes
   Packets received: 0
   Packets sent: 0
  zt0:
   Bytes received: 1.10MB
   Bytes sent: 806 bytes
   Packets received: 10957
   Packets sent: 10957
  eth0:
   Bytes received: 99.35MB
   Bytes sent: 5.88MB
   Packets received: 64481
   Packets sent: 64481
  lo:
   Bytes received: 9.57kB
   Bytes sent: 9.57kB
   Packets received: 81
   Packets sent: 81
Snapshots:
 zerotier/blah (taken at 2016/03/08 23:55 UTC) (stateless)

总结

LXD 团队花费了几个月的时间来迭代我们使用的这些限制的语言。 它是为了在保持强大和功能明确的基础上同时保持简单。

实时地应用这些限制和通过配置文件继承,使其成为一种非常强大的工具,可以在不影响正在运行的服务的情况下实时管理服务器上的负载。

更多信息

LXD 的主站在: https://linuxcontainers.org/lxd

LXD 的 GitHub 仓库: https://github.com/lxc/lxd

LXD 的邮件列表:https://lists.linuxcontainers.org

LXD 的 IRC 频道:#lxcontainers on irc.freenode.net

如果你不想在你的机器上安装LXD,你可以在线尝试下


作者简介:我是 Stéphane Graber。我是 LXC 和 LXD 项目的领导者,目前在加拿大魁北克蒙特利尔的家所在的Canonical 有限公司担任 LXD 的技术主管。


via: https://www.stgraber.org/2016/03/26/lxd-2-0-resource-control-412/

作者:Stéphane Graber 译者:geekpi 校对:wxy

本文由 LCTT 组织翻译,Linux中国 荣誉推出

 title=

在这个系列的文章中,我们将通过使用 Postfix、Dovecot 和 openssl 这三款工具来为你展示如何在 ubuntu 系统上搭建一个既可靠又易于配置的邮件服务器。

在这个容器和微服务技术日新月异的时代,值得庆幸的是有些事情并没有改变,例如搭建一个 Linux 下的邮件服务器,仍然需要许多步骤才能间隔各种服务器耦合在一起,而当你将这些配置好,放在一起,却又非常可靠稳定,不会像微服务那样一睁眼有了,一闭眼又没了。 在这个系列教程中我们将通过使用 Postfix、Dovecot 和 openssl 这三款工具在 ubuntu 系统上搭建一个既可靠又易于配置的邮件服务器。

Postfix 是一个古老又可靠的软件,它比原始的 Unix 系统的 MTA 软件 sendmail 更加容易配置和使用(还有人仍然在用sendmail 吗?)。 Exim 是 Debain 系统上的默认 MTA 软件,它比 Postfix 更加轻量而且超级容易配置,因此我们在将来的教程中会推出 Exim 的教程。

Dovecot(LCTT 译注:详情请阅读维基百科)和 Courier 是两个非常受欢迎的优秀的 IMAP/POP3 协议的服务器软件,Dovecot 更加的轻量并且易于配置。

你必须要保证你的邮件通讯是安全的,因此我们就需要使用到 OpenSSL 这个软件,OpenSSL 也提供了一些很好用的工具来测试你的邮件服务器。

为了简单起见,在这一系列的教程中,我们将指导大家安装一个在局域网上的邮件服务器,你应该拥有一个局域网内的域名服务,并确保它是启用且正常工作的,查看这篇“使用 dnsmasq 为局域网轻松提供 DNS 服务”会有些帮助,然后,你就可以通过注册域名并相应地配置防火墙,来将这台局域网服务器变成互联网可访问邮件服务器。这个过程网上已经有很多很详细的教程了,这里不再赘述,请大家继续跟着教程进行即可。

一些术语

让我们先来快速了解一些术语,因为当我们了解了这些术语的时候就能知道这些见鬼的东西到底是什么。 :D

  • MTA 邮件传输代理 Mail Transfer Agent ,基于 SMTP 协议(简单邮件传输协议)的服务端,比如 Postfix、Exim、Sendmail 等。SMTP 服务端彼此之间进行相互通信(LCTT 译注 : 详情请阅读维基百科)。
  • MUA 邮件用户代理 Mail User Agent ,你本地的邮件客户端,例如 : Evolution、KMail、Claws Mail 或者 Thunderbird(LCTT 译注 : 例如国内的 Foxmail)。
  • POP3 邮局协议 Post-Office Protocol 版本 3,将邮件从 SMTP 服务器传输到你的邮件客户端的的最简单的协议。POP 服务端是非常简单小巧的,单一的一台机器可以为数以千计的用户提供服务。
  • IMAP 交互式消息访问协议 Interactive Message Access Protocol ,许多企业使用这个协议因为邮件可以被保存在服务器上,而用户不必担心会丢失消息。IMAP 服务器需要大量的内存和存储空间。
  • TLS 传输套接层 Transport socket layer 是 SSL( 安全套接层 Secure Sockets Layer )的改良版,为 SASL 身份认证提供了加密的传输服务层。
  • SASL 简单身份认证与安全层 Simple Authentication and Security Layer ,用于认证用户。SASL进行身份认证,而上面说的 TLS 提供认证数据的加密传输。
  • StartTLS: 也被称为伺机 TLS 。如果服务器双方都支持 SSL/TLS,StartTLS 就会将纯文本连接升级为加密连接(TLS 或 SSL)。如果有一方不支持加密,则使用明文传输。StartTLS 会使用标准的未加密端口 25 (SMTP)、 110(POP3)和 143 (IMAP)而不是对应的加密端口 465(SMTP)、995(POP3) 和 993 (IMAP)。

啊,我们仍然有 sendmail

绝大多数的 Linux 版本仍然还保留着 /usr/sbin/sendmail 。 这是在那个 MTA 只有一个 sendmail 的古代遗留下来的痕迹。在大多数 Linux 发行版中,/usr/sbin/sendmail 会符号链接到你安装的 MTA 软件上。如果你的 Linux 中有它,不用管它,你的发行版会自己处理好的。

安装 Postfix

使用 apt-get install postfix 来做基本安装时要注意(图 1),安装程序会打开一个向导,询问你想要搭建的服务器类型,你要选择“Internet Server”,虽然这里是局域网服务器。它会让你输入完全限定的服务器域名(例如: myserver.mydomain.net)。对于局域网服务器,假设你的域名服务已经正确配置,(我多次提到这个是因为经常有人在这里出现错误),你也可以只使用主机名。

 title=

图 1:Postfix 的配置。

Ubuntu 系统会为 Postfix 创建一个配置文件,并启动三个守护进程 : masterqmgrpickup,这里没用一个叫 Postfix 的命令或守护进程。(LCTT 译注:名为 postfix 的命令是管理命令。)

$ ps ax 
 6494 ? Ss 0:00 /usr/lib/postfix/master 
 6497 ? S 0:00 pickup -l -t unix -u -c 
 6498 ? S 0:00 qmgr -l -t unix -u 

你可以使用 Postfix 内置的配置语法检查来测试你的配置文件,如果没用发现语法错误,不会输出任何内容。

$ sudo postfix check 
[sudo] password for carla: 

使用 netstat 来验证 postfix 是否正在监听 25 端口。

$ netstat -ant 
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 
tcp6 0 0 :::25  :::*  LISTEN 

现在让我们再操起古老的 telnet 来进行测试 :

$ telnet myserver 25 
Trying 127.0.1.1... 
Connected to myserver. 
Escape character is '^]'. 
220 myserver ESMTP Postfix (Ubuntu) 
EHLO myserver
250-myserver 
250-PIPELINING 
250-SIZE 10240000 
250-VRFY 
250-ETRN 
250-STARTTLS 
250-ENHANCEDSTATUSCODES 
250-8BITMIME 
250 DSN 
^]

telnet> 

嘿,我们已经验证了我们的服务器名,而且 Postfix 正在监听 SMTP 的 25 端口而且响应了我们键入的命令。

按下 ^] 终止连接,返回 telnet。输入 quit 来退出 telnet。输出的 ESMTP(扩展的 SMTP ) 250 状态码如下。 (LCTT 译注: ESMTP (Extended SMTP),即扩展 SMTP,就是对标准 SMTP 协议进行的扩展。详情请阅读维基百科

  • PIPELINING 允许多个命令流式发出,而不必对每个命令作出响应。
  • SIZE 表示服务器可接收的最大消息大小。
  • VRFY 可以告诉客户端某一个特定的邮箱地址是否存在,这通常应该被取消,因为这是一个安全漏洞。
  • ETRN 适用于非持久互联网连接的服务器。这样的站点可以使用 ETRN 从上游服务器请求邮件投递,Postfix 可以配置成延迟投递邮件到 ETRN 客户端。
  • STARTTLS (详情见上述说明)。
  • ENHANCEDSTATUSCODES,服务器支撑增强型的状态码和错误码。
  • 8BITMIME,支持 8 位 MIME,这意味着完整的 ASCII 字符集。最初,原始的 ASCII 是 7 位。
  • DSN,投递状态通知,用于通知你投递时的错误。

Postfix 的主配置文件是: /etc/postfix/main.cf,这个文件是安装程序创建的,可以参考这个资料来查看完整的 main.cf 参数列表, /etc/postfix/postfix-files 这个文件描述了 Postfix 完整的安装文件。

下一篇教程我们会讲解 Dovecot 的安装和测试,然后会给我们自己发送一些邮件。


via: https://www.linux.com/learn/how-build-email-server-ubuntu-linux

作者:CARLA SCHRODER 译者:WangYihang 校对:wxy

本文由 LCTT 组织编译,Linux中国 荣誉推出

这篇文章包括了管理 Samba4 域控制器架构过程中的一些常用命令,比如添加、移除、禁用或者列出用户及用户组等。

我们也会关注一下如何配置域安全策略以及如何把 AD 用户绑定到本地的 PAM 认证中,以实现 AD 用户能够在 Linux 域控制器上进行本地登录。

要求

第一步:在命令行下管理

1、 可以通过 samba-tool 命令行工具来进行管理,这个工具为域管理工作提供了一个功能强大的管理接口。

通过 samba-tool 命令行接口,你可以直接管理域用户及用户组、域组策略、域站点,DNS 服务、域复制关系和其它重要的域功能。

使用 root 权限的账号,直接输入 samba-tool 命令,不要加任何参数选项来查看该工具能实现的所有功能。

# samba-tool -h

samba-tool - Manage Samba Administration Tool

samba-tool —— Samba 管理工具

2、 现在,让我们开始使用 samba-tool 工具来管理 Samba4 活动目录中的用户。

使用如下命令来创建 AD 用户:

# samba-tool user add your_domain_user

添加一个用户,包括 AD 可选的一些重要属性,如下所示:

--------- review all options --------- 
# samba-tool user add -h  
# samba-tool user add your_domain_user --given-name=your_name --surname=your_username [email protected] --login-shell=/bin/bash

Create User on Samba AD

在 Samba AD 上创建用户

3、 可以通过下面的命令来列出所有 Samba AD 域用户:

# samba-tool user list

List Samba AD Users

列出 Samba AD 用户信息

4、 使用下面的命令来删除 Samba AD 域用户:

# samba-tool user delete your_domain_user

5、 重置 Samba 域用户的密码:

# samba-tool user setpassword your_domain_user

6、 启用或禁用 Samba 域用户账号:

# samba-tool user disable your_domain_user
# samba-tool user enable your_domain_user

7、 同样地,可以使用下面的方法来管理 Samba 用户组:

--------- review all options --------- 
# samba-tool group add –h  
# samba-tool group add your_domain_group

8、 删除 samba 域用户组:

# samba-tool group delete your_domain_group

9、 显示所有的 Samba 域用户组信息:

# samba-tool group list

10、 列出指定组下的 Samba 域用户:

# samba-tool group listmembers "your_domain group"

List Samba Domain Members of Group

列出 Samba 域用户组

11、 从 Samba 域组中添加或删除某一用户:

# samba-tool group addmembers your_domain_group your_domain_user
# samba-tool group remove members your_domain_group your_domain_user

12、 如上面所提到的, samba-tool 命令行工具也可以用于管理 Samba 域策略及安全。

查看 samba 域密码设置:

# samba-tool domain passwordsettings show

Check Samba Domain Password

检查 Samba 域密码

13、 为了修改 samba 域密码策略,比如密码复杂度,密码失效时长,密码长度,密码重复次数以及其它域控制器要求的安全策略等,可参照如下命令来完成:

---------- List all command options ---------- 
# samba-tool domain passwordsettings -h 

Manage Samba Domain Password Settings

管理 Samba 域密码策略

不要把上图中的密码策略规则用于生产环境中。上面的策略仅仅是用于演示目的。

第二步:使用活动目录账号来完成 Samba 本地认证

14、 默认情况下,离开 Samba AD DC 环境,AD 用户不能从本地登录到 Linux 系统。

为了让活动目录账号也能登录到系统,你必须在 Linux 系统环境中做如下设置,并且要修改 Samba4 AD DC 配置。

首先,打开 Samba 主配置文件,如果以下内容不存在,则添加:

$ sudo nano /etc/samba/smb.conf

确保以下参数出现在配置文件中:

winbind enum users = yes
winbind enum groups = yes

Samba Authentication Using Active Directory User Accounts

Samba 通过 AD 用户账号来进行认证

15、 修改之后,使用 testparm 工具来验证配置文件没有错误,然后通过如下命令来重启 Samba 服务:

$ testparm
$ sudo systemctl restart samba-ad-dc.service

Check Samba Configuration for Errors

检查 Samba 配置文件是否报错

16、 下一步,我们需要修改本地 PAM 配置文件,以让 Samba4 活动目录账号能够完成本地认证、开启会话,并且在第一次登录系统时创建一个用户目录。

使用 pam-auth-update 命令来打开 PAM 配置提示界面,确保所有的 PAM 选项都已经使用 [空格] 键来启用,如下图所示:

完成之后,按 [Tab] 键跳转到 OK ,以启用修改。

$ sudo pam-auth-update

Configure PAM for Samba4 AD

为 Samba4 AD 配置 PAM 认证

Enable PAM Authentication Module for Samba4 AD Users

为 Samba4 AD 用户启用 PAM认证模块

17、 现在,使用文本编辑器打开 /etc/nsswitch.conf 配置文件,在 passwdgroup 参数的最后面添加 winbind 参数,如下图所示:

$ sudo vi /etc/nsswitch.conf

Add Windbind Service Switch for Samba

为 Samba 服务添加 Winbind Service Switch 设置

18、 最后,编辑 /etc/pam.d/common-password 文件,查找下图所示行并删除 user_authtok 参数。

该设置确保 AD 用户在通过 Linux 系统本地认证后,可以在命令行下修改他们的密码。有这个参数时,本地认证的 AD 用户不能在控制台下修改他们的密码。

password       [success=1 default=ignore]      pam_winbind.so try_first_pass

Allow Samba AD Users to Change Passwords

允许 Samba AD 用户修改密码

在每次 PAM 更新安装完成并应用到 PAM 模块,或者你每次执行 pam-auth-update 命令后,你都需要删除 use_authtok 参数。

19、 Samba4 的二进制文件会生成一个内建的 windindd 进程,并且默认是启用的。

因此,你没必要再次去启用并运行 Ubuntu 系统官方自带的 winbind 服务。

为了防止系统里原来已废弃的 winbind 服务被启动,确保执行以下命令来禁用并停止原来的 winbind 服务。

$ sudo systemctl disable winbind.service
$ sudo systemctl stop winbind.service

虽然我们不再需要运行原有的 winbind 进程,但是为了安装并使用 wbinfo 工具,我们还得从系统软件库中安装 Winbind 包。

wbinfo 工具可以用来从 winbindd 进程侧来查询活动目录用户和组。

以下命令显示了使用 wbinfo 命令如何查询 AD 用户及组信息。

$ wbinfo -g
$ wbinfo -u
$ wbinfo -i your_domain_user

Check Samba4 AD Information

检查 Samba4 AD 信息

Check Samba4 AD User Info

检查 Samba4 AD 用户信息

20、 除了 wbinfo 工具外,你也可以使用 getent 命令行工具从 Name Service Switch 库中查询活动目录信息库,在 /etc/nsswitch.conf 配置文件中有相关描述内容。

通过 grep 命令用管道符从 getent 命令过滤结果集,以获取信息库中 AD 域用户及组信息。

# getent passwd | grep TECMINT
# getent group | grep TECMINT

Get Samba4 AD Details

查看 Samba4 AD 详细信息

第三步:使用活动目录账号登录 Linux 系统

21、 为了使用 Samba4 AD 用户登录系统,使用 su - 命令切换到 AD 用户账号即可。

第一次登录系统后,控制台会有信息提示用户的 home 目录已创建完成,系统路径为 /home/$DOMAIN/ 之下,名字为用户的 AD 账号名。

使用 id 命令来查询其它已登录的用户信息。

# su - your_ad_user
$ id
$ exit

Check Samba4 AD User Authentication on Linux

检查 Linux 下 Samba4 AD 用户认证结果

22、 当你成功登入系统后,在控制台下输入 passwd 命令来修改已登录的 AD 用户密码。

$ su - your_ad_user
$ passwd

Change Samba4 AD User Password

修改 Samba4 AD 用户密码

23、 默认情况下,活动目录用户没有可以完成系统管理工作的 root 权限。

要授予 AD 用户 root 权限,你必须把用户名添加到本地 sudo 组中,可使用如下命令完成。

确保你已输入域 、斜杠和 AD 用户名,并且使用英文单引号括起来,如下所示:

# usermod -aG sudo 'DOMAIN\your_domain_user'

要检查 AD 用户在本地系统上是否有 root 权限,登录后执行一个命令,比如,使用 sudo 权限执行 apt-get update 命令。

# su - tecmint_user
$ sudo apt-get update

Grant sudo Permission to Samba4 AD User

授予 Samba4 AD 用户 sudo 权限

24、 如果你想把活动目录组中的所有账号都授予 root 权限,使用 visudo 命令来编辑 /etc/sudoers 配置文件,在 root 权限那一行添加如下内容:

%DOMAIN\\your_domain\  group ALL=(ALL:ALL) ALL

注意 /etc/sudoers 的格式,不要弄乱。

/etc/sudoers 配置文件对于 ASCII 引号字符处理的不是很好,因此务必使用 '%' 来标识用户组,使用反斜杠来转义域名后的第一个斜杠,如果你的组名中包含空格(大多数 AD 内建组默认情况下都包含空格)使用另外一个反斜杠来转义空格。并且域的名称要大写。

Give Sudo Access to All Samba4 AD Users

授予所有 Samba4 用户 sudo 权限

好了,差不多就这些了!管理 Samba4 AD 架构也可以使用 Windows 环境中的其它几个工具,比如 ADUC、DNS 管理器、 GPM 等等,这些工具可以通过安装从 Microsoft 官网下载的 RSAT 软件包来获得。

要通过 RSAT 工具来管理 Samba4 AD DC ,你必须要把 Windows 系统加入到 Samba4 活动目录。这将是我们下一篇文章的重点,在这之前,请继续关注。


via: http://www.tecmint.com/manage-samba4-active-directory-linux-command-line

作者:Matei Cezar 译者:rusking 校对:wxy

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

经常有人问哪个编程语言最流行?这问题很简单,但是回答起来可没那么简单。

首先,我们要知道,为什么人们会问这样的问题?

一般问这样的问题是人大多是学生,他们想知道这个问题的答案是因为他们想要找份工作,所以寻求一种可以增加面试成功率的技能。对于大多数人来说,进入一个新的领域时了解什么是最流行的,是很有意义的。

而对于其他人来说,比如说已经掌握了一种或几种编程语言的程序员,他可能在想要掌握一门新的编程语言时,会考虑一下当前最流行的编程语言作为参考。而对于要开发一个产品的程序员来说,也希望了解当前最流行的编程语言是因为他们希望所开发的产品能够迎合客户的环境和需求,显然支持流行的语言的 API 会被更多人使用。

甚至,就算是你想启动一个项目时,你也需要考虑是否选择一个流行的编程语言。虽然你首先要考虑的是这种语言能够满足你的需求,比如说如果用一个流行的编程语言你需要花费更多的时间和成本,而不那么流行的编程语言或许会更快捷和轻松,显然你还是会选择那个不太流行的——但是如果各个方面都差不多,不用说你会选择流行的那个,因为这样你可以找到更多的程序员,遇到问题也有更多的解决方案。

怎么才算是流行?

那么,哪个语言是最流行的?其实回答这个问题并没有你想象的那么简单。关键是,你该怎么定义这个“流行”?

这个问题并没有固定的答案,不过在维基上有一篇文章提到了如何测量编程语言的流行度。在这篇文章中,列出了几个测量流行度的因素:

  • 该语言在搜索中提及的次数,比如在谷歌趋势中
  • 在招聘广告中提及该语言的次数
  • 传授和介绍该语言的书籍销售量
  • 以该语言编写的现存代码的行数,不流行的语言在公开搜索中可能根本就找不到
  • 在 GitHub、Freecode 上使用该语言的项目数量
  • 在论坛和新闻组中讨论该语言的帖子数量

此外,你还可以考量如下指标:

  • 编程培训班里面该语言的培训课程销售数量
  • 编程培训班里面学生的数量
  • 视频网站里面关于该语言的视频数量
  • Stack Overflow 和 Reddit 里面关于该语言的帖子数量

甚至,你还可以增加一些其它的统计维度,比如根据国家和城市来统计,你知道在北京哪种编程语言最流行么?上海呢?

所以,这个问题的回答并不是一个简单的答案。

统计数据来源的不同

即使我们知道了流行度取决于多种因素,但是人们还是希望能够了解到底哪个语言比较流行,以此来指导他们的培训和公司的决策。

有一些网站依据不同的标准,公开发布了一些语言流行度指标。 IEEE Spectrum 对这些指标做了一个有趣的整合,它可以让你通过自行设置不同因子的权重来得到你自己的编程语言流行度排行榜。

Coding Dojo 也有一个图表,聚合了工作搜索引擎 Indeed.com 的数据;而有名的 Tiobe 排行榜一直使用搜索引擎聚合来计算流行度; PyPl 则是根据谷歌来查看语言的流行度。

然而,这并没什么大用。如果你想知道你该学习那种语言,或者是你需要支持的语言,最困难的还是你并不知道这里的哪个图表才是适合你的。

好吧,我明白了,那么到底那种编程语言是流行的?

为了帮助你找到方向,我组合了上述提及的几种数据源,包括三种 IEEE 分类:“趋势”代表语言的增长度,“工作”代表 Dice.com 和 CareerBuilder 上的招聘量,“开源”代表开源项目数量。

排名结果如下表:

但是问题是,上图并不能告诉我们重点所在。要解决这个问题,我们需要做一点数据分析。我聚合了这六个数据源中的五个(我去掉了 Coding Dojo 是因为它仅显示了前九),然后我根据编程语言出现在图表中的位置和次数进行加权,这样我得到了如下的前十排名。

如你所见,这些语言分成了三大类。第一梯队包括 Java、C、Python 和 C++,毫无疑问,你肯定经常听到它们的名字。第二梯队包括 JavaScript、C#、PHP 和 Swift。剩下的两个是 Objective-C 和 R。

这给我们带来什么启发?

第一梯队的语言 Java、C、Python 和 C++ 都是非常通用的语言,它们并不局限于特定的编程平台或用途。

最值得关注的是第二梯队,它包括 JavaScript、C#、PHP 和 Swift。JavaScript 和 PHP 是主要的 Web 开发语言。C# 是微软的编程语言,而 Swift 是苹果新推出的主力语言。基本上来说,第二梯队是平台相关的。

那么这反映了什么?如果你懂一点现代编程,你就知道编程其实不仅仅是使用这种语言,而更重要的是开发一些什么,比如说嵌入式系统、iPhone 应用、Web 应用或者微软的服务器端应用等等。

对语言的熟悉程度其实只是一小部分。举个例子说,不管你是多么的喜欢 Python 或者古老而常青的 C,但如果你要为 WordPress 开发插件或主题,你只能使用 JavaScript 和 PHP。这无关于哪个语言更流行。

字里行间的发现

或者你会注意到一些有趣的地方。

首先,Coding Dojo 的编程语言排行榜的第一名是 SQL,只有它一家是这样。你很少会单独在 SQL 里面编程,通常都是在其它的语言里面使用它来管理数据。所以,学会 SQL 是很有用的,甚至是必要的。然而,去上一门 SQL 的培训课程并不能帮你找到一份工作,也不会多挣多少钱。

其次,苹果特有的语言在排行榜中排名很低,这或许和你的预期不同,因为 iOS 的应用是如此的流行。不过确实是这样的,如果你不是要开发你自己的应用的话,那学它们其实不如学习别的语言,因为其实没有那么多的公司雇佣苹果应用开发人员。这就是 Swift 语言掉到了榜尾的原因,而 Objective-C 正在被 Swift 所替代,在前面也看到了它也处于榜单的后面。

C 家族的语言仍然是主流。Java、C++、C、C#,甚至 Objective-C 都是基于 C 的语言。如果你只想学一门语言,你可以从其中选择一个。我推荐你选择 Java 或 C++,它们可以为你打开进入 C 语言家族的大门。

以我的职业生涯的经验来看,不是特别复杂的场景的话,我大概能用 20 来种语言来编程,通常我只用几天就可以学会一门新的语言。这是因为我在学校的专业就是语言设计,我也教编程超过了 20 年了。掌握这么多的语言对我很有帮助,因为我总是根据我要做的事情选择一种语言,而不是专门去上课学习一种语言。这听起来好像有点难,但是其实你也能做到的。

我的建议就是,如果你要编程,那么就去学习多种编程语言和各种框架吧。用编程语言去做点东西出来,编程不仅仅是一种智力锻炼,而且你可以实际用它做点什么出来。

掌握多种语言和框架是重要的,因为计算机行业变得太快了。C 语言依然历久弥新,而 Swift 虽然出现才几年就登上了排行榜。你今天学习到的或许不够你整个职业生涯挥霍,所以“怎样学习语言”要比“学习语言”更重要,最好的办法就是多学几门。

我的推荐非常简单,无论是 C++ 还是 Java,选一个学习就好了。然后是 JavaScript,越来越多的基于 Web 的应用需要良好的 JavaScript 技能。再然后是 PHP、Swift 或 Python 中选一个,这要看你的工作种类了。当你在这三个梯队中都学会一门后,你就可以根据你的情况学习更多的语言和框架了。

好了,努力吧,学习一些编程语言,做点漂亮的成绩出来。如果你有什么想法,欢迎在下面和我们分享。

在 2014 年,为了对网上一些关于在科技行业女性稀缺的评论作出回应,我的同事 Crystal Beasley 倡议在科技/信息安全方面工作的女性在网络上分享自己的“成才之路”。这篇文章就是我的故事。我把我的故事与你们分享是因为我相信榜样的力量,也相信一个人有多种途径,选择一个让自己满意的有挑战性的工作以及可以实现目标的人生。

和电脑相伴的童年

我可以说是硅谷的女儿。我的故事不是一个从科技业余爱好转向专业的故事,也不是从小就专注于这份事业的故事。这个故事更多的是关于环境如何塑造你 — 通过它的那种已然存在的文化来改变你,如果你想要被改变的话。这不是从小就开始努力并为一个明确的目标而奋斗的故事,我意识到,这其实是享受了一些特权的成长故事。

我出生在曼哈顿,但是我在新泽西州长大,因为我的爸爸退伍后,在那里的罗格斯大学攻读计算机科学的博士学位。当我四岁时,学校里有人问我爸爸干什么谋生时,我说,“他就是看电视和捕捉小虫子,但是我从没有见过那些小虫子”(LCTT 译注:小虫子,bug)。他在家里有一台哑终端(LCTT 译注:就是那台“电视”),这大概与他在 Bolt Beranek Newman 公司的工作有关,做关于早期互联网人工智能方面的工作。我就在旁边看着。

我没能玩上父亲的会抓小虫子的电视,但是我很早就接触到了技术领域,我很珍惜这个礼物。提早的熏陶对于一个未来的高手是十分必要的 — 所以,请花时间和你的小孩谈谈你在做的事情!

我父亲的终端和这个很类似 —— 如果不是这个的话 CC BY-SA 4.0

当我六岁时,我们搬到了加州。父亲在施乐的帕克研究中心(Xerox PARC)找到了一个工作。我记得那时我认为这个城市一定有很多熊,因为在它的旗帜上有一个熊。在1979年,帕洛阿图市还是一个大学城,还有果园和开阔地带。

在 Palo Alto 的公立学校待了一年之后,我的姐姐和我被送到了“半岛学校”,这个“民主典范”学校对我造成了深刻的影响。在那里,好奇心和创新意识是被高度推崇的,教育也是由学生自己分组讨论决定的。在学校,我们很少能看到叫做电脑的东西,但是在家就不同了。

在父亲从施乐辞职之后,他就去了苹果公司,在那里他工作使用并带回家让我玩的第一批电脑就是:Apple II 和 LISA。我的父亲在最初的 LISA 的研发团队。我直到现在还深刻的记得他让我们一次又一次的“玩”鼠标训练的场景,因为他想让我的 3 岁大的妹妹也能对这个东西觉得好用 —— 她也确实那样觉得。

我们的 LISA 看起来就像这样。谁看到鼠标哪儿去了?CC BY-SA 4.0

在学校,我的数学的概念学得不错,但是基本计算却惨不忍睹。我的第一个学校的老师告诉我的家长和我,说我的数学很差,还说我很“笨”。虽然我在“常规的”数学项目中表现出色,能理解一个超出 7 岁孩子理解能力的逻辑谜题,但是我不能完成我们每天早上都要做的“练习”。她说我傻,这事我不会忘记。在那之后的十年我都没能相信自己的逻辑能力和算法的水平。不要低估你对孩子说的话的影响

在我玩了几年爸爸的电脑之后,他从 Apple 公司跳槽到了 EA,又跳到了 SGI,我又体验了他带回来的新玩意。这让我们认为我们家的房子是镇里最酷的,因为我们在车库里有一个能玩 Doom 的 SGI 的机器。我不会太多的编程,但是现在看来,从那些年里我学到对尝试新的科技毫不恐惧。同时,我的学文学和教育的母亲,成为了一个科技行业的作家,她向我证实了一个人的职业可以改变,而且一个做母亲的人可能同时驾驭一个科技职位。我不是说这对她来说很简单,但是她让我认为这件事看起来很简单。你可能会想这些早期的熏陶能把我带到科技行业,但是它没有。

本科时光

我想我要成为一个小学教师,我就读米尔斯学院就是想要做这个。但是后来我开始研究女性学,后来又研究神学,我这样做仅仅是由于我自己的一个渴求:我希望能理解人类的意志以及为更好的世界而努力。

同时,我也感受到了互联网的巨大力量。在 1991 年,拥有你自己的 UNIX 的账户,能够和全世界的人谈话,是很令人兴奋的事。我仅仅从在互联网中“玩”就学到了不少,从那些愿意回答我提出的问题的人那里学到的就更多了。这些学习对我的职业生涯的影响不亚于我在正规学校教育之中学到的知识。所有的信息都是有用的。我在一个女子学院度过了学习的关键时期,那时是一个杰出的女性在掌管计算机院。在那个宽松氛围的学院,我们不仅被允许,还被鼓励去尝试很多的道路(我们能接触到很多很多的科技,还有聪明人愿意帮助我们),我也确实那样做了。我十分感激当年的教育。在那个学院,我也了解了什么是极客文化。

之后我去了研究生院去学习女性主义神学,但是技术的气息已经渗入我的灵魂。当我意识到我不想成为一个教授或者一个学术伦理家时,我离开了学术圈,带着学校债务和一些想法回到了家。

新的开端

在 1995 年,我被互联网连接人们以及分享想法和信息的能力所震惊(直到现在仍是如此)。我想要进入这个行业。看起来我好像要“女承父业”,但是我不知道如何开始。我开始在硅谷做临时工,从 Sun 微系统公司得到我的第一个“真正”技术职位前尝试做了一些事情(为半导体数据公司写最基础的数据库,技术手册印发前的事务,备份工资单的存跟)。这些事很让人激动。(毕竟,我们是“.com”中的那个”点“)。

在 Sun 公司,我努力学习,尽可能多的尝试新事物。我的第一个工作是 网页化 HTMLing (啥?这居然是一个词!)白皮书,以及为 Beta 程序修改一些基础的服务工具(大多数是 Perl 写的)。后来我成为 Solaris beta 项目组中的项目经理,并在 Open Solaris 的 Beta 版运行中感受到了开源的力量。

在那里我做的最重要的事情就是学习。我发现在同样重视工程和教育的地方有一种气氛,在那里我的问题不再显得“傻”。我很庆幸我选对了导师和朋友。在决定休第二个孩子的产假之前,我上每一堂我能上的课程,读每一本我能读的书,尝试自学我在学校没有学习过的技术,商业以及项目管理方面的技能。

重回工作

当我准备重新工作时,Sun 公司已经不再是合适的地方了。所以,我整理了我的联系信息(网络帮到了我),利用我的沟通技能,最终获得了一个管理互联网门户的长期合同(2005 年时,一切皆门户),并且开始了解 CRM、发布产品的方式、本地化、网络等知识。我讲这么多背景,主要是我的尝试以及失败的经历,和我成功的经历同等重要,从中学到很多。我也认为我们需要这个方面的榜样。

从很多方面来看,我的职业生涯的第一部分是我的技术教育。时变势移 —— 我在帮助组织中的女性和其他弱势群体,但是并没有看出为一个技术行业的女性有多难。当时无疑我没有看到这个行业的缺陷,但是现在这个行业更加的厌恶女性,一点没有减少。

在这些事情之后,我还没有把自己当作一个标杆,或者一个高级技术人员。当我在父母圈子里认识的一位极客朋友鼓励我申请一个看起来定位十分模糊且技术性很强的开源的非盈利基础设施机构(互联网系统协会 ISC,它是广泛部署的开源 DNS 名称服务器 BIND 的缔造者,也是 13 台根域名服务器之一的运营商)的产品经理时,我很震惊。有很长一段时间,我都不知道他们为什么要雇佣我!我对 DNS、基础设备,以及协议的开发知之甚少,但是我再次遇到了老师,并再度开始飞速发展。我花时间出差,在关键流程攻关,搞清楚如何与高度国际化的团队合作,解决麻烦的问题,最重要的是,拥抱支持我们的开源和充满活力的社区。我几乎重新学了一切,通过试错的方式。我学习如何构思一个产品。如何通过建设开源社区,领导那些有这特定才能,技能和耐心的人,是他们给了产品价值。

成为别人的导师

当我在 ISC 工作时,我通过 TechWomen 项目 (一个让来自中东和北非的技术行业的女性到硅谷来接受教育的计划),我开始喜欢教学生以及支持那些技术女性,特别是在开源行业中奋斗的。也正是从这时起我开始相信自己的能力。我还需要学很多。

当我第一次读 TechWomen 关于导师的广告时,我根本不认为他们会约我面试!我有冒名顶替综合症。当他们邀请我成为第一批导师(以及以后六年每年的导师)时,我很震惊,但是现在我学会了相信这些都是我努力得到的待遇。冒名顶替综合症是真实的,但是随着时间过去我就慢慢名副其实了。

现在

最后,我不得不离开我在 ISC 的工作。幸运的是,我的工作以及我的价值让我进入了 Mozilla ,在这里我的努力和我的幸运让我在这里承担着重要的角色。现在,我是一名支持多样性与包容的高级项目经理。我致力于构建一个更多样化,更有包容性的 Mozilla ,站在之前的做同样事情的巨人的肩膀上,与最聪明友善的人们一起工作。我用我的激情来让人们找到贡献一个世界需要的互联网的有意义的方式:这让我兴奋了很久。当我爬上山峰,我能极目四望!

通过对组织和个人行为的干预来获取一种改变文化的新方式,这和我的人生轨迹有着不可思议的联系 —— 从我的早期的学术生涯,到职业生涯再到现在。每天都是一个新的挑战,我想这是我喜欢在科技行业工作,尤其是在开放互联网工作的理由。互联网天然的多元性是它最开始吸引我的原因,也是我还在寻求的 —— 所有人都有机会和获取资源的可能性,无论背景如何。榜样、导师、资源,以及最重要的,尊重,是不断发展技术和开源文化的必要组成部分,实现我相信它能实现的所有事 —— 包括给所有人平等的接触机会。

本文作者 Larissa Shapiro 是 Mozilla 的一名支持多样性与包容的高级项目经理。


via: https://opensource.com/life/16/5/my-open-source-story-larissa-shapiro

作者:Larissa Shapiro 译者:name1e5s 校对:jasminepeng

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

RHEL 是由红帽公司开发维护的开源 Linux 发行版,可以运行在所有的主流 CPU 架构中。一般来说,多数的 Linux 发行版都可以免费下载、安装和使用,但对于 RHEL,只有在购买了订阅之后,你才能下载和使用,否则只能获取到试用期为 30 天的评估版。

本文会告诉你如何在你的机器上安装最新的 RHEL 7.3,当然了,使用的是期限 30 天的评估版 ISO 镜像,请自行到 https://access.redhat.com/downloads 下载。

如果你更喜欢使用 CentOS,请移步 CentOS 7.3 安装指南

欲了解 RHEL 7.3 的新特性,请参考 版本更新日志

先决条件

本次安装是在支持 UEFI 的虚拟机固件上进行的。为了完成安装,你首先需要进入主板的 EFI 固件更改启动顺序为已刻录好 ISO 镜像的对应设备(DVD 或者 U 盘)。

如果是通过 USB 介质来安装,你需要确保这个可以启动的 USB 设备是用支持 UEFI 兼容的工具来创建的,比如 Rufus,它能将你的 USB 设备设置为 UEFI 固件所需要的 GPT 分区方案。

为了进入主板的 UEFI 固件设置面板,你需要在电脑初始化 POST ( 通电自检 Power on Self Test ) 的时候按下一个特殊键。

关于该设置需要用到特殊键,你可以向主板厂商进行咨询获取。通常来说,在笔记本上,可能是这些键:F2、F9、F10、F11 或者 F12,也可能是 Fn 与这些键的组合。

此外,更改 UEFI 启动顺序前,你要确保 快速启动选项 QuickBoot/FastBoot 安全启动选项 Secure Boot 处于关闭状态,这样才能在 EFI 固件中运行 RHEL。

有一些 UEFI 固件主板模型有这样一个选项,它让你能够以传统的 BIOS 或者 EFI CSM ( 兼容支持模块 Compatibility Support Module ) 两种模式来安装操作系统,其中 CSM 是主板固件中一个用来模拟 BIOS 环境的模块。这种类型的安装需要 U 盘以 MBR 而非 GPT 来进行分区。

此外,一旦在你的 UEFI 机器中以这两种模式之一成功安装好 RHEL 或者类似的 OS,那么安装好的系统就必须以你安装时使用的模式来运行。而且,你也不能够从 UEFI 模式变更到传统的 BIOS 模式,反之亦然。强行变更这两种模式会让你的系统变得不稳定、无法启动,同时还需要重新安装系统。

RHEL 7.3 安装指南

1、 首先,下载并使用合适的工具刻录 RHEL 7.3 ISO 镜像到 DVD 或者创建一个可启动的 U 盘。

给机器加电启动,把 DVD/U 盘放入合适驱动器中,并根据你的 UEFI/BIOS 类型,按下特定的启动键变更启动顺序来启动安装介质。

当安装介质被检测到之后,它会启动到 RHEL 的 grub 菜单。选择“Install red hat Enterprise Linux 7.3” 并按回车继续。

RHEL 7.3 Boot Menu

RHEL 7.3 启动菜单

2、 之后屏幕就会显示 RHEL 7.3 欢迎界面。该界面选择安装过程中使用的语言 (LCTT 译注:这里选的只是安装过程中使用的语言,之后的安装中才会进行最终使用的系统语言环境) ,然后按回车到下一界面。

Select RHEL 7.3 Language

选择 RHEL 7.3 安装过程使用的语言

3、 下一界面中显示的是安装 RHEL 时你需要设置的所有事项的总体概览。首先点击 日期和时间 DATE & TIME 并在地图中选择你的设备所在地区。

点击最上面的 完成 Done 按钮来保持你的设置,并进行下一步系统设置。

RHEL 7.3 Installation Summary

RHEL 7.3 安装概览

Select RHEL 7.3 Date and Time

选择 RHEL 7.3 日期和时间

4、 接下来,就是配置你的 键盘 keyboard 布局并再次点击 完成 Done 按钮返回安装主菜单。

Configure Keyboard Layout

配置键盘布局

5、 紧接着,选择你使用的 语言支持 language support ,并点击 完成 Done ,然后进行下一步。

Choose Language Support

选择语言支持

6、 安装源 Installation Source 保持默认就好,因为本例中我们使用本地安装 (DVD/USB 镜像),然后进行 软件集选择 Software Selection

此处你可以选择 基本环境 base environment 附件 Add-ons 。由于 RHEL 常用作 Linux 服务器, 最小化安装 Minimal Installation 对于系统管理员来说则是最佳选择。

对于生产环境来说,这也是官方极力推荐的安装方式,因为我们只需要在 OS 中安装极少量软件就好了。

这也意味着高安全性、可伸缩性以及占用极少的磁盘空间。同时,通过购买 订阅 subscription 或使用 DVD 镜像源,这里列出的的其它环境和附件都是可以在命令行中很容易地安装。

RHEL 7.3 Software Selection

RHEL 7.3 软件集选择

7、 万一你想要安装预定义的基本环境之一,比方说 Web 服务器、文件 & 打印服务器、架构服务器、虚拟化主机、带 GUI 的服务器等,直接点击选择它们,然后在右边的框选择附件,最后点击 完成 Done 结束这一步操作即可。

Select Server with GUI on RHEL 7.3

选择带 GUI 的服务器

8、 在接下来点击 安装目标 Installation Destination ,这个步骤要求你为将要安装的系统进行分区、格式化文件系统并设置挂载点。

最安全的做法就是让安装器自动配置硬盘分区,这样会创建 Linux 系统所有需要用到的基本分区 (在 LVM 中创建 /boot/boot/efi/(root) 以及 swap 等分区),并格式化为 RHEL 7.3 默认的 XFS 文件系统。

请记住:如果安装过程是从 UEFI 固件中启动的,那么硬盘的分区表则是 GPT 分区方案。否则,如果你以 CSM 或传统 BIOS 来启动,硬盘的分区表则使用老旧的 MBR 分区方案。

假如不喜欢自动分区,你也可以选择配置你的硬盘分区表,手动创建自己需要的分区。

不论如何,本文推荐你选择自动配置分区。最后点击 完成 Done 继续下一步。

Choose RHEL 7.3 Installation Drive

选择 RHEL 7.3 的安装硬盘

9、 下一步是禁用 Kdump 服务,然后配置网络。

Disable Kdump Feature

禁用 Kdump 特性

10、 在 网络和主机名 Network and Hostname 中,设置你机器使用的主机名和一个描述性名称,同时拖动 Ethernet 开关按钮到 ON 来启用网络功能。

如果你在自己的网络中有一个 DHCP 服务器,那么网络 IP 设置会自动获取和使用。

Configure Network Hostname

配置网络主机名称

11、 如果要为网络接口设置静态 IP,点击 配置 Configure 按钮,然后手动设置 IP,如下方截图所示。

设置好网络接口的 IP 地址之后,点击 保存 Save 按钮,最后切换一下网络接口的 OFFON 状态已应用刚刚设置的静态 IP。

最后,点击 完成 Done 按钮返回到安装设置主界面。

Configure Network IP Address

配置网络 IP 地址

12、 最后,在安装配置主界面需要你配置的最后一项就是 安全策略配置 Security Policy 文件了。选择并应用 默认的 Default 安全策略,然后点击 完成 Done 返回主界面。

回顾所有的安装设置项并点击 开始安装 Begin Installation 按钮来启动安装过程,这个过程启动之后,你就没有办法停止它了。

Apply Security Policy for RHEL 7.3

为 RHEL 7.3 启用安全策略

Begin Installation of RHEL 7.3

开始安装 RHEL 7.3

13、 在安装过程中,你的显示器会出现 用户设置 User Settings 。首先点击 Root 密码 Root Password 为 root 账户设置一个高强度密码。

Configure User Settings

配置用户选项

Set Root Account Password

设置 Root 账户密码

14、 最后,创建一个新用户,通过选中 使该用户成为管理员 Make this user administrator 为新建的用户授权 root 权限。同时还要为这个账户设置一个高强度密码,点击 完成 Done 返回用户设置菜单,就可以等待安装过程完成了。

Create New User Account

创建新用户账户

RHEL 7.3 Installation Process

RHEL 7.3 安装过程

15、 安装过程结束并成功安装后,弹出或拔掉 DVD/USB 设备,重启机器。

RHEL 7.3 Installation Complete

RHEL 7.3 安装完成

Booting Up RHEL 7.3

启动 RHEL 7.3

至此,安装完成。为了后期一直使用 RHEL,你需要从 Red Hat 消费者门户购买一个订阅,然后在命令行 使用订阅管理器来注册你的 RHEL 系统


作者简介:

Matei Cezar

我是一个终日沉溺于电脑的家伙,对开源的 Linux 软件非常着迷,有着 4 年 Linux 桌面发行版、服务器和 bash 编程经验。


via: http://www.tecmint.com/red-hat-enterprise-linux-7-3-installation-guide/

作者:Matei Cezar 译者:GHLandy 校对:wxy

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