蚊章汇 - 2016年12月
type: channel
link: https://linuxcn.bwsl.wang/2016/12/
description: Linux中国社区镜像站，没有大保镖。
items: Fedora 中使用 Inkscape 起步
items: 忘记技术债务 —— 教你如何创造技术财富
items: 如何在 Ubuntu 环境下搭建邮件服务器（二）
items: Linux 服务器安全简明指南
items: PyCharm - Linux 下最好的 Python IDE
items: 把 SQL Server 迁移到 Linux？不如换成 MySQL
items: LXD 2.0 系列（四）：资源控制
items: 如何在 Ubuntu 环境下搭建邮件服务器（一）
items: Samba 系列（二）：在 Linux 命令行下管理 Samba4 AD 架构
items: 哪个编程语言最流行？

Fedora 中使用 Inkscape 起步
type: item
date: 2016-12-31T21:31:23+08:00
description: Inkscape 是一个流行的、功能齐全、自由而开源的矢量图形编辑器，它已经在 Fedora 官方仓库中。它特别适合创作 SVG 格式的矢量图形。Inkscape 非常适于创建和操作图片和插图，以及创建图表和用户界面设计。使用 inkscape 创建的风车景色的插图其官方网站的截图页上有一些很好的例子，说明 Inkscape 可以做些什么。 Fedora 杂志 Fedora Magazine 上的大多数精选图片也是使用 Inkscape 创建的，包括最近的精选图片：Fedora 杂志最近使用 Inkscape 创建的精选图片在 Fedora 上安装 InkscapeInkscape 已经在 Fedora 官方仓库中了，因此可以非常简单地在 Fedora Workstation 上使用 Software 这个应用来安装它：另外，如果你习惯用命令行，你可以使用 dnf 命令来安装：sudo dnf install inkscape （开始）深入 Inkscape当第一次打开程序时，你会看到一个空白页面，并且有一组不同的工具栏。对于初学者，最重要的三个工具栏是：Toolbar、Tools Control Bar、 Colour Palette：Toolbar提供了创建绘图的所有基本工具，包括以下工具：矩形工具：用于绘制矩形和正方形星形/多边形（形状）工具圆形工具：用于绘制椭圆和圆文本工具：用于添加标签和其他文本路径工具：用于创建或编辑更复杂或自定义的形状选择工具：用于选择图形中的对象Colour Palette 提供了一种设置当前选定对象的颜色的快速方式。 Tools Control Bar 提供了工具栏中当前选定工具的所有设置。每次选择新工具时，Tools Control Bar 会变成该工具的相应设置：绘图接下来，让我们使用 Inkscape 绘制一个星星。 首先，从 Toolbar 中选择星形工具，然后在主绘图区域上单击并拖动。你可能会注意到你画的星星看起来很像一个三角形。要更改它，请使用 Tools Control Bar 中的 Corners 选项，再添加几个点。 最后，当你完成后，在星星仍被选中的状态下，从 Palette（调色板）中选择一种颜色来改变星星的颜色：接下来，可以在 Toolbar 中实验一些其他形状工具，如矩形工具，螺旋工具和圆形工具。通过不同的设置，每个工具都可以创建一些独特的图形。在绘图中选择并移动对象现在你有一堆图形了，你可以使用 Select 工具来移动它们。要使用 Select 工具，首先从工具栏中选择它，然后单击要操作的形状，接着将图形拖动到您想要的位置。选择形状后，你还可以使用尺寸句柄调整图形大小。此外，如果你单击所选的图形，尺寸句柄将转变为旋转模式，并允许你旋转图形：Inkscape是一个很棒的软件，它还包含了更多的工具和功能。在本系列的下一篇文章中，我们将介绍更多可用来创建插图和文档的功能和选项。作者简介：Ryan 是一名 Fedora 设计师。他使用 Fedora Workstation 作为他的主要桌面，还有来自 Libre Graphics 世界的最好的工具，尤其是矢量图形编辑器 Inkscape。via: https://fedoramagazine.org/getting-started-inkscape-fedora/作者：Ryan Lerch 译者：geekpi 校对：jasminepeng本文由 LCTT 原创编译，Linux中国 荣誉推出

忘记技术债务 —— 教你如何创造技术财富
type: item
date: 2016-12-31T16:50:00+08:00
description: 电视里正播放着《老屋》节目，Andrea Goulet 和她的商业合作伙伴正悠闲地坐在客厅里，商讨着他们的战略计划。那正是大家思想的火花碰撞出创新事物的时刻。他们正在寻求一种能够实现自身价值的方式 —— 为其它公司清理 遗留代码 legacy code 及科技债务。他们此刻的情景，像极了电视里的场景。（LCTT 译注：《老屋》电视节目提供专业的家装、家庭改建、重新装饰、创意等等信息，与软件的改造有异曲同工之处）。“我们意识到我们现在做的工作不仅仅是清理遗留代码，实际上我们是在用重建老屋的方式来重构软件，让系统运行更持久、更稳定、更高效，”Goulet 说。“这让我开始思考公司如何花钱来改善他们的代码，以便让他们的系统运行更高效。就好比为了让屋子变得更有价值，你不得不使用一个全新的屋顶。这并不吸引人，但却是至关重要的，然而很多人都搞错了。“如今，她是 Corgibytes 公司的 CEO —— 这是一家提高软件现代化和进行系统重构方面的咨询公司。她曾经见过各种各样糟糕的系统、遗留代码，以及严重的科技债务事件。Goulet 认为创业公司需要转变思维模式，不是偿还债务，而是创造科技财富，不是要铲除旧代码，而是要逐步修复代码。她解释了这种新的方法，以及如何完成这些看似不可能完成的事情 —— 实际上是聘用优秀的工程师来完成这些工作。反思遗留代码关于遗留代码最常见的定义是由 Michael Feathers 在他的著作 《高效利用遗留代码》 Working Effectively with Legacy Code 一书中提出：遗留代码就是没有被测试所覆盖的代码。这个定义比大多数人所认为的 —— 遗留代码仅指那些古老、陈旧的系统这个说法要妥当得多。但是 Goulet 认为这两种定义都不够明确。“遗留代码与软件的年头儿毫无关系。一个两年的应用程序，其代码可能已经进入遗留状态了，”她说。“关键要看软件质量提高的难易程度。”这意味着写得不够清楚、缺少解释说明的代码，是没有包含任何关于代码构思和决策制定的流程的成果。单元测试就是这样的一种成果，但它并没有包括了写那部分代码的原因以及逻辑推理相关的所有文档。如果想要提升代码，但没办法搞清楚原开发者的意图 —— 那些代码就属于遗留代码了。遗留代码不是技术问题，而是沟通上的问题。如果你像 Goulet 所说的那样迷失在遗留代码里，你会发现每一次的沟通交流过程都会变得像那条 康威定律 Conway’s Law 所描述的一样。Goulet 说：“这个定律认为你的代码能反映出整个公司的组织沟通结构，如果想修复公司的遗留代码，而没有一个好的组织沟通方式是不可能完成的。那是很多人都没注意到的一个重要环节。”Goulet 和她的团队成员更像是考古学家一样来研究遗留系统项目。他们根据前开发者写的代码构件相关的线索来推断出他们的思想意图。然后再根据这些构件之间的关系来做出新的决策。代码构件最重要的什么呢？良好的代码结构、清晰的思想意图、整洁的代码。例如，如果使用通用的名称如 “foo” 或 “bar” 来命名一个变量，半年后再返回来看这段代码时，根本就看不出这个变量的用途是什么。如果代码读起来很困难，可以使用源代码控制系统，这是一个非常有用的工具，因为它可以提供代码的历史修改信息，并允许软件开发者写明他们作出本次修改的原因。Goulet 说：“我一个朋友认为提交代码时附带的信息，每一个概要部分的内容应该有半条推文那么长（几十个字），如需要的话，代码的描述信息应该有一篇博客那么长。你得用这个方式来为你修改的代码写一个合理的说明。这不会浪费太多额外的时间，并且能给后期的项目开发者提供非常多的有用信息，但是让人惊讶的是很少有人会这么做。我们经常能看到一些开发人员在被一段代码激怒之后，要用 git blame 扒代码库找出这些垃圾是谁干的，结果最后发现是他们自己干的。”使用自动化测试对于理解程序的流程非常有用。Goulet 解释道：“很多人都比较认可 Michael Feathers 提出的关于遗留代码的定义。测试套件对于理解开发者的意图来说是非常有用的工具，尤其当用来与 行为驱动开发模式 Behavior Driven Development 相结合时，比如编写测试场景。”理由很简单，如果你想将遗留代码限制在一定程度下，注意到这些细节将使代码更易于理解，便于在以后也能工作。编写并运行一个代码单元，接受、认可，并且集成测试。写清楚注释的内容，方便以后你自己或是别人来理解你写的代码。尽管如此，由于很多已知的和不可意料的原因，遗留代码仍然会出现。在创业公司刚成立初期，公司经常会急于推出很多新的功能。开发人员在巨大的交付压力下，测试常常半途而废。Corgibytes 团队就遇到过好多公司很多年都懒得对系统做详细的测试了。确实如此，当你…

如何在 Ubuntu 环境下搭建邮件服务器（二）
type: item
date: 2016-12-31T00:37:00+08:00
description: 本教程的第 2 部分将介绍如何使用 Dovecot 将邮件从 Postfix 服务器移动到用户的收件箱。在第一部分中，我们安装并测试了 Postfix SMTP 服务器。Postfix 或任何 SMTP 服务器都不是一个完整的邮件服务器，因为它所做的只是在 SMTP 服务器之间移动邮件。我们需要 Dovecot 将邮件从 Postfix 服务器移动到用户的收件箱中。Dovecot 支持两种标准邮件协议：IMAP（Internet 邮件访问协议）和 POP3（邮局协议）。 IMAP 服务器会在服务器上保留所有邮件。您的用户可以选择将邮件下载到计算机或仅在服务器上访问它们。 IMAP 对于有多台机器的用户是方便的。但对你而言需要更多的工作，因为你必须确保你的服务器始终可用，而且 IMAP 服务器需要大量的存储和内存。POP3 是较旧的协议。POP3 服务器可以比 IMAP 服务器服务更多的用户，因为邮件会下载到用户的计算机。大多数邮件客户端可以选择在服务器上保留一定天数的邮件，因此 POP3 的行为有点像 IMAP。但它又不是 IMAP，当你像 IMAP 那样（在多台计算机上使用它时）那么常常会下载多次或意外删除。安装 Dovecot启动你的 Ubuntu 系统并安装 Dovecot：$ sudo apt-get install dovecot-imapd dovecot-pop3d 它会安装可用的配置，并在完成后自动启动，你可以用 ps ax | grep dovecot 确认：$ ps ax | grep dovecot 15988 ? Ss 0:00 /usr/sbin/dovecot 15990 ? S 0:00 dovecot/anvil 15991 ? S 0:00 dovecot/log 打开你的 Postfix 配置文件 /etc/postfix/main.cf，确保配置了maildir 而不是 mbox 的邮件存储方式，mbox 是给每个用户一个单一大文件，而 maildir 是每条消息都存储为一个文件。大量的小文件比一个庞大的文件更稳定且易于管理。添加如下两行，第二行告诉 Postfix 你需要 maildir 格式，并且在每个用户的家目录下创建一个 .Mail 目录。你可以取任何名字，不一定要是 .Mail：mail_spool_directory = /var/mail home_mailbox = .Mail/ 现在调整你的 Dovecot 配置。首先把原始的 dovecot.conf 文件重命名放到一边，因为它会调用存放在 conf.d 中的文件，在你刚刚开始学习时把配置放一起更简单些：$ sudo mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot-oldconf 现在创建一个新的 /etc/dovecot/dovecot.conf：disable_plaintext_auth = no mail_location = maildir:~/.Mail namespace inbox { inbox = yes mailbox Drafts { special_use = \Drafts } mailbox Sent { special_use = \Sent } mailbox Trash { special_use = \Trash } } passdb { driver = pam } protocols = " imap pop3" ssl = no userdb { driver = passwd } 注意 mail_location = maildir 必须和 main.cf 中的 home_mailbox 参数匹配。保存你的更改并重新加载 Postfix 和 Dovecot 配置：$ sudo postfix reload $ sudo dovecot reload 快速导出配置使用下面的命令来快速查看你的 Postfix 和 Dovecot 配置：$ postconf -n $ doveconf -n 测试 Dovecot现在再次启动 telnet，并且给自己发送一条测试消息。粗体显示的是你输入的命令。studio 是我服务器的主机名，因此你必须用自己的：$ telnet studio 25 Trying 127.0.1.1... Connected to studio. Escape character is '^]'. 220 studio.router ESMTP Postfix (Ubuntu) EHLO studio 250-studio.router 250-PIPELINING 250-SIZE 10240000 250-VR…

Linux 服务器安全简明指南
type: item
date: 2016-12-30T15:56:00+08:00
description: 现在让我们强化你的服务器以防止未授权访问。经常升级系统保持最新的软件是你可以在任何操作系统上采取的最大的安全预防措施。软件更新的范围从关键漏洞补丁到小 bug 的修复，许多软件漏洞实际上是在它们被公开的时候得到修补的。自动安全更新有一些用于服务器上自动更新的参数。Fedora 的 Wiki 上有一篇很棒的剖析自动更新的利弊的文章，但是如果你把它限制到安全更新上，自动更新的风险将是最小的。自动更新的可行性必须你自己判断，因为它归结为你在你的服务器上做什么。请记住，自动更新仅适用于来自仓库的包，而不是自行编译的程序。你可能会发现一个复制了生产服务器的测试环境是很有必要的。可以在部署到生产环境之前，在测试环境里面更新来检查问题。CentOS 使用 yum-cron 进行自动更新。Debian 和 Ubuntu 使用 无人值守升级。Fedora 使用 dnf-automatic。添加一个受限用户账户到目前为止，你已经作为 root 用户访问了你的服务器，它有无限制的权限，可以执行任何命令 - 甚至可能意外中断你的服务器。 我们建议创建一个受限用户帐户，并始终使用它。 管理任务应该使用 sudo 来完成，它可以临时提升受限用户的权限，以便管理你的服务器。不是所有的 Linux 发行版都在系统上默认包含 sudo，但大多数都在其软件包仓库中有 sudo。 如果得到这样的输出 sudo：command not found，请在继续之前安装 sudo。要添加新用户，首先通过 SSH 登录到你的服务器。CentOS / Fedora1、 创建用户，用你想要的名字替换 example_user，并分配一个密码：useradd example_user && passwd example_user 2、 将用户添加到具有 sudo 权限的 wheel 组：usermod -aG wheel example_user Ubuntu1、 创建用户，用你想要的名字替换 example_user。你将被要求输入用户密码：adduser example_user 2、 添加用户到 sudo 组，这样你就有管理员权限了：adduser example_user sudo Debian1、 Debian 默认的包中没有 sudo， 使用 apt-get 来安装：apt-get install sudo 2、 创建用户，用你想要的名字替换 example_user。你将被要求输入用户密码：adduser example_user 3、 添加用户到 sudo 组，这样你就有管理员权限了：adduser example_user sudo 创建完有限权限的用户后，断开你的服务器连接：exit 重新用你的新用户登录。用你的用户名代替 example_user，用你的服务器 IP 地址代替例子中的 IP 地址：ssh example_user@203.0.113.10 现在你可以用你的新用户帐户管理你的服务器，而不是 root。 几乎所有超级用户命令都可以用 sudo（例如：sudo iptables -L -nv）来执行，这些命令将被记录到 /var/log/auth.log 中。加固 SSH 访问默认情况下，密码认证用于通过 SSH 连接到您的服务器。加密密钥对更加安全，因为它用私钥代替了密码，这通常更难以暴力破解。在本节中，我们将创建一个密钥对，并将服务器配置为不接受 SSH 密码登录。创建验证密钥对1、这是在你本机上完成的，不是在你的服务器上，这里将创建一个 4096 位的 RSA 密钥对。在创建过程中，您可以选择使用密码加密私钥。这意味着它不能在没有输入密码的情况下使用，除非将密码保存到本机桌面的密钥管理器中。我们建议您使用带有密码的密钥对，但如果你不想使用密码，则可以将此字段留空。Linux / OS X如果你已经创建了 RSA 密钥对，则这个命令将会覆盖它，这可能会导致你不能访问其它的操作系统。如果你已创建过密钥对，请跳过此步骤。要检查现有的密钥，请运行 ls〜/ .ssh / id_rsa *。ssh-keygen -b 4096 在输入密码之前，按下 回车使用 /home/your_username/.ssh 中的默认名称 id_rsa 和 id_rsa.pub。Windows这可以使用 PuTTY 完成，在我们指南中已有描述：使用 SSH 公钥验证。2、将公钥上传到您的服务器上。 将 example_user 替换为你用来管理服务器的用户名称，将 203.0.113.10 替换为你的服务器的 IP 地址。Linux在本机上：ssh-copy-id example_user@203.0.113.10 OS X在你的服务器上（用你的权限受限用户登录）：mk…

PyCharm - Linux 下最好的 Python IDE
type: item
date: 2016-12-29T20:41:00+08:00
description: 介绍在这篇指南中，我将向你介绍一个集成开发环境 - PyCharm， 你可以在它上面使用 Python 编程语言开发专业应用。Python 是一门优秀的编程语言，因为它真正实现了跨平台，用它开发的应用程序在 Windows、Linux 以及 Mac 系统上均可运行，无需重新编译任何代码。PyCharm 是由 Jetbrains 开发的一个编辑器和调试器，Jetbrains 就是那个开发了 Resharper 的公司。不得不说，Resharper 是一个很优秀的工具，它被 Windows 开发者们用来重构代码，同时，它也使得 Windows 开发者们写 .NET 代码更加轻松。Resharper 的许多原则也被加入到了 PyCharm 专业版中。如何安装 PyCharm我已经写了一篇关于如何获取 PyCharm 的指南，下载、解压文件，然后运行。欢迎界面当你第一次运行 PyCharm 或者关闭一个项目的时候，会出现一个屏幕，上面显示一系列近期项目。你也会看到下面这些菜单选项：创建新项目打开项目从版本控制仓库检出还有一个配置设置选项，你可以通过它设置默认 Python 版本或者一些其他设置。创建一个新项目当你选择‘创建一个新项目’以后，它会提供下面这一系列可能的项目类型供你选择：Pure PythonDjangoFlaskGoogle App EnginePyramidWeb2PyAngular CLIAngularJSFoundationHTML5 BolierplateReact Starter KitTwitter BootstrapWeb Starter Kit这不是一个编程教程，所以我没必要说明这些项目类型是什么。如果你想创建一个可以运行在 Windows、Linux 和 Mac 上的简单桌面运行程序，那么你可以选择 Pure Python 项目，然后使用 Qt 库来开发图形应用程序，这样的图形应用程序无论在何种操作系统上运行，看起来都像是原生的，就像是在该系统上开发的一样。选择了项目类型以后，你需要输入一个项目名字并且选择一个 Python 版本来进行开发。打开一个项目你可以通过单击‘最近打开的项目’列表中的项目名称来打开一个项目，或者，你也可以单击‘打开’，然后浏览到你想打开的项目所在的文件夹，找到该项目，然后选择‘确定’。从源码控制进行查看PyCharm 提供了从各种在线资源查看项目源码的选项，在线资源包括 GitHub、CVS、Git、Mercurial 以及 Subversion。PyCharm IDE（集成开发环境）PyCharm IDE 中可以打开顶部的菜单，在这个菜单下方你可以看到每个打开的项目的标签。屏幕右方是调试选项区，可以单步运行代码。左侧面板有项目文件和外部库的列表。如果想在项目中新建一个文件，你可以鼠标右击项目的名字，然后选择‘新建’。然后你可以在下面这些文件类型中选择一种添加到项目中：文件目录Python 包Python 包Jupyter 笔记HTML 文件StylesheetJavaScriptTypeScriptCoffeeScriptGherkin数据源当添加了一个文件，比如 Python 文件以后，你可以在右边面板的编辑器中进行编辑。文本是全彩色编码的，并且有黑体文本。垂直线显示缩进，从而能够确保缩进正确。编辑器具有智能补全功能，这意味着当你输入库名字或可识别命令的时候，你可以按 'Tab' 键补全命令。调试程序你可以利用屏幕右上角的’调试选项’调试程序的任何一个地方。如果你是在开发一个图形应用程序，你可以点击‘绿色按钮’来运行程序，你也可以通过 'shift+F10' 快捷键来运行程序。为了调试应用程序，你可以点击紧挨着‘绿色按钮’的‘绿色箭头’或者按 ‘shift+F9’ 快捷键。你可以点击一行代码的灰色边缘，从而设置断点，这样当程序运行到这行代码的时候就会停下来。你可以按 'F8' 单步向前运行代码，这意味着你只是运行代码但无法进入函数内部，如果要进入函数内部，你可以按 'F7'。如果你想从一个函数中返回到调用函数，你可以按 'shift+F8'。调试过程中，你会在屏幕底部看到许多窗口，比如进程和线程列表，以及你正在监视的变量。当你运行到一行代码的时候，你可以对这行代码中出现的变量进行监视，这样当变量值改变的时候你能够看到。另一个不错的选择是使用覆盖检查器运行代码。在过去这些年里，编程界发生了很大的变化，现在，对于开发人员来说，进行测试驱动开发是很常见的，这样他们可以检查对程序所做的每一个改变，确保不会破坏系统的另一部分。覆盖检查器能够很好的帮助你运行程序，执行一些测试，运行结束以后，它会以百分比的形式告诉你测试运行所覆盖的代码有多少。还有一个工具可以显示‘类函数’或‘类’的名字…

把 SQL Server 迁移到 Linux？不如换成 MySQL
type: item
date: 2016-12-29T17:44:00+08:00
description: 最近几年，数量庞大的个人和组织放弃 Windows 平台选择 Linux 平台，而且随着人们体验到更多 Linux 的发展，这个数字将会继续增长。在很长的一段时间内， Linux 是网络服务器的领导者，因为大部分的网络服务器都运行在 Linux 之上，这或许是为什么那么多的个人和组织选择迁移的一个原因。迁移的原因有很多，更强的平台稳定性、可靠性、成本、所有权和安全性等等。随着更多的个人和组织迁移到 Linux 平台，MS SQL 服务器数据库管理系统的迁移也有着同样的趋势，首选的是 MySQL ，这是因为 MySQL 的互用性、平台无关性和购置成本低。有如此多的个人和组织完成了迁移，这是应业务需求而产生的迁移，而不是为了迁移的乐趣。因此，有必要做一个综合可行性和成本效益分析，以了解迁移对于你的业务上的正面和负面影响。迁移需要基于以下重要因素：对平台的掌控不像 Windows 那样，你不能完全控制版本发布和修复，而 Linux 可以让你需要需要修复的时候真正给了你获取修复的灵活性。这一点受到了开发者和安全人员的喜爱，因为他们能在一个安全威胁被确定时立即自行打补丁，不像 Windows ，你只能期望官方尽快发布补丁。跟随大众目前， 运行在 Linux 平台上的服务器在数量上远超 Windows，几乎是全世界服务器数量的四分之三，而且这种趋势在最近一段时间内不会改变。因此，许多组织正在将他们的服务完全迁移到 Linux 上，而不是同时使用两种平台，同时使用将会增加他们的运营成本。微软没有开放 SQL Server 的源代码微软宣称他们下一个名为 Denali 的新版 MS SQL Server 将会是一个 Linux 版本，并且不会开放其源代码，这意味着他们仍然使用的是软件授权模式，只是新版本将能在 Linux 上运行而已。这一点将许多乐于接受开源新版本的人拒之门外。这也没有给那些使用闭源的 Oracle 用户另一个选择，对于使用完全开源的 MySQL 用户也是如此。节约授权许可证的花费授权许可证的潜在成本让许多用户很失望。在 Windows 平台上运行 MS SQL 服务器有太多的授权许可证牵涉其中。你需要这些授权许可证：Windows 操作系统MS SQL 服务器特定的数据库工具，例如 SQL 分析工具等不像 Windows 平台，Linux 完全没有高昂的授权花费，因此更能吸引用户。 MySQL 数据库也能免费获取，甚而它提供了像 MS SQL 服务器一样的灵活性，那就更值得选择了。不像那些给 MS SQL 设计的收费工具，大部分的 MySQL 数据库实用程序是免费的。有时候用的是特殊的硬件因为 Linux 是不同的开发者所开发，并在不断改进中，所以它独立于所运行的硬件之上，并能被广泛使用在不同的硬件平台。然而尽管微软正在努力让 Windows 和 MSSQL 服务器做到硬件无关，但在平台无关上依旧有些限制。支持有了 Linux、MySQL 和其它的开源软件，获取满足自己特定需求的帮助变得更加简单，因为有不同开发者参与到这些软件的开发过程中。这些开发者或许就在你附近，这样更容易获取帮助。在线论坛也能帮上不少，你能发帖并讨论你所面对的问题。至于那些商业软件，你只能根据他们的软件协议和时间来获得帮助，有时候他们不能在你的时间范围内给出一个解决方案。在不同的情况中，迁移到 Linux 都是你最好的选择，加入一个彻底的、稳定可靠的平台来获取优异表现，众所周知，它比 Windows 更健壮。这值得一试。via: https://www.howtoforge.com/tutorial/moving-with-sql-server-to-linux-move-from-sql-server-to-mysql-as-well/作者：Tony Branson 译者：ypingcn 校对：wxy本文由 LCTT 组织编译，Linux中国 荣誉推出

LXD 2.0 系列（四）：资源控制
type: item
date: 2016-12-29T16:47:00+08:00
description: 这是 LXD 2.0 系列介绍文章的第四篇。LXD 入门安装与配置你的第一个 LXD 容器资源控制镜像管理远程主机及容器迁移LXD 中的 DockerLXD 中的 LXD实时迁移LXD 和 JujuLXD 和 OpenStack调试，及给 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 限制。这也意味着当使用可以支…

如何在 Ubuntu 环境下搭建邮件服务器（一）
type: item
date: 2016-12-29T01:01:00+08:00
description: 在这个系列的文章中，我们将通过使用 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 服务”会有些帮助，然后，你就可以通过注册域名并相应地配置防火墙，来将这台局域网服务器变成互联网可访问邮件服务器。这个过程网上已经有很多很详细的教程了，这里不再赘述，请大家继续跟着教程进行即可。一些术语让我们先来快速了解一些术语，因为当我们了解了这些术语的时候就能知道这些见鬼的东西到底是什么。 :DMTA： 邮件传输代理 （ 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），安装程序会打开一个向导，询问你想要搭建的服务器类型，你要选择“Interne…

Samba 系列（二）：在 Linux 命令行下管理 Samba4 AD 架构
type: item
date: 2016-12-28T19:16:00+08:00
description: 这篇文章包括了管理 Samba4 域控制器架构过程中的一些常用命令，比如添加、移除、禁用或者列出用户及用户组等。我们也会关注一下如何配置域安全策略以及如何把 AD 用户绑定到本地的 PAM 认证中，以实现 AD 用户能够在 Linux 域控制器上进行本地登录。要求在 Ubuntu 系统上使用 Samba4 来创建活动目录架构第一步：在命令行下管理1、 可以通过 samba-tool 命令行工具来进行管理，这个工具为域管理工作提供了一个功能强大的管理接口。通过 samba-tool 命令行接口，你可以直接管理域用户及用户组、域组策略、域站点，DNS 服务、域复制关系和其它重要的域功能。使用 root 权限的账号，直接输入 samba-tool 命令，不要加任何参数选项来查看该工具能实现的所有功能。# samba-tool -h 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 --mail-address=your_domain_user@tecmint.lan --login-shell=/bin/bash 在 Samba AD 上创建用户3、 可以通过下面的命令来列出所有 Samba AD 域用户：# samba-tool user list 列出 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" 列出 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 检查 Samba 域密码13、 为了修改 samba 域密码策略，比如密码复杂度，密码失效时长，密码长度，密码重复次数以及其它域控制器要求的安全策略等，可参照如下命令来完成：---------- List all command options ---------- # samba-tool domain passwordsettings -h 管理 Samba 域密码策略不要把上图中的密码策略规则用于生产环境中。上面的策略仅仅是用于演示目的。第二步：使用活动目录账号来完成 Samba 本地认证14、 默认情况下，离开 Samba AD DC 环境，AD 用户不能从本地登录到 Linux 系统。为了让活动目录账号也能登录到系统，你必须在 Linux 系统环境中做如下设…

哪个编程语言最流行？
type: item
date: 2016-12-28T16:49:00+08:00
description: 经常有人问哪个编程语言最流行？这问题很简单，但是回答起来可没那么简单。首先，我们要知道，为什么人们会问这样的问题？一般问这样的问题是人大多是学生，他们想知道这个问题的答案是因为他们想要找份工作，所以寻求一种可以增加面试成功率的技能。对于大多数人来说，进入一个新的领域时了解什么是最流行的，是很有意义的。而对于其他人来说，比如说已经掌握了一种或几种编程语言的程序员，他可能在想要掌握一门新的编程语言时，会考虑一下当前最流行的编程语言作为参考。而对于要开发一个产品的程序员来说，也希望了解当前最流行的编程语言是因为他们希望所开发的产品能够迎合客户的环境和需求，显然支持流行的语言的 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。这无关于哪个语言更流行。字里行间的发现或…