简单的 Arch 第三方软件源自动化同步上传工具

首先解释下, 这玩意是给包维护者用的, 不是给普通用户的(
功能: 扫描自己维护的包列表, 同步所有包到远程软件仓库. 自动判断architecture. 如使用 yaourt, 需要配置 yaourt 输出到 pacman 目录, 或者手动修改工具里的路径.
PKGLIST格式: 一行一个包名.
PS: 因为用到了 GNU Parallel, 所以记得装一下嗯(

packageupload:

#!/bin/bash
[[ "$1" = *x86_64* ]] && ARCH=x86_64 || ARCH=any
echo "Uploading $1 to repo, architecture: $ARCH"
rsync -azP $1 root@$SERVER_IP:/home/www/repo/$ARCH/

packagesync:

#!/bin/bash
cat /path/to/PKGLIST|xargs pacman -Q|sed -e "s/\\s/-/"|xargs -IQ bash -c "ls /var/cache/pacman/pkg/Q-*"|parallel packageupload

计算SMSC的方法 (附带Py小工具)

早上小青蛙 @hexchain 发不了短信找俺要SMSC号码, 于是…嗯…
于是…步骤就用代码里的注释描述算了, 直接上代码:

#!/usr/bin/env python2
#coding:utf-8
import sys

# 获取短信中心号码
if len(sys.argv) > 1:
    orig = sys.argv[1]
else:
    print "输入短信中心号码:",
    orig = raw_input()
    
# 去掉+号
if orig[0] == "+":
    orig = orig[1:]

# 不是偶数在后面加F
if len(orig) % 2 == 1:
    orig = orig + "F"

# 把奇位和偶位互换
orig = "".join(["".join(x) for x in zip(orig[1::2],orig[::2])])

# 在号码前加91(国际化)+字符长度/2
orig = "91" + orig
orig = "%02d" % (len(orig)/2) + orig

print orig

参考资料: http://read.pudn.com/downloads179/sourcecode/embed/835292/new/SMSTABLE.h__.htm

Archlinux – 安装 testing/glibc 2.16.0-2 时出现 “/lib exists in filesystem” 的一种处理方法

首先感谢falconindy提供的几个note, 这是我的解决思路的基础:

A few things to note...

1) If you find yourself in a position to recreate the symlink yourself, the link target is [b]usr/lib[/b] and not [b]/usr/lib[/b]. This is an important difference that's only evident in a chroot situation.
2) The linker is an interpreter, just like /bin/bash. If it exists on the system but the /lib symlink is missing/fubar, you can run ELF binaries directly via the linker, e.g. /usr/lib/ld-2.16.so /bin/ln -s ....

我遇到了和litemotiv一样的问题:
清理过/lib, 保证里面的文件都属于 glibc 后再次尝试升级:

(1/2) upgrading glibc                                                                            [########################################################] 100%
error: extract: not overwriting dir with file lib
error: problem occurred while upgrading glibc
call to execv failed (No such file or directory)
error: command failed to execute correctly
error: could not commit transaction
error: failed to commit transaction (transaction aborted)
Errors occurred, no packages were upgraded.

我的问题的特殊点是: 我没有打开一个root权限的命令行, root密码登陆被禁用(所以我无法使用su root), 而且我无法使用上面说的ld-2.16.so去加载sudo(由于sudo本身的安全规则).

于是我琢磨出了下面的方法去修复这个已经挂掉的系统, 希望能帮到遇到类似问题的盆友:

  1. 重启, 编辑grub里linux(或kernel)开头的那行, 在尾部添加:
    init=/usr/lib/ld-2.16.so /bin/sh
  2. remount文件系统使其可写:
    /usr/lib/ld-2.16.so /bin/mount -o remount,rw /
  3. 移除空的(上面的错误会使它是空的) /lib 目录:
    /usr/lib/ld-2.16.so /bin/rmdir /lib
  4. 手动修复链接:
    /usr/lib/ld-2.16.so /bin/ln -s usr/lib /lib
  5. 按 ctrl-alt-del 重启电脑, 然后用pacman重新安装一次glibc

然后各种东西都恢复正常了, 不需要使用恢复光盘之类的东西 🙂

参考: https://bbs.archlinux.org/viewtopic.php?pid=1126667#p1126667

QR Code Business Card