分类 技术 下的文章

重新利用过时的计算机来浏览互联网并在大屏电视上观看视频。

我第一次尝试搭建一台“娱乐电脑”是在 20 世纪 90 年代后期,使用了一台带 Trident ProVidia 9685 PCI 显卡的普通旧台式电脑。我使用了所谓的“电视输出”卡,它有一个额外的输出可以连接到标准电视端子上。屏幕显示看起来不太好,而且没有音频输出。并且外观很丑:有一条 S-Video 线穿过了客厅地板连接到我的 19 英寸 Sony Trinitron CRT 电视机上。

我在 Linux 和 Windows 98 上得到了同样令人遗憾的结果。在和那些看起来不对劲的系统挣扎之后,我放弃了几年。值得庆幸的是,如今的 HDMI 拥有更好的性能和标准化的分辨率,这使得廉价的家庭媒体中心成为现实。

我的新媒体中心娱乐电脑实际上是我的旧 Ubuntu Linux 桌面,最近我用更快的电脑替换了它。这台电脑在工作中太慢,但是它的 3.4GHz 的 AMD Phenom II X4 965 处理器和 8GB 的 RAM 足以满足一般浏览和视频流的要求。

以下是我让旧系统在新角色中发挥最佳性能所采取的步骤。

硬件

首先,我移除了不必要的设备,包括读卡器、硬盘驱动器、DVD 驱动器和后置 USB 卡,我添加了一块 PCI-Express 无线网卡。我将 Ubuntu 安装到单个固态硬盘 (SSD) 上,这可以切实提高任何旧系统的性能。

BIOS

在 BIOS 中,我禁用了所有未使用的设备,例如软盘和 IDE 驱动器控制器。我禁用了板载显卡,因为我安装了带 HDMI 输出的 NVidia GeForce GTX 650 PCI Express 显卡。我还禁用了板载声卡,因为 NVidia 显卡芯片组提供音频。

音频

Nvidia GeForce GTX 音频设备在 GNOME 控制中心的声音设置中被显示为 GK107 HDMI Audio Controller,因此单条 HDMI 线缆可同时处理音频和视频。无需将音频线连接到板载声卡的输出插孔。

 title=

GNOME 音频设置中的 HDMI 音频控制器。

键盘和鼠标

我有罗技的无线键盘和鼠标。当我安装它们时,我插入了两个外置 USB 接收器,它们可以使用,但我经常遇到信号反应问题。接着我发现其中一个被标记为联合接收器,这意味着它可以自己处理多个罗技输入设备。罗技不提供在 Linux 中配置联合接收器的软件。但幸运的是,有个开源程序 Solaar 能够做到。使用单个接收器解决了我的输入性能问题。

 title=

Solaar 联合接收器界面。

视频

最初很难在我的 47 英寸平板电视上阅读文字,所以我在 Universal Access 下启用了“大文字”。我下载了一些与电视 1920x1080 分辨率相匹配的壁纸,这看起来很棒!

最后处理

我需要在电脑的冷却需求和我对不受阻碍的娱乐的渴望之间取得平衡。由于这是一台标准的 ATX 微型塔式计算机,我确保我有足够的风扇转速,以及在 BIOS 中精心配置过的温度以减少噪音。我还把电脑放在我的娱乐控制台后面,以进一步减少风扇噪音,但同时我可以按到电源按钮。

最后得到一台简单的、没有巨大噪音的机器,而且只使用了两根线缆:交流电源线和 HDMI。它应该能够运行任何主流或专门的媒体中心 Linux 发行版。我不期望去玩高端的游戏,因为这可能需要更多的处理能力。

 title=

Ubuntu Linux 的关于页面。

 title=

在大屏幕上测试 YouTube 视频。

我还没安装像 Kodi 这样专门的媒体中心发行版。截至目前,它运行的是 Ubuntu Linux 18.04.1 LTS,而且很稳定。

这是一个有趣的挑战,可以充分利用我已经拥有的东西,而不是购买新的硬件。这只是开源软件的一个好处。最终,我可能会用一个更小,更安静的带有媒体中心的系统或其他小机顶盒替换它,但是现在,它很好地满足了我的需求。


via: https://opensource.com/article/18/11/old-linux-desktop-new-home-media-center

作者:Alan Formy-Duval 选题:lujun9972 译者:geekpi 校对:wxy

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

你是否想知道自己的 Linux 系统正常运行了多长时间而没有宕机?系统是什么时候启动的?

Linux 上有多个查看服务器/系统运行时间的命令,大多数用户喜欢使用标准并且很有名的 uptime 命令获取这些具体的信息。

服务器的运行时间对一些用户来说不那么重要,但是当服务器运行诸如在线商城 门户 portal 、网上银行门户等 关键任务应用 mission-critical applications 时,它对于 服务器管理员 server adminstrators 来说就至关重要。

它必须做到零宕机,因为一旦停机就会影响到数百万用户。

正如我所说,许多命令都可以让用户看到 Linux 服务器的运行时间。在这篇教程里我会教你如何使用下面 11 种方式来查看。

正常运行时间 uptime 指的是服务器自从上次关闭或重启以来经过的时间。

uptime 命令获取 /proc 文件中的详细信息并输出正常运行时间,而 /proc 文件并不适合人直接看。

以下这些命令会输出系统运行和启动的时间。也会显示一些额外的信息。

方法 1:使用 uptime 命令

uptime 命令会告诉你系统运行了多长时间。它会用一行显示以下信息。

当前时间、系统运行时间、当前登录用户的数量、过去 1 分钟/5 分钟/15 分钟系统负载的均值。

# uptime

 08:34:29 up 21 days,  5:46,  1 user,  load average: 0.06, 0.04, 0.00

方法 2:使用 w 命令

w 命令为每个登录进系统的用户,每个用户当前所做的事情,所有活动的负载对计算机的影响提供了一个快速的概要。这个单一命令结合了多个 Unix 程序:whouptime,和 ps -a 的结果。

# w

 08:35:14 up 21 days,  5:47,  1 user,  load average: 0.26, 0.09, 0.02
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/1    103.5.134.167    08:34    0.00s  0.01s  0.00s w

方法 3:使用 top 命令

top 命令是 Linux 上监视实时系统进程的基础命令之一。它显示系统信息和运行进程的信息,例如正常运行时间、平均负载、运行的任务、登录用户数量、CPU 数量 & CPU 利用率、内存 & 交换空间信息。

推荐阅读:TOP 命令监视服务器性能的例子

# top -c

top - 08:36:01 up 21 days,  5:48,  1 user,  load average: 0.12, 0.08, 0.02
Tasks:  98 total,   1 running,  97 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1872888k total,  1454644k used,   418244k free,   175804k buffers
Swap:  2097148k total,        0k used,  2097148k free,  1098140k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      20   0 19340 1492 1172 S  0.0  0.1   0:01.04 /sbin/init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 [kthreadd]
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 [migration/0]
    4 root      20   0     0    0    0 S  0.0  0.0   0:34.32 [ksoftirqd/0]
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 [stopper/0]

方法 4:使用 who 命令

who 命令列出当前登录进计算机的用户。who 命令与 w 命令类似,但后者还包含额外的数据和统计信息。

# who -b
system boot 2018-04-12 02:48

方法 5:使用 last 命令

last 命令列出最近登录过的用户。last 回溯 /var/log/wtmp 文件并显示自从文件创建后登录进(出)的用户。

# last reboot -F | head -1 | awk '{print $5,$6,$7,$8,$9}'
Thu Apr 12 02:48:04 2018

方法 6:使用 /proc/uptime 文件

这个文件中包含系统上次启动后运行时间的详细信息。/proc/uptime 的输出相当精简。

第一个数字是系统自从启动的总秒数。第二个数字是总时间中系统空闲所花费的时间,以秒为单位。

# cat /proc/uptime
1835457.68 1809207.16

方法 7:使用 tuptime 命令

tuptime 是一个汇报系统运行时间的工具,输出历史信息并作以统计,保留重启之间的数据。和 uptime 命令很像,但输出更有意思一些。

$ tuptime

方法 8:使用 htop 命令

htop 是运行在 Linux 上的一个交互式进程查看器,是 Hisham 使用 ncurses 库开发的。htop 比起 top 有很多的特性和选项。

推荐阅读: 使用 Htop 命令监控系统资源

# htop

  CPU[|                         0.5%]     Tasks: 48, 5 thr; 1 running
  Mem[|||||||||||||||     165/1828MB]     Load average: 0.10 0.05 0.01
  Swp[                      0/2047MB]     Uptime: 21 days, 05:52:35

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
29166 root       20   0  110M  2484  1240 R  0.0  0.1  0:00.03 htop
29580 root       20   0 11464  3500  1032 S  0.0  0.2 55:15.97 /bin/sh ./OSWatcher.sh 10 1
    1 root       20   0 19340  1492  1172 S  0.0  0.1  0:01.04 /sbin/init
  486 root       16  -4 10780   900   348 S  0.0  0.0  0:00.07 /sbin/udevd -d
  748 root       18  -2 10780   932   360 S  0.0  0.0  0:00.00 /sbin/udevd -d

方法 9:使用 glances 命令

glances 是一个跨平台的基于 curses 库的监控工具,它是使用 python 编写的。可以说它非常强大,仅用一点空间就能获得很多信息。它使用 psutil 库从系统中获取信息。

glances 可以监控 CPU、内存、负载、进程、网络接口、磁盘 I/O、 磁盘阵列 RAID 、传感器、文件系统(与文件夹)、容器、监视器、Alert 日志、系统信息、运行时间、 快速查看 Quicklook (CPU,内存、负载)等。

推荐阅读: Glances (集大成)– Linux 上高级的实时系统运行监控工具

glances

ubuntu (Ubuntu 17.10 64bit / Linux 4.13.0-37-generic) - IP 192.168.1.6/24                Uptime: 21 days, 05:55:15

CPU  [|||||||||||||||||||||    90.6%]   CPU -    90.6%  nice:     0.0%  ctx_sw:    4K      MEM \   78.4%  active:     942M      SWAP -    5.9%      LOAD    2-core
MEM  [||||||||||||||||         78.0%]   user:    55.1%  irq:      0.0%  inter:   1797      total:  1.95G  inactive:   562M      total:   12.4G      1 min:    4.35
SWAP [|                         5.9%]   system:  32.4%  iowait:   1.8%  sw_int:   897      used:   1.53G  buffers:   14.8M      used:     749M      5 min:    4.38
                                        idle:     7.6%  steal:    0.0%                     free:    431M  cached:     273M      free:    11.7G      15 min:   3.38

NETWORK     Rx/s   Tx/s   TASKS 211 (735 thr), 4 run, 207 slp, 0 oth sorted automatically by memory_percent, flat view
docker0       0b   232b
enp0s3      12Kb    4Kb   Systemd          7    Services loaded: 197 active: 196 failed: 1 
lo          616b   616b
_h478e48e     0b   232b     CPU%  MEM%  VIRT   RES   PID USER        NI S     TIME+   R/s   W/s Command 
                            63.8  18.9 2.33G  377M  2536 daygeek      0 R   5:57.78     0     0 /usr/lib/firefox/firefox -contentproc -childID 1 -isForBrowser -intPrefs 6:50|7:-1|19:0|34:1000|42:20|43:5|44:10|51
DefaultGateway     83ms     78.5  10.9 3.46G  217M  2039 daygeek      0 S  21:07.46     0     0 /usr/bin/gnome-shell
                             8.5  10.1 2.32G  201M  2464 daygeek      0 S   8:45.69     0     0 /usr/lib/firefox/firefox -new-window
DISK I/O     R/s    W/s      1.1   8.5 2.19G  170M  2653 daygeek      0 S   2:56.29     0     0 /usr/lib/firefox/firefox -contentproc -childID 4 -isForBrowser -intPrefs 6:50|7:-1|19:0|34:1000|42:20|43:5|44:10|51
dm-0           0      0      1.7   7.2 2.15G  143M  2880 daygeek      0 S   7:10.46     0     0 /usr/lib/firefox/firefox -contentproc -childID 6 -isForBrowser -intPrefs 6:50|7:-1|19:0|34:1000|42:20|43:5|44:10|51
sda1       9.46M    12K      0.0   4.9 1.78G 97.2M  6125 daygeek      0 S   1:36.57     0     0 /usr/lib/firefox/firefox -contentproc -childID 7 -isForBrowser -intPrefs 6:50|7:-1|19:0|34:1000|42:20|43:5|44:10|51

方法 10:使用 stat 命令

stat 命令显示指定文件或文件系统的详细状态。

# stat /var/log/dmesg | grep Modify
Modify: 2018-04-12 02:48:04.027999943 -0400

方法 11:使用 procinfo 命令

procinfo/proc 文件夹下收集一些系统数据并将其很好的格式化输出在标准输出设备上。

# procinfo | grep Bootup
Bootup: Fri Apr 20 19:40:14 2018 Load average: 0.16 0.05 0.06 1/138 16615

via: https://www.2daygeek.com/11-methods-to-find-check-system-server-uptime-in-linux/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:LuuMing 校对:wxy

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

Beamer 将 LaTeX 强大的排版功能和生态系统带进创建幻灯片中。

Beamer 是用于生成幻灯片的 LaTeX 包。它最棒的功能之一是它可以利用 LaTeX 强大的排版系统和其生态系统中的所有其他软件包。例如,我经常在包含代码的 Beamer 演示文稿中使用 LaTeX 的 listings 包。

创建演示文稿

要创建一个 Beamer 文档,输入:

\documentclass{beamer}

与任何其他 LaTeX 文档一样,添加你要使用的任何包。例如,要使用 listings 包,请输入:

\usepackage{listings}

将所有内容放在 document 环境中:

\begin{document}

Beamer 文档通常时是一系列的 frame 环境。包含代码的 frame 应该被标记为 fragile

\begin{frame}[fragile]

使用标题开始你的 frame

\frametitle{Function to Do Stuff}

开始演示前测试你的代码

世上最糟糕的感受之一你在演讲中说到代码时,突然发现了一个 bug —— 也许是拼错了关键词或者漏掉了括号。

解决方法之一就是测试演示的代码。在多数演示环境中,这意味着创建一个单独的文件、编写测试接着拷贝和粘贴。

然而,在 Beamer 中有一种更好的方法。想象一下,你有一个名为 do_stuff.py 的文件,其中包含代码。你可以在第二个文件中编写 do_stuff.py 代码的测试,你可以将其命名为 test_do_stuff.py,并且可以使用 pytest 测试。但是,do_stuff.py 中的大多数行都缺乏教学价值,比如定义辅助函数。

要简化你受众看到的东西,你可在演示文稿中只导入你要讨论的行到 frame 中:

\lstinputlisting[
    language=Python,
    firstline=8,
    lastline=15
]{do_stuff.py}

由于你会对这几行(从 8 到 15)进行讨论,因此幻灯片上不需要任何其他内容。结束 frame

\end{frame}

在下一张幻灯片中,你想展示刚才的 do_stuff() 函数的用法示例:

\begin{frame}[fragile]
\frametitle{Calling Function to Do Stuff}
\lstinputlisting[
    language=Python,
    firstline=17,
    lastline=19
]{do_stuff.py}
\end{frame}

你使用相同的文件,但这次显示调用该函数的行。最后,结束 document

\end{document}

假设你在 do_stuff.py 中有一个合适的 Python 文件,这将生成一个含有 2 页的幻灯片。

Beamer 还支持必要的功能如渐进式演示,每次给观众展示一部分以免受到前面的打扰。在行中放入 \pause 会将页面分成不同的部分:

\begin{frame}
Remember:
\begin{itemize}
\item This will show up on the first slide. \pause
\item This will show up on the
      second slide, as well as the preceding point. \pause
\item Finally, on the third slide,
       all three bullets will show up.
\end{frame}

创建讲义

Beamer 中我最喜欢的功能是可以用 \documentclass[ignorenonframetext]{beamer} 设置忽略 frame 外的所有内容。当我准备演示文稿时,我离开顶部(声明文档类的位置)并自动生成它的两个版本:我的演示稿使用 Beamer 忽略任何 frame 之外的所有文本,另一个含有类似这样的头:

\documentclass{article}
\usepackage{beamerarticle}

这会生成一份讲义:一份含有所有 frame 和它们之间文字的 PDF。

当会议组织者要求我发布我的幻灯片时,我会包含原始幻灯片作为参考,但我希望人们拿到的是讲义,它包含了所有我不想在幻灯片上写的解释部分。

在创建幻灯片时,人们经常会考虑是为演讲优化讲稿还是为之后想要阅读它的人们优化。幸运的是,Beamer 提供了两全其美的办法。


via: https://opensource.com/article/19/1/create-presentations-beamer

作者:Moshe Zadka 选题:lujun9972 译者:geekpi 校对:wxy

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

不是所有的程序都可以在官方或者第三方库中找到,因此你不能使用常规的包管理来安装它们。有时你不得不从源代码中手动构建这些程序。就如你已经知道的一样,当你从源代码中安装一个程序的时候,这个软件包所包含的文件将会复制到本地的多个位置,例如 /usr/local/bin/usr/local/etc/。如果从源代码中安装的程序没有内置的卸载程序,当你不再需要这个程序的时候,卸载它就会很麻烦。你可能会花费双倍(甚至更多)的时间找出这些文件然后手动删除它们。我以前一直是这样做的,直到我发现了 GNU Stow。谢天谢地,Stow 有一个很棒的方法可以轻松管理从源代码安装的程序。

引用官方网站里的一段介绍,

GNU Stow 是一个符号链接归集管理器,它可以收集文件系统上不同目录中的不同软件和/或数据包,使它们看起来像是一个整体。

简单来说,Stow 帮助你把这些程序文件以一种容易管理的方式组织在了一起。在这个方法中,文件将不会被复制到多个位置。所有的这些文件都会被保存在一个特定的文件夹中,通常是以程序名命名的,然后 Stow 会在一个合适的位置为所有的程序文件创建符号连接。比如 /usr/local/bin 中会包含 /usr/local/stow/vim/bin/usr/local/stow/python/bin 中文件的符号链接。并且同样递归地用于其他的任何的子目录,例如 .../share.../man,等等。在这篇教程中,我将会举例教你如何轻松地使用 Stow 管理从源中安装的程序。

安装 GNU Stow

GNU Stow 在流行 Linux 操作系统的默认库中都可用。

在 Arch Linux 及它的衍生版本中,运行下面的命令安装 Stow。

$ sudo pacman -S stow

在 Debian、Ubuntu、Linux Mint 上:

$ sudo apt install stow

在 Fedora 上:

$ sudo dnf install stow

在 RHEL/CentOS 上:

$ sudo yum install epel-release
$ sudo yum install stow

在 Linux 上轻松移除从源代码安装的程序

就像我之前提到的,所有包的程序文件都将被保存在位于 /usr/local/stow/ 的一个根文件夹。在这个根文件夹或者父目录之下,每个包都将保存在对应的子目录中。例如,如果我们从源代码中安装了 Vim 编辑器,所有关联到 Vim 的程序文件和目录都将保存在 /usr/local/stow/vim 文件夹之下。如果你从源代码中安装了 Python,所有关联到 python 的文件都会保存在 /usr/local/stow/python 之下。

我现在从源代码中来安装一个叫做 hello 的程序。

首先下载 hello 程序的压缩包。

$ wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz

使用下面的命令解压压缩包:

$ tar -zxvf hello-2.10.tar.gz

上面的命令将会在当前工作目录下创建一个叫做 hello-2.10 的目录,并且提取压缩包中的所有内容到其中去。

切换到这个目录当中:

$ cd hello-2.10/

运行下面的命令,并且添加 -prefix 选项。

$ ./configure --prefix=/usr/local/stow/hello

上面的命令将会保存构建文件到一个指定位置,在这个例子中是 /usr/local/stow/hello

最后,使用下面的命令构建并安装 hello 这个程序:

$ make
$ sudo make install

就这样。hello 这个程序就已经安装在 /usr/local/stow/hello/ 这个位置了。你可以使用下面的 ls 命令确认一下。

$ ls /usr/local/stow/hello/
bin share

最后,进入 /usr/local/stow/ 目录,运行下面的命令来生成必要的符号链接。

$ cd /usr/local/stow/
$ sudo stow hello

大功告成!

刚才那一步是将包含在 hello 这个程序中的所有文件或者目录创建了链接到 /usr/local/ 目录中。换一种说法, /usr/local/stow/hello/bin 链接到 /usr/local/share,以及 /usr/local/stow/hello/share/man 链接到 /usr/local/share,还有 /usr/local/stow/hello/share/man 链接到 /usr/local/share/man

你可以使用 ls 命令来确认一下:

$ ls /usr/local/bin/
hello

可以使用下面的命令来确认 hello 这个程序是否可以正常工作了:

$ hello
Hello, world!

很好,它已经开始工作了!!

类似地,你可以像上面描述的那样安装程序到它对应的子目录下。

下面是 Stow 根目录包含的内容:

$ tree /usr/local/stow/

看,hello 这个程序已经安装在 /usr/local/stow/hello/ 下。同样地,所有的包都将保存在它们对应的目录之下。

下面进入主要环节,移除 hello 这个程序。首先进入 /usr/local/stow/ 目录:

$ cd /usr/local/stow/

然后运行下面的命令:

$ sudo stow --delete hello

hello 这个程序就会被移除了。你可以使用下面的命令确认它是否真的被移除了:

$ hello
-bash: /usr/local/bin/hello: No such file or directory

看, Hello 已经被移除了!

请注意 Stow 仅仅只移除了符号链接。所有与 hello 这个程序相关的文件或者目录还保存在 /usr/local/stow/hello 目录下。所以你无需再次下载源文件就可以再次安装 hello 这个程序。如果你不再需要它了,直接删除这个文件夹即可。

$ sudo rm -fr /usr/local/stow/hello/

想了解更多 Stow 的细节,请参阅 man 手册。

$ man stow

Stow 可以像安装程序一样轻松地帮你移除它。如果你想知道如何高效的管理很多从源代码中安装的程序,GNU Stow 就是一个使得这个任务更加轻松的一个选择,尝试一下,你一定不会失望的。

这就是所有的内容了,希望对你有所帮助。还有更多干活即将到来,可以期待一下的!

祝近祺!


via: https://www.ostechnix.com/an-easy-way-to-remove-programs-installed-from-source-in-linux/

作者:SK 选题:lujun9972 译者:dianbanjiu 校对:wxy

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

在这个系列的第一篇中,学习一下管理笔记本电脑和台式机配置的基础内容。

配置管理是服务器管理和 DevOps 的一个非常重要的方面。“ 基础架构即代码 infrastructure as code ”方法可以轻松地以各种配置部署服务器,并动态扩展组织的资源以满足用户需求。但是,对于希望自动设置自己的笔记本电脑和台式机(工作站)的个人管理员的关注较少。

在本系列中,我将向你展示如何通过 Ansible 自动化你的工作站设置,如果你想要或需要重新安装你的机器,这可以让你轻松恢复整个配置。此外,如果你有多个工作站,则可以使用相同的方法在每个工作站上进行相同的配置。在第一篇文章中,我们将为个人或工作计算机设置基本的配置管理,并为本系列的其余部分奠定基础。到本文结束时,你将会因此得到一个可以工作的环境。本系列之后的每篇文章都会自动化更多内容并增加复杂性。

为什么用 Ansible?

有许多配置管理解决方案,包括 Salt Stack、Chef 和 Puppet。我更喜欢 Ansible,因为它在资源利用方面更轻量级,语法更容易阅读,并且如果正确使用它可以彻底改变你的配置管理。Ansible 的轻量级特性与这个主题特别相关,因为我们可能不希望运行一整台服务器而只是为了自动化我们的笔记本电脑和台式机的设置。一般我们总是想要快一些;我们可以使用某些东西来快速启动和运行,以在我们需要恢复的工作站或在多台机器之间同步我们的配置。我使用 Ansible 的具体方法(我将在本文中演示)非常适用于此,而不需要维护服务器。你只需下载配置并运行它。

我的方法

通常,Ansible 运行于中央服务器。它使用一个 库存清单 inventory 文件,该文件是一个文本文件,其中包含我们希望 Ansible 管理的所有主机及其 IP 地址或域名的列表。这对于静态环境非常有用,但对于工作站来说并不理想。原因是我们真的不知道我们的工作站在某一时刻的状态。也许我关闭了台式电脑,或者笔记本电脑可能会被挂起并放在我的包里。在任何一种情况下,Ansible 服务器都会抱怨,因为如果它们处于脱机状态,Ansible 就无法联系到我的机器。我们更需要的是按需方式,我们通过利用 ansible-pull 来实现这一目标。ansible-pull 命令是 Ansible 的一个命令,允许你从 Git 仓库下载配置并立即应用它。你不需要维护服务器或库存清单;你只需运行 ansible-pull 命令,给它一个 Git 仓库 URL,它将为你完成剩下的工作。

起步

首先,在要管理的计算机上安装 Ansible。有一个问题是许多发行版都附带了旧版本的 Ansible。根据经验,你肯定希望获得最新版本。Ansible 中经常引入新功能,如果你运行的是旧版本,则你在网上找到的示例语法可能无法正常运行,因为它使用的功能未在你安装的版本中实现。甚至发布的小版本都有很多新功能。其中一个例子是 dconf 模块,它是从 Ansible 2.4 开始的新功能。如果你尝试使用使用此模块的语法,除非你使用 2.4 或更新版本,否则会失败。在 Ubuntu 及其衍生产品中,我们可以使用官方个人包存档(PPA)轻松安装最新版本的 Ansible。以下命令可以解决这个问题:

sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible

如果你没有使用 Ubuntu,请参阅 Ansible 的文档 了解如何为你的平台获取它。

接下来,我们需要一个 Git 仓库来保存我们的配置。满足此要求的最简单方法是在 GitHub 上创建一个空的仓库,或者如果有的话,也可以使用自己的 Git 服务器。为了简单起见,我假设你正在使用 GitHub,因此如果你正在使用其他仓库,请相应调整命令。在 GitHub 中创建一个仓库;你最终会得到一个与此类似的仓库 URL:

[email protected]:<your_user_name>/ansible.git

将该仓库克隆到你的本地工作目录(忽略任何抱怨仓库为空的消息):

git clone [email protected]:<your_user_name>/ansible.git

现在我们有了一个可以使用的空仓库。将你的工作目录切换到仓库(例如 cd ./ansible),并在你喜欢的文本编辑器中创建名为 local.yml 的文件。将以下配置放在该文件中:

- hosts: localhost
  become: true
  tasks:
  - name: Install htop
    apt: name=htop

你刚刚创建的文件被称为 剧本 playbook ,安装 htop 的指令(我任意选择的一个包作为例子)被称为 动作 play 。剧本本身是一个 YAML 格式的文件,它是一种易于阅读的标记语言。对 YAML 的完整讲述超出了本文的范围,但你无需专业理解即可熟练使用 Ansible。该配置易于阅读;只需查看此文件,你就可以轻松理解我们正在安装的 htop 软件包。要注意一下最后一行的 apt 模块,它只适用于基于 Debian 的系统。如果你使用的是 Red Hat 平台,你可以将其更改为 yum 而不是 apt,或者如果你正在使用 Fedora,则将其更改为 dnfname 行只是提供有关我们任务的信息,并将显示在输出中。因此,你需要确保名称具有描述性,以便在需要对多个动作进行故障排除时很容易找到。

接下来,让我们将新文件提交到我们的仓库:

git add local.yml
git commit -m "initial commit"
git push origin master

现在我们的新剧本应该出现在我们的 GitHub 上的仓库中。我们可以使用以下命令应用我们创建的剧本:

sudo ansible-pull -U https://github.com/<your_user_name>/ansible.git

如果执行正确,htop包应该会安装在你的系统上。你可能会在开头附近看到一些警告,抱怨缺少库存清单文件。这很好,因为我们没有使用库存清单文件(我们也不需要这样做)。在输出结束时,它将概述它做的内容。如果 htop 安装正确,你应该在输出的最后一行看到 changed = 1

它是如何工作的呢?ansible-pull 命令使用了 -U 选项,它需要一个仓库 URL。出于安全考虑,我给它提供了仓库 URL 的 https 版本,因为我不希望任何主机对仓库具有写访问权限(默认情况下 https 是只读的)。local.yml 是预设的剧本名称,因此我们不需要为剧本提供文件名:如果它在仓库的根目录中找到名为 local.yml 的剧本,它将自动运行它。接下来,我们在命令前面使用了 sudo,因为我们正在修改系统。

让我们继续为我们的剧本添加更多的包。我将添加两个包,使它看起来像这样:

- hosts: localhost
  become: true
  tasks:
  - name: Install htop
    apt: name=htop

  - name: Install mc
    apt: name=mc
   
  - name: Install tmux
    apt: name=tmux

我添加了更多的动作(任务)来安装另外两个包,mctmux。在此剧本中选择安装的哪些软件包并不重要;我只是随意挑选这些。你应该安装你希望所有的系统都具有的软件包。唯一需要注意的是,在你分发前,你必须知道那个包存在于软件仓库中。

在我们提交并应用这个更新的剧本之前,我们应该整理一下它。它可以很好地工作,但(说实话)它看起来有点混乱。让我们尝试在一个动作中安装所有三个包。用下面这个替换你的 local.yml 的内容:

- hosts: localhost
  become: true
  tasks:
  - name: Install packages
    apt: name={{item}}
    with_items:
      - htop
      - mc
      - tmux

现在看起来更干净、更有效率了。我们使用 with_items 将我们的包列表合并为一个动作。如果我们想要添加其他包,我们只需添加另一个带有连字符和包名称的行。可以把 with_items 看做类似于 for 循环。我们列出的每个包都将安装。

将我们的新更改提交回仓库:

git add local.yml
git commit -m "added additional packages, cleaned up formatting"
git push origin master

现在我们可以运行我们的剧本以接受新的新配置:

sudo ansible-pull -U https://github.com/<your_user_name>/ansible.git

不可否认,这个例子还没有做多少事情;它所做的就是安装一些软件包。你可以使用包管理器更快地安装这些包。然而,随着这个系列的继续,这些例子将变得更加复杂,我们将自动化更多的东西。最后,你创建的 Ansible 配置将自动执行越来越多的任务。例如,我自己使用的那个配置可以自动安装数百个软件包、设置cron 作业、处理桌面配置等等。

从我们迄今为止所取得的成就来看,你可能已经有了大概了解。我们所要做的就是创建一个仓库,在该仓库中放置一个剧本,然后利用 ansible-pull 命令拉取该仓库并将其应用到我们的机器上。我们不需要设置服务器。将来,如果我们想要更改配置,我们可以拉取该仓库、更新它,然后将其推回到我们的仓库并应用它。如果我们要设置新机器,我们只需要安装 Ansible 并应用配置。

在下一篇文章中,我们将通过 cron 和一些其他项目进一步自动化。与此同时,我已将本文的代码复制到 我的 GitHub 仓库 中,以便你可以用你的语法对比一下我的。随着我们的进展,我会不断更新代码。


via: https://opensource.com/article/18/3/manage-workstation-ansible

作者:Jay LaCroix 译者:wxy 校对:wxy

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

在这个系列的最后一篇当中,我们将为你展示如何用双因子认证保护你的在线账户。

到目前为止,本系列教程已经提供了 PGP 的实用指南,包括基本概念和工具、生成和保护你的密钥的步骤。如果你错过了前面的文章,可以通过下面的链接查看。在本系列的最后一篇文章中,我们将为你保护在线帐户提供一个额外的指南,保护在线帐户是当今非常重要的一件事情。

清单

  • 取得一个具备 U2F 功能的设备(必要)
  • 为你的在线帐户启用双因子认证(必要)

    • GitHub/GitLab
    • Google
    • 社交媒体
  • 使用 U2F 作为主验证机制,使用 TOTP 作为备选(必要)

考虑事项

你可能注意到,很多在线开发者身份是捆绑了 email 地址的。如果有人能够访问你的邮箱,他们就能够去做一些对你会产生危害的事情,进而会损害你作为自由软件开发者的声誉。应该像保护你的 PGP 密钥那样保护你的 email 地址。

使用 Fido U2F 的双因子认证

双因子认证 是一种提升帐户安全性的机制,它除了要求用户名和密码之外,还要求一个物理令牌。它的目标是即便在有人窃取了你的密码(通过按键记录器、肩窥攻击或其它方式)的情况下,仍然能确保你的帐户安全,他们在没有得到你的一个专用的物理设备(“必备”的那个因子)的情况下,始终不能获取你的帐户。

广为人知的双因子认证机制有:

  • 基于 SMS 的验证
  • 借助智能手机应用程序的基于时间的一次性令牌(TOTP),比如 Google Authenticator 或类似解决方案
  • 支持 Fido U2F 的硬件令牌

基于 SMS 的验证很容易配置,但是它有如下的缺点:它在没有手机信号的地方无法使用(比如,建筑物的地下室),并且如果攻击者能够阻断或转向 SMS 信息,这种方式可能就会失败,比如通过克隆你的 SIM 卡。

基于 TOTP 的多因子认证提供了比 SMS 更好的安全保护,但它也有一些重要的缺点(你要在智能手机中添加的那么多令牌中找到正确的那个)。此外,还不能避免一个事实,那就是你的密钥最终还是保存在你的智能手机中 —— 它是一个复杂的、全球连接的设备,它有可能还没有及时从制造商那儿收到安全补丁。

更重要的是,不论是使用 TOTP 还是 SMS 的方法来保护你免受诱骗攻击 —— 如果诱骗攻击者能够窃取你的帐户密码和双因子令牌,他们就可以在合法的站点上使用它们,访问你的帐户。

Fido U2F 是一个按标准开发的专用设备,它能够提供双因子认证机制来对付诱骗攻击。U2F 协议在 USB 令牌中保存每个站点的的唯一密钥,如果你在任何合法站点以外的地方尝试使用它,它将阻止你,以防范偶然让攻击者获得你的密码和一次性令牌。

Chrome 和 Firefox 都支持 U2F 双因子认证,希望其它浏览器也能够提供对 U2F 的支持。

获得一个支持 Fido U2F 功能的令牌

支持 U2F 的硬件令牌的 可选目标很多,但如果你已经订购了一个支持智能卡的物理设备,那么你最好的选择就是 Yubikey 4,它两者都支持。

启用你的在线帐户的双因子认证

你要确定想启用双因子认证的在线账户,你的 email 提供商已经使用了(特别是 Google,它对 U2F 的支持非常好)。其它的站点这个功能应该是启用了:

  • GitHub:当你上传你的 PGP 公钥时,你应该要想到,如果其他人能够获得访问你的帐户,他们可以用他们自己的 PGP 公钥替换掉你的 PGP 公钥。如果在 GitHub 上发布代码,你应该使用 U2F 认证来保护你的帐户安全。
  • GitLab:理由同上
  • Google:如果你有 google 帐户,你就惊奇地发现,许多帐户都允许以 Google 帐户来代替站点专用的认证来登入它们。
  • Facebook:理由同上,许多在线站点都提供一个选择让你以 Facebook 的帐户来认证。即便你不使用 Facebook 也应该使用双因子认证来保护你的 Facebook 帐户。
  • 你认为必要的其它站点。查看 dongleauth.info 去找找灵感。

如有可能,配置 TOTP 作为备选

许多站点都允许你配置多个双因子认证机制,推荐的设置是:

  • U2F 令牌作为主认证机制
  • TOTP 手机应用作为辅助认证机制

通过这种方式,即便你丢失了你的 U2F 令牌,你仍然能够重新获取对你的帐户的访问。或者,你可以注册多个 U2F 令牌(即:你可以用一个便宜的令牌仅用它做 U2F,并且将它用作备份)。

延伸阅读

到目前为止,你已经完成了下列的重要任务:

  1. 创建你的开发者身份并使用 PGP 加密来保护它。
  2. 通过将你的主密钥移到一个离线存储中并将子密钥移到一个外置硬件设备中的方式来配置你的环境,让窃取你的身份变得极为困难。
  3. 配置你的 Git 环境去确保任何使用你项目的人都能够验证仓库的完整性和它的整个历史。
  4. 使用双因子认证强化你的在线帐户。

在安全保护方面,你已经做的很好了,但是你还应该去阅读以下的主题:

  • 如何去强化你的团队沟通。你的项目开发和治理决策的要求应该和保护提交代码那样去保护,如果不这样做,应该确保你的团队沟通是可信任的,并且所有决策的完整性是可验证的。
  • 如何去强化你的工作站的安全。你的目标是尽可能减少导致项目代码被污染的危险或你的开发者身份被窃的行为。
  • 如何写出安全的代码(查看相关编程语言和你项目所使用的库的各种文档)。即便引入它的提交代码上有一个 PGP 签名,糟糕的、不安全的代码仍然是糟糕的、不安全的代码!

via: https://www.linux.com/blog/learn/pgp/2018/3/protecting-code-integrity-pgp-part-7-protecting-online-accounts

作者:Konstantin Ryabitsev 选题:lujun9972 译者:qhwdw 校对:wxy

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