Mirrors 修复索引文件缓存不一致问题

自从去年引入 SSD cache 之后,索引文件总是有缓存不一致问题,因为有一些同步脚本中更新索引文件的操作不是原子操作,这些写操作不会触发清空缓存的动作,导致缓存不一致。现在 incrontab 监控了 IN_MODIFY 动作,一天来没有发现新的缓存不一致事件。之所以早先没监控 IN_MODIFY,是因为 rsync 同步过程中写临时文件,会触发大量的 IN_MODIFY 事件。不过在缓存一致性面前,只好牺牲一些性能了。

mirrors修复BioConductor和Loongson源

这两个源都是因为上游源地址换掉,我们没有及时跟进导致长期同步失败的。

BioConductor此次修复后增加了2.13版本的源,现在共有2.11/2.12/2.13三个版本。

而来自anheng的龙芯补充源则是在联系了其维护者后,重新完成了同步。在此摘录部分邮件内容加以说明:


新的Debian不再支持老的软件源的方式,因此增加了bjlx 目录,用于龙芯补充源,目录说明如下:
 
loongson: 包含一些2e的补充源和一些老的龙芯的东西,install目录是离线安装包发布目录,还在更新。
 
Loongson2f: 2f的补充源,不再更新。
 
loongson3: wheezy源,已经合并到bjlx。
 
bjlx: 统一的补充源,经常更新。

因此我们选择同步loongson/loongson2f/bjlx这三个源,频率是每天一次。

Mirrors 关闭虚拟机导致主机网络中断

今天(2013年12月21日)18:40,我(boj)在 mirrors 的 LXC 虚拟机里 init 0 了一下,本来以为跟 lxc-stop 一样的效果,但主机连不上了。原因是虚拟机没有做网络隔离,虚拟机 init 0 过程中会关闭网卡,然后主机网络就 down 了。

事故发生时虽然网络中心值班老师已经下班,但 jameszhang 老师还在东区,于是帮忙打开了机房门。zguangyu 重启了主机,但重启后屏幕显示 GRUB 四个字母(还没到 GRUB 菜单)就卡住了。截至 20:00 发稿时,zguangyu 仍然在机房修理。

Update (21:00):20:45 mirrors 各项服务已恢复正常。宕机时间2小时5分钟。mirrors 不能自启动的原因另文说明。

由于 lug@ustc.edu.cn 在 DNSPod 的账号被锁定了,无法修改 DNS,从而无法迅速切换到备份站点。非常抱歉此次事故给大家带来的麻烦。

事故教训:

  1. 虚拟机要做网络隔离,避免虚拟机内的错误网络配置影响主机。
  2. 应该尽快把 DNS 收回学校。

mirrors恢复qomo源

qomo 的上游源即官方源把 rsync 的 path 从 qomo/ 调整到了 yum-repo/ ,mirrors 不知为何一直没有跟进。故此次重新修正,并手工同步完成。目前 qomo 源每天 6 点 42 分同步一次。

mirrors修复archlinuxarm源以及status页面的排序bug

在上半年或者更早的时候,我们申请了 archlinuxarm 的官方源,并由主站进行 push。不过自从暑假里 mirrors 服务器重装系统,mirrors-lab 虚拟机停止工作后,这个源就一直没有恢复。目前,我们从亚琛工大的 rsync://ftp.halifax.rwth-aachen.de/archlinux-arm/ 这个源进行同步,每小时一次,基本恢复了 archlinuxarm 源的正常工作。将来有机会的话我们会积极申请恢复官方 push 的。

最近 mirrors 上的 status 页面恢复后,我们用jquery的tablesorter插件来对表格进行排序。可是对于占用空间大小一列,这个插件并不能很好的识别。因此我在 status 页面的生成脚本里,把未经转换的真实大小(bytes)直接以 ‘display:none’ 的样式插入,并写了个函数作为 TextExtraction 让 tablesorter 选取这个 ChildNode 作为排序依据。

但是后面又发现了新的问题,即第一列里因为有锚元素的存在,又导致 TextExtraction 对第一列失效。即对于这样的一个 <td> 元素:

&lt;td&gt;&lt;a href="/anthon/"&gt;anthon&lt;/a&gt;&lt;/td&gt;

如果要取其中的连接部分的话,应该用:

node.childNodes[1].innerHTML;

而非:

node.childNodes[0].innerHTML;

因此调整了一下脚本和页面后即告完工。

mirrors 修复 linux.git 源

最近有人反映 mirrors 上的 linux.git 源无法 clone。具体表现为 git clone 到 700MB 左右时卡住,git 无输出。登录后发现 linux.git 有差不多 7GB 大小,判断为 git 存储的松散对象没有被重新打包,导致这个 git 镜像越来越大。

因此先手动对 linux.git 进行 git gc 操作,其占用空间从 7GB 下降到 700MB,服务恢复。随后在同步用的LXC虚拟机中,添加crontab规则:

0       0       * * mon (cd /srv/ftp3/git-repos/linux.git; git gc) &gt; /dev/null 2&gt;&amp;1

即每周一零点零分对 linux.git 进行一次 git gc 操作。

Mirrors 新版首页上线

喵喵为 mirrors 设计了新版首页,欢迎围观~

http://mirrors.ustc.edu.cn/

Mirrors 新首页使用 git 版本控制,只要 push 到 master 分支,GitLab 就会触发 Web Hook,被守候在 mirrors 上的 nodejs 捕获,触发版本库更新和首页重生成。还使用 incron 监控 /srv/www 的变化,有变化时重新生成首页,不再需要每 5 分钟执行重新生成首页的脚本了。

repo 地址是 https://gitlab.lug.ustc.edu.cn/mirrors/newindex.git