Category Archives

13 Articles

解決Android 6.0 Marshmallow中Xposed的模塊列表為空

2   514 轉為簡體

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   1894 轉為簡體

分享一個使用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   2955 轉為簡體

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   67224 轉為簡體

借給同學之後自己把密碼忘了……雅蠛蝶……可惜沒把顯示屏帶回來,查了一圈之後靈機一動(* ̄▽ ̄)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   2713 轉為簡體

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

效果