Archlinux更新时导入Key出错解决方案

Archlinux更新时导入Key出错解决方案

pacman -Syu 系统更新时,在下载完新的包之后出现如下错误

(20/20) checking keys in keyring                   [----------------------] 100%
downloading required keys...
error: key "A6234074498E9CEE" could not be looked up remotely
error: required key missing from keyring
error: failed to commit transaction (unexpected error)
Errors occurred, no packages were upgraded.

显示为无法导入Key
wiki中的说明如下 链接

 Outdated archlinux-keyring package.
 Incorrect date.
 Your ISP blocked the port used to import PGP keys.
 Your pacman cache contains copy of unsigned packages from previous attempts.

其实首先尝试手动更新key

pacman-key --populate archlinux

异常基本可以解决

否则就是服务器无法访问或者keyring包版本太老需要更新

erlang在OTP框架下的代码热更新

erlang在OTP框架下的代码热更新

网上有许多说原理的,但是却找不到一个完整的在OTP框架下的有关code_change函数用法的热更新

内容参考自以下网站与OTP文档
http://www.jiancool.com/article/61163151807/

实践了一下,关键的更新代码是这样

update() ->
sys:suspend(?SERVER),
code:purge(?MODULE),
code:load_file(?MODULE),
sys:change_code(?SERVER, ?MODULE, undefined, extraData),
sys:resume(?SERVER).

首先suspend暂停线程(change_code必须在暂停状态下使用。并且,暂停状态下线程不会响应call与cast,只会响应带外消息【所以主动模式TCP/UDP通信模块没法直接更新?】)
purge清除旧的模块代码(可选,但是如果不清除旧代码,在第二次更新是会出现not_purged错误并且更新失败)(其实是清除上一次更新后遗留下来的代码)(也可使用soft_purge进行软清除)
load_file加载新的代码文件
change_code调用对应进程的对应旧模块的新版本code_change回调函数来做一些转换操作(这里一般进行state状态量从旧版本到新版本的转换操作)(P:调用的是新代码的code_change函数,所以只要每次更新时在新代码中放置从旧代码到新代码的对state变量的转换函数即可)(网上就没有说清楚这个地方的)
最后调用resume恢复进程运行

树莓派Archlinux安装X11桌面环境

树莓派Archlinux安装X11桌面环境

部分参照:http://www.tommyappco.com/additions.php?req=28

BUT:我用的是Pi2 arm7版本
使用上面连接中的gdm桌面时表示慢到无法使用
而且NetworkManager和netctl好像不兼容,不能同时生效

下面是安装桌面环境的代码

pacman -Syu
pacman -S xf86-video-fbdev xorg-xinit dbus
pacman -S xorg-server xorg-utils xorg-server-utils mesa
pacman -S xorg-twm xterm xorg-xclock
pacman -S xfce4

之后可以使用startxfce4启动桌面看一看
使用logout退出桌面并查看错误输出

之后如需启动桌面环境直接执行如下指令即可

startxfce4

archlinux安装VNC服务器

archlinux安装VNC服务器

完全参照:https://wiki.archlinux.org/index.php/Virtual_Network_Computing_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29

安装tigervnc
这是一个TightVNC的linux实现

以你需要的用户身份执行vncserver第一次启动、设置密码并测试服务器
默认的是第一个桌面:1
实际端口是5900+1

如下指令可以关闭某个桌面

vncserver -kill :1

可以编辑~/.vnc/xstartup文件来设置vnc使用的桌面环境
此文件功能类似于.xinitrc
可参照xinitrc来编辑

hit:
简单的编辑方法是
注掉所有exec开头的行
并且注掉末尾最后一个exec行前面的连续几行(这几行末尾有&,是和exec同时执行的内容)
可添加如下指令在文件末尾启动桌面环境

exec startxfce4

windows下使用TightVNC连接即可

设置开关机行为

示例文件在/usr/lib/systemd/system/vncserver.service

cp /usr/lib/systemd/system/vncserver.service /etc/systemd/system/vncserver@:1.service

然后编辑/etc/systemd/system/vncserver@:1.service
可以看到其中有使用说明

# The vncserver service unit file
#
# 1. Copy this file to /etc/systemd/system/vncserver@:x.service
# Note that x is the port number on which the vncserver will run. The default is 1 which
# corresponds to port 5901. For a 2nd instance, use x=2 which corresponds to port 5902.
# 2. Edit User=
# (“User=foo”)
# 3. Edit and vncserver parameters appropriately
# (“/usr/bin/vncserver %i -arg1 -arg2 -argn”)
# 4. Run `systemctl –system daemon-reload`
# 5. Run `systemctl enable vncserver@:<display>.service`
#
# DO NOT RUN THIS SERVICE if your local area network is untrusted!
#
# See the wiki page for more on security
# https://wiki.archlinux.org/index.php/Vncserver

其实我们只需要在User=后面添加我们的用户名即可
如果有需要的话可以修改ExecStart这一项添加启动参数的方式改变行为
之后重载systemctl

systemctl –system daemon-reload

再启动服务

systemctl enable vncserver@:<display>.service

即可使用

在使用时可以发现VNC不会自动根据客户机改变桌面分辨率
所以我们可以在启动参数中设置一个分辨率

比如wiki上的示例

Vncserver 通过开关(命令行参数)来提供灵活性。下面的例子启动具有特定分辨率、允许多用户同时观看/控制且设置 dpi 为 96 的 VNC 服务。
$ vncserver -geometry 1440×900 -alwaysshared -dpi 96 :1

如需要完整的选项表,向 vncserver 传递 -help 开关。

vncserver -help

archlinux arm 树莓派设置网络连接与无线网络连接

archlinux arm 树莓派设置网络连接与无线网络连接

到手两个树莓派
其中一个装了arch
但是因为家里网络环境只有无线网络
arch默认的无线却没有wpa加密的支持包
于是便有了此文

下面是整理的内容

相关工具命令:

查看网络设备
ip link

查看网络地址
ifconfig

查看系统服务状态
systemctl

使用netctl工具的手动网络配置方法
来自:https://raspberrypi.stackexchange.com/questions/7987/wifi-configuration-on-arch-linux-arm

在/etc/netctl/examples/目录下有netctl网络连接工具配置文件的范例

从范例创建一个新的网络连接配置(以普通的wpa加密的无线网络连接为例)

从wireless-wpa范例文件创建一个权限为640的配置文件 这样的权限配置可以防止配置文件中的密码泄露
install -m640 /etc/netctl/examples/wireless-wpa /etc/netctl/wireless-home

编辑这个文件
将其中的MyNetwork和WirelessKey替换为SSID和密码
保存文件

启动配置文件
netctl start wireless-home

启动后可以ping一下进行检测

没问题之后设置该配置文件开机自启动
netctl enable wireless-home

其实netctl操作的是systemctl服务中的netctl服务
启动配置文件时真正做的事情是以配置文件启动服务
netctl start xxx
相当于
systemctl start netctl@xxx

所以当出现问题时会显示要求使用如下命令查看故障原因
systemctl status netctl@xxx

然后.如果在上面启动配置文件时遇到错误
查看服务的status时发现如下信息就可以做对应的解决方案

如果说wpa-s…什么什么的一个东西没有安装
是因为你使用的是wpa加密的无线网络
但是没有安装那个支持wpa的库 需要安装后再试

如果说这个配置文件“already up”
说明对应的设备端口已经在使用中
使用如下命令停用该设备再启用配置文件即可
ip link set 设备名(比如eth0) down

参见:https://wiki.archlinux.org/index.php/Netctl#Troubleshooting
https://wiki.archlinux.org/index.php/Network_configuration

另:如果使用有线网络的DHCP自动分配
插上网线再启动dhcpcd服务即可

另外:在配置静态IP是会遇到如下格式的IP
192.168.1.21/24
这是CIDR表示法,把ip地址和子网掩码合并到一起,可以一个ip表示一个ip簇
参见https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation
常用的255.255.255.0等价于24