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

给 Systemd 的操作加上 Bash 简写及其自动完成

大家都知道 systemd 启个服务打 systemctl start nginx.service 实在是长的难受(尽管有Tab…), 于是 ArchWiki 上有介绍一个简单用 start nginx 来代替的方法, 但是这个方法没有 Bash 自动补全, 于是我自己折腾了一下..

补全函数都取自他们各自原来的 bash-completion 文件, 我只修改了一点点(可惜不能复用啊..).

嗯, 照例上代码…
/etc/bash.bashrc, 或者 ~/.bashrc 里添加:

if ! systemd-notify --booted; then  # not using systemd
  start() {
    sudo rc.d start $1
  }

  restart() {
    sudo rc.d restart $1
  }

  stop() {
    sudo rc.d stop $1
  }
else
  _target() {
    if [[ "$1" == *.service ]]
    then
      echo $1
    else
      echo $1.service
    fi
  }
  export -f _target

  start() {
    sudo systemctl start $(_target $1)
  }
  export -f start

  restart() {
    sudo systemctl restart $(_target $1)
  }
  export -f restart

  stop() {
    sudo systemctl stop $(_target $1)
  }
  export -f stop

  enable() {
    sudo systemctl enable $(_target $1)
  }
  export -f enable

  status() {
    sudo systemctl status $(_target $1)
  }
  export -f status

  disable() {
    sudo systemctl disable $(_target $1)
  }
  export -f disable
fi
Continue reading 给 Systemd 的操作加上 Bash 简写及其自动完成

简易的默认网关保存+Bash补全解决方案 For Arch Linux

嗯, 本猫的脚本有多烂大大们都知道的, 所以本文旨在抛砖引玉, 简单介绍利用 pppd hook 和 dhcpcd hook 做到记忆网关, 以及 bash_completion 补全的实现.

保存用的脚本:
/usr/local/bin/froute-save

#!/bin/bash
interface=${interface:-$1}
gateway=${new_routers:-$5}

if [ "$reason" = 'BOUND' ] && ! ([ -z "$interface" ] || [ -z "$gateway" ])
then
    mkdir -p /tmp/froute/
    chmod 755 /tmp/froute
    echo $gateway > /tmp/froute/$interface
    chmod 644 /tmp/froute/$interface
elif ([ "$reason" = 'STOP' ] || [ "$reason" = 'RELEASE' ]) && ! [ -z "$interface
" ]
then
    rm -f /tmp/froute/$interface
fi

嗯..然后首先是pppd的hook, 代码如下:
/etc/ppp/ip-up.d/02-route.sh

reason=BOUND froute-save $1 0 0 0 $5

/etc/ppp/ip-down.d/02-route.sh

reason=RELEASE froute-save $1

然后是dhcpcd的hook.
/etc/dhcpcd.enter-hook

froute-save

如果有用 netcfg 设置静态地址连接, 可以参考如下配置:

POST_UP="env reason=BOUND froute-save $INTERFACE 0 0 0 $GATEWAY || true"
PRE_DOWN="env reason=RELEASE froute-save $INTERFACE || true"

嗯, 现在记忆网关的部分就完成了 ><

Continue reading 简易的默认网关保存+Bash补全解决方案 For Arch Linux

检查 /usr 目录哪些文件不在包管理里 For Arch Linux

当然改改里面的命令也就能用在其他发行版了= =
随手写的, 各种不靠谱勿喷哦><

#!/usr/bin/env python2
import subprocess
import os
from os.path import join

pkg_list = subprocess.check_output(["pacman", "-Q"]).split("\n")[:-1]
pkg_list = map(lambda line:line.split()[0], pkg_list)

file_mapper = {}
for pkg in pkg_list:
    file_list = subprocess.check_output(["pacman", "-Ql", pkg]).split("\n")[:-1]
    file_list = map(lambda line:line.split(" ",1)[1], file_list)
    for filename in file_list:
        file_mapper[filename] = pkg

for root, dirs, files in os.walk('/usr'):
    if "__pycache__" in root:
        continue
    for name in files:
        filename = os.path.join(root, name)
        if filename not in file_mapper:
            if filename.endswith(".pyc") or filename.endswith(".cache"):
                continue
            print filename, "Not Found!"

ArchLinux 小白好奇看 (3)

1, 应用ubuntu的LCD补丁, 让字体不发虚!
从AUR里那高高的投票数就知道这几乎是个must-have feature了`~
使用这货让整个2D渲染都犀利起来, 尤其是中文字, 完全不发虚~~
安装方法:

yaourt -S cairo-ubuntu

一路上会继续自动安装 fontconfig-ubuntu, freetype2-ubuntu, libxft-ubuntu 这么几个带补丁的包(从aur里).
这个包提供了3种可选的优化方案, 可以用下面的方法选用其中一种:

cd /etc/fonts/conf.d/
sudo ln -s ..conf.avail/10-hinting-<新方案名>.conf ./
sudo rm 10-hinting-<原方案名>.conf

来实现可选渲染方案的切换.
默认的方案名是 slight, 可选的方案名总共包括: slight medium full

2, 试一试systemd!
首先是安装:

pacman -S systemd arch-systemd-units initscripts-systemd

然后…替换syslog-ng为rsyslog:

pacman -R syslog-ng
pacman -S rsyslog

并编辑rc.conf, 把DAEMONS里的syslog-ngd改为rsyslogd.
然后在/boot/grub/menu.lst里对应启动项的kernel行后面加上

init=/bin/systemd

就行了!
最后…需要配置systemd使用service. 比如我使用kdm, 那么就需要:

sudo systemctl enable kdm.service

在我的测试中, 经过多次反复比较, systemd比upstart启动略快(约1s), 但是启动后有些东东运行不正常(比如USB即插即用).
此外即使我启用了rc-local.service, /etc/rc.local在开机仍然不被执行, 这个也是有些奇怪的 = =

Continue reading ArchLinux 小白好奇看 (3)

Linux 命令行调节屏幕到任意分辨率的 Python 脚本

本猫把一台19寸显示器插在本本VGA插口上, 结果在KDE的分辨率管理界面上发现只能最高选择分辨率到1024×768, 甚是不爽! 于是…写了一个脚本, 以后就可以一步做到啦!
此外: 运行此脚本后, KDE的分辨率管理列表中也会出现运行此脚本的时候指定的分辨率哟!(即使是显示器不支持的)
当然啦, 显卡不支持的分辨率是不会设置成功的…

实现的功能比较简单, 但是很方便, 希望对你也有用~

使用方法:

resolution <设备名> <分辨率> [刷新率]

使用示例:

resolution VGA1 1366x768 60
resolution LVDS1 1280x800

Changelog:
2011-4-29 发布第一个版本

下面…就是脚本啦!

Continue reading Linux 命令行调节屏幕到任意分辨率的 Python 脚本

Apple Magic Mouse 多点触控在 Linux 里的安装与配置

Felix 弄来一只 Apple Magic Mouse 小白, 蓝牙配对上后发现各种scrolling很靠谱, 三键也支持好了, 但是多指动作没有支持…
在各种Google之后, 找到了有人使用 PyMT 来实现 Magic Mouse 多点触控手势的脚本, 由于原脚本(参考资料1)是针对GNOME/compiz的, 而且网上没有靠谱的KDE可用版本, 于是本猫自己Hack了一下…

安装说明:
首先要安装pymt, ArchLinux用户可以直接

yaourt -S pymt

Ubuntu用户可以直接

sudo apt-get install python-pymt

接下来, 配置pymt识别MagicMouse的多点触控:
编辑 ~/.pymt/config
找到 [input] 段, 修改为:

[input]
default = hidinput,/dev/input/event

上面的<n>需要替换成MagicMouse对应的编号, 可以用下面这个本猫写的挫挫的语句察看:

cat /var/log/Xorg.0.log|grep udev|grep -i apple|grep /dev/input/event

然后, 给这个文件(设备?信号?事件? = =不知道怎么称呼了)加上读属性, 以使得pymt可以用当前用户身份读取:

sudo chmod a+r `cat /var/log/Xorg.0.log|grep udev|grep -i apple|grep /dev/input/event|sed -e 's/.*\(\/dev\/input[^\)]*\).*/\1/'`

至此, 可以认为pymt安装好啦!
测试:

python -m pymt.tools.demo

(arch用户自行改为python2 = =)

接下来…可以试试我的脚本啦!

— Changelog:
2011/4/19 – 第二个版本, 增加了三指上下调节系统音量的功能~~
2011/4/19 – 第一个版本, 仅简单实现了双指Swipe Left/Right 切换虚拟桌面的效果.

Continue reading Apple Magic Mouse 多点触控在 Linux 里的安装与配置

ArchLinux 小白好奇看 (2)

纠结了一坨东西之后, 忍不住猫爪痒痒继续记笔记- –

1, 首先记下一些有用的从AUR安装的软件包:

aur/aliedit
aur/arpoison
aur/bin32-wine-suse
aur/chromium-browser-bin
aur/dropbox
aur/ffmpeg-mt-git
aur/googlecl
aur/google-talkplugin
aur/hotot-hg
aur/jdownloader
aur/neroaacenc
aur/nginx-unstable
aur/pacfile
aur/ruijieclient
aur/sdcv
aur/uwsgi
aur/vidalia
aur/virtualbox_bin
aur/virtualbox-ext-oracle
aur/winff
aur/x264-git
aur/xmind

安装Arch之前对Arch的印象都是”难装”, 而事实上, 从AUR安装这些不被官方支持的第三方软件, 比Ubuntu等发行版还要容易的多 XD

Continue reading ArchLinux 小白好奇看 (2)

修改 DHCP 超时时间解决 netcfg 无法连接某些Wifi连接的问题

今天公交车堵在路上, 蛋疼的拿出本本开机, 用爪机的Wi-fi hotspot打开了分享, 但是使用wifi-select的时候却提示连接失败…
失败时候的提示类似如下:

:: WirelessLAN up                                                               [BUSY]
...
DHCP IP lease attempt failed                                               [FAIL]

经各种测试和纠结后, 后来在Archlinux论坛上找到可行解了:
修改此连接的profile文件, 增加一行:

DHCP_TIMEOUT=30

然后…再连接就可以啦!
(因为Google搜索此问题这个解法并不在最前面, 而且前面的几个解都很ugly而且不好使..于是在此记录一下^_^)

参考资料: https://bbs.archlinux.org/viewtopic.php?id=55901

ArchLinux 使用 netcfg 建立 Ad-hoc 热点共享上网

为这个问题Felix搜索了一圈, 几个页面上的方法各有问题, 结合自己以前使用Ubuntu里dnsmasq的经验, 拼凑起来成功实现了, 于是就留下这篇笔记啦~
netcfg的前期配置这里不再赘述, 有需求的盆友请移步ArchWiki 🙂

新建Ad-hoc热点样例:

CONNECTION="wireless"
INTERFACE="wlan0"
SECURITY="wep-old"
IP="static"
ADDR="<本机IP>"
ESSID="<网络名>"
KEY="s:<密码>"
PRE_UP="ifconfig wlan0 down; iwconfig wlan0 mode ad-hoc"
QUIRKS=(prescan predown)

如果网卡不一样请修改=.=

这个配置在我这里可以完全正常工作(虽然不知为何建立的网络会多两个双引号= =|||)

接下来配置dnsmasq: 修改/etc/dnsmasq.conf:

no-resolv
no-poll
server=4.2.2.1
server=2001:470:20::2
dhcp-range=192.168.0.100,192.168.0.200,12h
dhcp-option=3,<本机IP>
dhcp-option=6,<本机IP>

注意本机IP要和上面的IP段在一个网段哟^_^
最后…至于通用的iptables和sysctl.conf…我就不说啦..哈哈~~~

Continue reading ArchLinux 使用 netcfg 建立 Ad-hoc 热点共享上网
QR Code Business Card