分类 Linux 下的文章

视频点此

我曾经说,不能跟着Archwiki的Installation Guide安装好Archlinux的话,那么暂时也不要考虑用Arch了。但是最近Arch把base包组替换了之后,官方的安装文档便显的太过简略了一些…以至于我在引导问题上头卡了小半个钟头…所以,是时候分享一下base组被替换后,Wiki没有提到的内容了

注意:无论如何,官方写过的内容我还是不会去详细说的。因为只要官方文档提到了,那么它的内容就是详细且清晰的。如果看不懂,那么还是请暂时回避Arch,尝试一下Manjaro什么的。


一、替换了啥?对我有什么影响吗?

官方是这么说的:

The base group has been replaced by a metapackage of the same name. We advise users to install this package (pacman -Syu base), as it is effectively mandatory from now on.

Users requesting support are expected to be running a system with the base package.

Addendum:
Be aware that base as it stands does not currently contain:
- A kernel
- An editor
... and other software that you might expect. You will have to install these separately on new installations.

简单来说:以前只要装好base包组,你就可以拥有一个完善的文本样式的系统了。而现在,base只供满足依赖关系而不再提供可启动的软件包。所以现在的base只是一个脚手架,想要成功运行Arch就需要你自己来填充内容了。

所以,安装上面有哪些变化?


二、实操有啥变化?

从进入安装盘一直到pacstrap之前,都是没有变化的。但在pacstrap这里需要注意。

在 Installation Guide 的示例语句中,只增加了一个linux内核的程序包。但是实际上,你需要增加的可能不止这个:

  • visudo依赖vi或者vim,所以需要加入这两个软件包之一。推荐vi——如果你没有在图形界面使用vi的习惯的话
  • 好用的nano编辑器工具现在默认不再提供。需要的话也请再追加这个包
  • dhcpcd同样需要自己安装。可以在这里追加,或者之后的arch-chroot时候使用pacman安装

然后,一切如常。直到进行到grub安装环节。

不知道是不是只是我赶上了一版“残缺”的内核…不过为了保险,还是推荐这么操作一下,省的到时候进入grub恢复环境。

  • 一如既往地,安装grubefibootmgr软件包并使用grub-installgrub-mkconfig写入一次引导
  • 使用pacman -S linux重新安装一次内核
  • 同样的,使用pacman命令重新安装一次微码
  • 使用grub-mkconfig重新写入一次引导

不出意外,改版后的Archlinux就可以成功启动了。


所以,改变的说大也不大,仅仅是需要额外补充一些软件包;但是说小也不小,想让grub顺利引导还是有点儿东西的。不过还是前边说的那句话,可能只是我当时赶上了一个残缺的引导部署版本,可能到你安装的时候,只需要额为补充一些软件包就可以了。

最近到手了一个很轻便的笔记本,换装Arch的时候遇到一个问题:界面会不断地刷pcie bus error的提示,类似于

pcieport 0000:00:01.1: PCIe Bus Error: severity=Corrected, type=Physical layer, id=00e5(Recelver ID)
......

不断刷屏,根本不知道自己的命令打成了什么样,更不要提查看结果了。

几经查阅,发现这个问题大概是由于硬件间通信速度不同导致的错误,除了更换插槽以增加两个硬件之间的物理距离外,没有其他的解决方案。所以如果系统运行正常,那么搁置这个问题即可。

所以,解决无望,只能想办法屏蔽这条消息。

方法很简单。在Arch安装盘的选择界面按e(类似于编辑grub的启动项),结尾增加 pci=nomsi,再回车进入安装程序即可。

同样的,如果在安装之后还出现这个问题,则可以将这个参数加入grub启动项中来解决。不过我这里在装好之后就好了,所以我感觉这可能是USB插槽距离CPU或者某些控制器有点儿近导致的吧…

这个文章有点儿啰嗦…要看解决方案到底是什么的,就直接拉到文章最后一节


笔记本,Intel核显+NVIDIA独显,解决方案?

只安装NVIDIA独显闭源驱动?大黄蜂切换?nouveau?

正确的方式是什么?


一、为什么放弃了大黄蜂

本身我一直推荐用户通过大黄蜂+bbswitch来实现双显卡切换。但直到前些日子我打算玩儿{{theHunter:Call of the Wild:猎人:野性的呼唤}},它不能运行了。

我知道这个游戏是Windows专属,所以它是通过Proton来实现运作的。但是根据protondb.com给出的数据,这个游戏的支持度是很好的。

怪哉!

实在没有办法,只好用steam play bumblebee为关键词搜索,偶然看到了个描述(原网页懒得找了):大黄蜂不支持dxvk

原来问题在这里。

那就不得不放弃大黄蜂了。

二、选啥方案

只安装闭源驱动?

性能是好,但是太费电啊…

nouveau?

省电,还能自动切换,但独显性能太渣了啊…况且好像还不能执行CUDA?

Ubuntu有着Linux世界里边最好的I+N双显卡解决方案,叫做PRIME。这个方案是通过在显卡管理器中更改配置文件达到使用核显或独显的目的的。Arch有没有类似的?

三、找到了可能是最好的方案

ArchWiki一查,还真有:nvidia-xrun

很明显,这个方案比Ubuntu的PRIME方案复杂了太多太多。而且使用时还需要切换到一个字符界面。但它确实能提供完整的英伟达显卡性能,在不使用的时候也可以关闭。

顺着这篇wiki,我又来到了Graphics索引页面。然后看到了一个名字为NVIDIA Optimus的Wiki项。要知道,Arch下面的显卡方案往往都被归类为Optimus。所以点进这个Wiki看一看

emmm... nouveau, Bumblebee, nvidia-xrun。没什么特别的。

难道就只有这种通过tty载入独显驱动一条路了吗?

不!任何时候都请记住:养成查看英文页面的好习惯。

看到变化了吗?看到英文页面的5.4小节了吗?就是它!只需从托盘右键选择一个显卡,就可以自动注销并切换!比Ubuntu需要打开显卡管理器—选择配置文件—手动注销再登录还要简便!而且还不需要xrun那样事先配置一堆文件!简直是赶超Ubuntu驱动管理的最佳选择!

四、配它

简单到什么程度?只需装几个软件包,再点几下鼠标即可完成:

pacman -S nvidia bbswitch    
# nvidia: 英伟达闭源驱动。如果使用自定义内核,或者不想驱动崩掉,那就安装nvidia-dkms
# bbswitch: 切换使用的节能工具。如果使用自定义内核,那就安装bbswitch-dkms

yaourt -S optimus-manager-qt
# 托盘程序(可视化切换及设置)。会自动安装核心程序
# 如果配置有archlinuxcn源,那么同样可以使用pacman来安装
# 如果使用KDE桌面,另有optimus-manager-qt-kde可供选择

现在重启,应该就能看到托盘多出了一个小图标了。右键点击它,选择设置—OptimusSwitching method选择Bbswitch,确定保存。

完成了。以后只需要右键这个图标,选择对应的配置方案,便可进行切换了。


所以,总结一句话:

一定记得看英文页面


注:

  • 根据项目readme,仅支持Arch分支的发行版
  • manjaro由于自带电源管理和自己的大黄蜂驱动方案(一样的残缺),需要对照git项目,删除/修改指定的配置文件以完成部署

对应的git项目 点这里

如果发现默认设置还是不能启动proton游戏,尝试如图配置

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

我的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);

保存即可。

视频点此

著名的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来登录管理了。