Category Archives

13 Articles

解决Android 6.0 Marshmallow中Xposed的模块列表为空

0   88 转为繁体

Solve Xposed module list become empty on Android 6.0 Marshmallow

English Version

升级Nexus5 到6.0.1 (M4B30Z, Dec 2016)之后,Xposed的模块列表变成空的了,所有的模块也都失效了。没有xposed,怎么种庄稼。于是我打开logcat看了一眼。

rovo89在xda的QA帖中说一般情况下这个文件会在启用任意一个模块后创建。然而现在它并没有被创建。于是我去建了一个,然后chmod 644以及chown到应用到uid(可以通过启动应用之后ps|grep xposed查看uid,形如u0_a??),重启了一下,再瞄了一眼logcat。

好像哪里不对

想起来Android从萝莉棒开始SELinux就是enforce了,所以大概是这个问题。(我们可以通过dmesg|grep audit来查看被SELinux过滤的各种奇怪操作。)于是看了一下默认的文件context和我们刚创建的文件的context:

那么我们把这个conf/modules.list也改成u:object_r:app_data_file:s0:c512,c768这个context好了

restorecon是toybox中带的一个applet,我们也可以用chcon来手动更改context。


Recently I found module list in Xposed become empty after I upgrade my Nexus5 to 6.0.1 (M4B30Z, Dec 2016). And all the modules are not activating. So I open logcat and see the following:

Rovo89 said on a xda post that this file should be created if any module is activated. But somehow it didn’t do so on my Nexus5. So I create one myself and set correct permission (0644) and uid (you can run the Xposed Installer app and check the uid through ps |grep xposed). Then I reboot and check logcat again:

Looks like it’s still not working.

Then I realise that Android started to set SELinux to enforce from Lollipop (5.0) so this should be the problem. (We can use dmesg|grep audit to check if the problem really related to SELinux. ) I compared a random file under /data/data to the file we just created:

So all we need to do is to change this conf/modules.list to u:object_r:app_data_file:s0:c512,c768 as well

restorecon is a applet shipped with toybox, we can also use chcon to manually set SELinux context.

一个使用Cloudflare API v4的动态DNS脚本

0   1555 转为繁体

分享一个使用Cloudflare API v4的动态dns脚本(Gist地址本地下载)。

因为11月Cloudflare就要下线v1版本的API了,而Openwrt里的ddns-scripts并没有支持新版[摊手],所以自己写了一个。

仅依赖curl(可以改成wget)。支持v4和v6。会请求ip.yooooo.us得到公网IP地址,怕隐私泄露的可以自己搭一个

 

This is a DDNS script using Cloudflare APIv4 written in bash (Gist or Download directly).

I wrote this because Cloudflare is going to remove support for the old API on Nov. this year. And the ddns-scripts package in Openwrt is not yet supporting the new API [摊手].

This script only depends on curl (can be modified to use wget). It will use ip.yooooo.us to query IPv4 and IPv6. You can use this link to set up your own query server.

升级到Ubuntu16.04,开始接受systemd的调教

7   2443 转为繁体

sudo do-release-upgrade -d

然后进入看戏模式

OpenVZ

openvz(打满补丁的)内核2.6.32-042stab111.X之前不支持220以上版本的systemd,而16.04用的是229,所以升完之后你会得到一个没有systemd存在的美好世界。

只是因为systemd启动不了,所以开机启动项也都不启动了,你得去serial console里手动设ip和route。所以还是发个tk让客服去升级母鸡内核吧www

 

udev

system-udev会自动把网卡名字改成奇怪的em0或者ens0什么的,详情见这里

反正systemd说什么都是对的,所以兄弟请干了这碗热巧克力

可以修改/etc/default/grub 的GRUB_CMDLINE_LINUX,改成:

biosdevname=0

就可以继续使用eth0命名了

 

mysql-apt-config

mysql的官方apt源里还没有支持16.04,而update-manager会尝试将sources.list.d里的源都替换成xenial去更新,所以可能会因为mysql的源没有candidate而报错。

解决办法就是先把/etc/apt/sources.list.d/mysql.list改个扩展名,升完再改回去,然后把里面的trusty改成xenial。这样(mysql支持以后)就可以收到16.04的更新了。

 

update-manager的编码问题

哈哈哈哈哈哈哈哈哈哈哈哈哈哈我先笑一会

add-apt-repository的时候这个问题就存在,如果ppa源的标题带有奇怪的字符会报错。因为Python3是根据当前LC_ALL来自动选择codec的。

然后update-manager也会死在同一个地方,所以记得先export LC_ALL=posix,再sudo do-release-upgrade -d,再喝茶

树莓派忘记登录密码怎么办

6   66752 转为繁体

借给同学之后自己把密码忘了……雅蠛蝶……可惜没把显示屏带回来,查了一圈之后灵机一动(* ̄▽ ̄)y

如果你有显示屏+USB键盘

  • 将SD卡插入电脑(windows下只挂载boot分区)
  • 打开boot分区,编辑command.txt(注意不要用记事本,可能会换行符坑爹)
  • 在第一行末尾加上init=/bin/sh,完成后大概是这样
  • 插卡,重启,连接键盘显示器
  • 出现shell后用passwd更改密码

没有的话呢?

  • 想办法让电脑和树莓派连通,可以用路由器,或者电脑装个dhcpd等
  • 生成一对密钥对,注意必须是openssh兼容格式而不是putty等密钥格式
  • 使用一个流行的linux发行版,将SD卡插入电脑;如果是老旧的版本,你可能需要手动挂载SD卡里的ext4分区
  • 进入/分区,在/root下建立一个.ssh文件夹(如果没有的话),并chmod 700
  • 在/root/.ssh/下建立一个文件authorized_keys,并chmod 600
  • 将公钥内容写入新创建的文件中
  • sync,umount
  • 插卡,重启,ssh使用root账户连接,并指定刚才的私钥
  • passwd修改密码

awk(又是awk)高亮显示nginx日志

7   2492 转为繁体

请叫我awk小(nao)王(can)子(fen)

效果