标签 redhat 下的文章

虽然Dedipath的终身优惠让我可以以每月2.6刀的价格拥有一台双核、1G内存、100G存储、双ip的服务器。不过这么一段时间下来,还是在一些地方感觉有那么点儿不舒服:

  • OVZ架构,内核版本只能用默认的2.6
  • 往大陆直连速度不快(虽然做了加速)
  • ssh经常会被断开(大概是因为经常性的25%的丢包率)

所以,我前两天终于是给它给换掉了。你大概不知道,当你看到这篇文章时,这个博客的伺服器已经从Dedipath的德国机房转移到RackNerd的洛杉矶mc机房了。

根据介绍,该机房的的路由对大陆地区还是不错的。目前中国电信已经加入了cn2线路直连,虽不保证cn2,但相比之前没有加入要好;另外洛杉矶mc机房一直对联通支持的比较友好,联通169骨干直连;移动线路相对弱一点走的也是联通骨干。

那我这台服务器的配置怎么样呢?

3核、2G内存、75G硬盘、月流量2T。

至于速度,北京鹏博士ping出去延迟在200ms左右,下载基本保持在800kb~1M,而这是在没有开启bbr加速的情况下测试的。要打开了bbr,你就琢磨去吧。

没错,这个服务器能打开bbr,这意味着它的内核可以被升级到4版本以上,也就意味着我可以随意调整内核版本,也就说明这个机器是KVM的!

哇,3核2G,75G存储,还是KVM虚拟化,更有cn直连,如此美好的东西价格如何呢?

说出让你死心的价格吧:月缴9.59刀。我又附加了一个ip,所以月缴10.59刀(合74.3)。

当然,它原本应该是这么贵的。

实际上,现在有月缴模式终身5折的优惠。所以我这机器实际月缴5.29刀。按现在汇率算,38块钱一个月!想一想,38块钱就买到了一个三核2G加上75G存储的双ip、KVM虚拟化服务器,而这些钱买腾讯云能买到啥?至少你的带宽就只有可怜的1Mbps(核算过来从服务器下载数据速度最高128k);而6刀买国外服务器又能买到啥样的?要想kvm的话,撑死1核1G了吧?

这么看,超值了啊!

比我这个配置低的还有两个KVM方案:

  • 单核512M、30G存储、500G流量,只能年缴23刀
  • 双核1G、50G存储、1T流量,月缴5.59刀,加一个终身5折优惠,月缴才1块多美元啊!

要是最近想买服务器,快去!

购买传送门:

双核1G+50G存储

我的同款

优惠码(我也不知道啥时候失效,所以尽快):zhujicepingcom50mo

记得改成月缴呦~

视频点此
第一期第二期

一、为什么需要

举个形象的例子:你的Linux装在一个50G的硬盘中。就是说,能用的空间就只有50G。现在,加入了一个100G的硬盘。

要知道:Linux中任何分区都需要映射到某一个文件夹上面才能使用。这个映射过程叫做“挂载”,而这个显示分区内容的文件夹就是“挂载点”。一旦文件夹变成了挂载点,这个文件夹下的内容便不能被显示出来了。而Linux的很多文件放置的位置都是统一的,你不能更改。所以这100G你要怎么加入到系统中使用?

仔细想想,挺不好搞的吧?

新建一个文件夹当作挂载点:你只能存储你自己的东西到这上面,大多数内容还是在50G的硬盘中;

挂载到内容多的文件夹下:不但需要先将所有东西移动过去,还需要调整fstab文件。而且容量是事先定死的,如果其他文件夹占用也高了,还需要经历无损调整分区—新建分区—移动数据—设置挂载点这样繁琐的步骤。不好。

这时候,lvm的作用便显现出来了。

二、优势

lvm把任何你想的分区整合成一个大的虚拟硬盘,使你可以在这上面进行分区操作。而任何事后加入的硬盘,都可以在不关机的情况下进行整合操作。

就像Windows的跨区卷,可以将不同硬盘的空闲空间整合成一个分区使用,容量等于空闲空间之和。但lvm更灵活的地方,在于它整合之后,出现的是一个新的“硬盘”,用户可以在这个“硬盘上面”再分区。

三、方法

总是有人认为Linux需要用命令,一般人用不懂。我也不知道这种印象是怎么来的,大概是因为网上能找到的教程都是命令形式?那我就用图形化的来展示一下。参见这里

视频点此

大概是从去年,Linux阵营的改善仿佛充了会员一般……越来越多的公司开始贴近Linux。比如说微软的Linux子系统、WPS重启了Linux版本的维护、Steam开始Steam Play项目,使得非Linux阵营可以运行Windows专属游戏、百度网盘的Linux版、NVIDIA开始在Linux的驱动中加入双显卡支持……

到现在,连QQ for Linux都诈尸了

现在,在电脑版的QQ下载页的其他产品中,赫然放着 QQ for Linux 的下载入口

点进去,提供了几乎各个主流分支的安装包,直接下载安装即可。

但是,请永远记住:

Arch的源永远不会让你失望。如果没有,那么请使用AUR

至于体验如何,可以看我的视频。我在这里只想展示一下linux中国对于这次复活的一段评价


在 10 月 24 日这个程序员节上发布了 Linux QQ 2.0 版本让人觉得有点无厘头,甚至让人觉得可能仅仅是一个快闪活动,频繁的断线都让人担心是不是到了 25 日,可能 Linux QQ 就又不能用了。在 1024 程序员节的释出,使得 Linux QQ 可以以一个怀旧的形态重新出现在人们的眼前。但是,同样的,在这个节日的释出,也让人觉得这件事似乎并没有相信中的那么重视,对于 Linux QQ 的前景蒙上了一层阴影。

而且,腾讯并非一个慈善组织,对于腾讯这样的一个企业,是否会长期为一个很难产生现金流,而且小众的操作系统提供长期维护还尚未可知,更是让人无法相信 Linux QQ 的未来。

近两年来,自主研发的操作系统不断的刷屏,我们也一次次为自主研发的操作系统而欢呼。但是,高潮之后,还能剩下来的是什么?

我一直强调,操作系统卖的不是系统本身,而是卖因其产生的生态,由生态倒逼用户为系统本身付费。就如同我尝试很多次从 iPhone 转回 Andorid ,从 macOS 转回 Windows,但是,也正如我自己每次失败后的总结一样,我没有办法完全抛弃掉 iPhone 、macOS,因为其所带来的生态是我无法迁移到 Android 上的,被操作系统所挟裹,不得不去面对的现实是:最终,我还是回到了 iPhone 所构建的生态。

对于 Linux 也是一样的,Linux 的服务端的用户诉求是明确的、简单直接的、绝大多数场景都可以被覆盖掉的。而桌面端的产品可能会有数万种不同类型的需求,这使得产品经理在进行设计时预见不了需求的问题,也就很正常的问题。

我们回过头去看,Linux 想要占领桌面市场还需要什么呢?需要的不仅仅是一个 Linux QQ,我们需要给更多人提供 Linux 上的微信、办公套件等等一系列软件。没有这些软件,我们就很难让用户迈过入门的第一关:我如何登录 QQ /微信和我的同事、家人沟通。如果他发现,我用了 Linux ,但是我却没有办法使用 QQ /微信进行沟通,那么我用 Linux 还有什么意义呢?

对于 Linux 来说,除了去适配这些我们所熟悉的软件以外,更是需要有厂商能够面向 Linux 开发出独占的杀手级用户,这样,才能够更好的去推动一个操作系统的发展。

如果 Linux QQ 仍然继续更新,那对于 Linux 来说,是一大利好消息,一些做的好的、做的不好的应用,都可能会重新考虑创建自己的 Linux 版本。而过去,可能没有这样的机会。


我个人还是比较认同这种观点的。不只是腾讯QQ,算上之前发布的百度网盘,我也觉得是为了顺应国家政策而不得不开发出的产品。所以说,很多国内Linux用户一看到QQ for Linux复活了,就好像多大的喜事一般欢呼雀跃,奔走相告,甚至乐观的认为腾讯良心发现……

谈不上,甚至对提出这种观点的人有一股愚昧的印象。目光真的就只能看这么近吗?如果说,腾讯在之后发布了更多的迭代版本,功能上不求跟上Windows,能跟上OSX,再说它“良心发现”也还算过得去(虽然我不认为发布Linux版本软件能跟所谓“良心”挂上钩)。现在仅仅发布了一版便如此兴奋,正所谓“希望越大,失望越大”。

所以,请保持平常心。就仿佛Windows又新出了一个软件一样的心态来看待QQ for Linux的复活吧…

随着我的学生机越来越接近终结时刻,在上面运行的服务不得不要陆续的转移到现如今的服务器上面了。

我的RSS服务就是一个。

但是,现在这个服务器是OVZ的,内核只有可怜的2.x。而Docker要求的最低内核是3.14,所以这个TTRSS要转成普通安装方式来进行。

但毕竟之前一直用Docker,这冷不丁的通过手工部署还真有点儿费劲。所以还是记录一下。


一、新建站点

宝塔中,新建一个站点:

  1. 域名、备注、根目录都随意。比如我使用域名rss.nonickname.garss.bwsl.wang。这样便可以直接访问这个网址来使用RSS服务(当然,域名解析要配置好)
  2. FTP可以不要
  3. 数据库:MySQL
  4. PHP选择7以上的版本
  5. 提交

二、部署站点

  1. ssh到服务器(ttrss的包下载zip会失败,只能用git clone。不知道为什么),输入以下命令克隆文件
cd /path/to/ttrss #进入ttrss网站的根目录
git clone https://git.tt-rss.org/fox/tt-rss.git #克隆文件
  1. 克隆完毕后,可能会多一层文件夹(也就是说,可能/path/to/ttrss/tt-rss/下才有index等等的文件)。将里边的所有文件剪切到网站根目录(/path/to/ttrss)
  2. 因为git到的文件拥有者是ssh登录用户,而不是网页处理的用户。所以退回到上一层(/path/to),修改拥有者为www(记住勾选应用到子目录)

三、安装站点

配置好解析之后,输入网址以启动安装程序。根据要求输入即可。

如果权限正确,这时候应该就可以直接通过默认用户名和密码进行登陆了(admin/password)。一定记得在第一时间修改密码。

四、配置站点

编辑网站根目录的config.php

  • FORCE_ARTICLE_PURGE修改成大于0的数,以自动清理超过这个数字天的文章(星标除外)
  • ENABLE_GZIP_OUTPUT选开。开启可以获得更好的加载速度,但是需要安装php的zlib扩展

保存

五、配置更新feed

不进行这一步是不能刷新Feed的。

1、使用简单模式

编辑config.php,将SIMPLE_UPDATE_MODE改为true,保存。

这种更新方式是指,每当用户使用网页登录ttrss时才进行刷新。通过应用登录无法获得新内容

2、通过定时任务

进入宝塔的计划任务,新增shell脚本。内容为:

sudo -u www php /path/to/ttrss/update.php --feeds --quiet

设定好执行间隔,保存即可。

至此,TTRSS的手工部署过程便完成了。

更多内容,去往ttrss官方查找

六、配置获取全文

虽然限制Feed只能获取部分,一定程度上可以保证提供Feed服务的同时不降低网站流量,但是只能获取部分内容确实让Feed的体验有些差。所以,很多 RSS 服务或客户端将全文获取作为 Premium 订阅的卖点之一。不过,通过 Tiny Tiny RSS,我们同样可以免费实现这一效果。

之前在网络上看到的,都需要去其他api提供网站上先行注册,这对于我这种不喜欢注册账号的人很不舒服。不过,最近发现了一个插件,直接解析网站结构来实现抓取全文,使用起来还是不错的。下面简单介绍。

插件名称:af_feedmod

使用方法:

  1. git clone 上述项目到 ttrss 根目录(会自动放入插件文件夹)
  2. ttrss的偏好设置 - 插件中,启用af_feedmod
  3. 保存后,设置页面多出一个FeedMod标签页,打开
  4. 仿照下述格式输入

    {
    
    "jpmetro.com": {
     "type": "xpath",
     "xpath": "/html/body/section/div[1]/div/article"
    },
    
    "www.linuxidc.com": {
     "type": "xpath",
     "xpath": "//*[@id='content']"
    }
    
    }

手工部署这一次,更让我感受到了一个问题:傻瓜化与繁琐是互斥的,随之而来的是可控与不可控的选择。

因为之前用Docker,所以这次整个过程中,出现了相当多的问题。包括但不限于权限出错、feed不更新等等。

这是一个非常矛盾的选择。

选择了简单、一键、Docker,这在安装时固然便捷了很多,但却有了更多的不可控因素。一旦出现问题,排查过程便是一个极度困难的事情——你并不知道这个一键的背后都做了什么,安装的文件都放在了何处。即使从网上找到了很多的解决方案,但找不到文件在哪儿,本身最简单的事情却成了查错路上最陡峭的一所大山。

就像用宝塔安装的php。它的执行文件并不在默认的/usr/bin/php,而是自定义的/www/server/php/版本号/bin下面。我很庆幸我找到,并且记住了这个位置。如果在我知道这个位置之前便出现了php问题,可能解决错误的唯一方式就是重新安装php了——至少为了知道php在哪儿,我还需要花费额外的时间去论坛询问,或者查阅官方文档。

而选择手工部署,一开始可能需要大量的准备工作。但这样部署的结果,就是我明确的知道哪个文件在哪里,它都能帮助我完成什么任务。这是完全透明的一种操作体验。无论什么地方出现了哪些问题,我至少不会因为找不到文件而搁浅修复的计划。

所以还请好好想一想:当你感觉一个东西应该有一个一键安装包来简化安装的繁琐时,这种简化到底是不是真的对你有帮助?


一个小问题

最近感觉我订阅的很多源都没有更新了。但是到它们的网站上看却是正常的。后来登录到ttrss的设置界面尝试调试一下信息源,发现会统一报一个错误:60 SSL certificate problem

经过一番搜索尝试,发现解决方法很简单:

进入ttrss的目录/includ/functions.php,在大概280行一堆curl_setopt位置加入一行新的

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

保存即可。

视频点此

霍金说2032年是世界末日——当然怹老人家到底说没说过咱也不知道。到底是不是真的咱也不敢问。只是那一年有个小行星会跑到地球附近,碰撞概率是千分之一。概率虽高,但仍有很大的不确定性因素。所以当下的人们,更重视并着手解决着另一个世界末日——Unix世界的末日。因为它已经不可避免的会发生,并且发生时间已经明确了:格林尼治2038年1月19日3点14分7秒,北京时间11点14分7秒。这一点可以跟Siri证实一下。

为什么?


就像世纪初的千年虫,2038年是属于Unix的“千年虫”——使用 POSIX 时间的 32 位计算机应用程序在到达2038年1月19日3点14分7秒后,将会跳到1901年12月13日20点45分52秒继续。怎么会这样?

在Unix世界中,时间是通过一个秒数——从Unix创世元年(1970.1.1 0:0:0)到现在经过的秒数——记录的。所以在Unix里边看到的时间,都是通过创世纪时间+秒数得到的。而这个秒数,被保存在了一个32位有符号整形中,通过正负号表示0时刻之前和之后。

如果你学过编程,你应该就知道32位有符号整形是什么意思:32位的二进制数,其中最高位表示正负。位数有限,则可以表示的数字便也会有极值。这个最大值取在01111111 11111111 11111111 11111111这个二进制数上,对应的十进制就是2^31-1=2147483647。这么多秒换算成时间,就是68年零18天3小时14分7秒。加上创世纪的1970年1月1日0时刻,便得到了这种记录方式的最大时间——2038年1月19日3点14分7秒。再往后,二进制的数字进位,首位变成了1。而首位为1意味着是负数而不是+1,所以时间跳回,Y2038问题便出现了。


这个问题有什么影响吗?至少使用time_t函数的C语言程序会导致时间溢出,Unix系统也不例外。但几乎可以肯定的是,不会有千年虫的影响大。因为OpenBSD直接粗暴的把变量换到64位有符号整形来保存,Linux内核虽然不能这么干,但一直在致力于解决这个问题。而截止到5.1内核版本,其已经开始引入2038年安全的系统调用了。最终目的是让老程序能转换到正确时间,新程序则直接用64位保存时间,这便可以让时间正确运行到大约2920亿年以后。也就是说,64位的“千年虫”将在2920亿年以后出现。而你的电脑硬盘则在38年后的几十年便转秃噜轴了,太阳也早在两千八百多亿年前就变成了红巨星并一点点的冷却了,所以64位的“千年虫”,我们怕是见不到了。

视频点此

著名的github,私有库要收费,国内的码云倒是可以创建,但私有库所有协作人数总计不得超过 5 人,多多少少都有一些限制。搭建自己的git版本控制工具,保证私有库真的私有的同时,还能避免可能发生的网络环境问题。加之docker的辅助,3分钟,就能构建完毕。怎么做?

1、拉取镜像

docker pull gitlab/gitlab-ce

获取gitlab镜像。gitlab就是今天的主角。

2、创建文件夹

需要将容器的文件夹映射出来,保证镜像更新时候内容不会丢失。

cd /home #随便打开一个目录,用于新建文件夹
mkdir gitlab gitlab/config gitlab/log gitlab/data 新建文件夹,一会儿映射使用

3、执行

docker run -d -p 443:443 -p 2222:22 -p 8080:80 -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/log:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

跟以前用到docker的应用相比,这次的参数略多。但是万变不离其宗,主要还是使用端口映射和文件夹映射的参数。其中:

  • 443:443:容器ssl端口映射到服务器的443
  • 2222:22:容器的ssh端口映射到服务器的2222
  • 8080:80:容器的网页端口映射到服务器的8080
  • /home/gitlab/config:/etc/gitlab:容器的配置文件映射到服务器的/home/gitlab/config
  • /home/gitlab/log:/var/log/gitlab:容器的日志文件映射到服务器的/home/gitlab/log
  • /home/gitlab/data:/var/opt/gitlab:容器的数据文件映射到服务器的/home/gitlab/data

4、放开端口

因为安装过宝塔,所以需要将使用到的端口放行。像我这里就要放行8080、2222、443

其实在宝塔的应用里边可以一键安装gitlab。但毕竟宝塔不是所有人都装的,它的安装逻辑也更不清楚,所以相对来讲,还是docker的可控性更高一些,想删除的话,docker也可以删除的更彻底。

好了,现在输入服务器ip:8080即可访问搭建好的gitlab了。第一次登录会让设置一个密码,这个密码对应的是初始管理员密码。我们就可以通过账号root来登录管理了。