成功用手机搭建了一个博客,分享一下辛酸曲折的安装过程

2019-01-31 03:55:11 +08:00
 KasuganoSoras

昨天发了个帖子: https://www.v2ex.com/t/531762 尝试了一下在华为畅享 8 上安装 Linux Deploy 运行 CentOS 7 ARM,然后安装 LNMP。用了几个小时的时间终于是装好了,现在正常运行中。

博客地址: https://blog.tcotp.cn/ 是一个 Hexo 的静态博客。

使用 Sakura Frp 做了内网穿透,因为是国内服务器,没有备案,请用 https 访问。

下面介绍一下安装经过,篇幅较长,慢慢看

一、刷机

之前这部手机是装电信宽带送的,送了我两部,另一部比较小拿来听歌用,这一部比较大用来备用(我平时用的是华为 Mate8 和另一部 iPhone 6s)。去年这部畅享 8 就拿到手了,当时在百度和 Google 都没有 Root 的方案,但是我花了 10 块钱上淘宝搞了个解锁码,成功把手机解锁了。

前天晚上 12 点多,无意中在华为的花粉俱乐部发现有人发了个带 Root 的 ROM,感觉不错就下载下来试着刷了一下,刷完正常开机,感觉还是 OK 的,但是很快我就发现没这么简单!主屏翻了一页以后,看到了一大堆预装软件,并且是删不掉的!这就很蛋疼了。于是我尝试用幸运破解器删除,结果发现没有作用。再次尝试使用 RE 文件管理器手动进入 /system/app/priv-app/ 删除应用,删除成功。

刚想着终于除掉了这些预装应用,可以开始玩耍了,打算重启插个手机卡。卡插上去,开机,发现卡在第一屏了,一动不动,强制重启,按住电源键 + 音量上,进入 Recovery,恢复出厂设置,格式化 Cache 分区,再开机,依然进不去。无奈只能重新刷一次机,刷完之后按照上面的步骤再次尝试删除预装应用,结果还是发生了无法开机的情况!一脸懵逼,于是我再尝试直接修改 system.img ,删除掉预装应用再刷机,结果刷完直接开不了机……服了。

再回到花粉俱乐部,寻找相关解决方案,再次发现了这个作者发的另一个刷机包,和之前那个不同的是,这个是基于 215 版本制作的,而我之前刷的是 211,抱着试一试的态度我又尝试下载了这个刷机包。刷完了以后,又准备开始卸载预装,这回我没有用手动删除文件的方法,因为我突然想起来一个好方法:adb。

连上数据线,打开 USB 调试模式,adb devices 列出设备,然后 adb shell 连接终端。这时候需要打开 SuperSU,因为不启动它的话权限申请提示框不会弹出来。回到 Shell,输入 su 提升到 root 权限,接着用幸运破解器查看想要卸载的软件包名,例如预装了个 360 安全卫士,包名是 com.qihoo360.mobilesafe,使用命令 pm uninstall -k --user 0 com.qihoo360.mobilesafe 强制卸载它,OK,卸载成功。

很快,所有预装的垃圾软件都卸载了,尝试一下重启手机,正常启动,正常进入系统。

二、安装 Linux Deploy

装完机,安装谷歌三件套,然后在 Google Play 下载 Linux Deploy。下载完后,配置容器环境,储存模式为目录,然后开始执行容器安装,安装只用了几分钟,然后点击启动,出现了几个 fail,然后尝试连接 SSH,失败。

一开始以为是架构选错了,但是查了一下畅享 8 的高通骁龙 430 是支持 Aarch64 的啊……于是换成了 armfs 再尝试安装了一次,还是失败。最后想了一下,是不是储存模式不能是目录?于是换成了镜像模式再试一次,这回成功安装和运行,全部显示 done。

三、安装 LNMP

一开始打算用 OneinStack 的,但是发现安装到一半就报错,看起来是不支持 ARM 设备。

于是打算用 yum 安装,结果发现软件版本都太老了…… PHP 版本居然还是 5.2,Nginx 还是 1.12 ,只好自己来编译了。从官网下载 PHP 源码开始编译,下载的版本是 7.3.1,首先 configure 用了两分钟,然后提示缺少 libxxxx,用 yum 命令安装,然后再执行 configure... 又提示缺少 libxxxxx... 一共执行了十几次 configure,耗时接近 40 分钟。

接着是编译 PHP,make 第一次用了二十多分钟,最后编译失败,换了个参数再次编译,用了半个多小时,编译成功。然后安装 Composer,结果发现执行 require 的时候提示要 php_zip 扩展,于是我又得去编译个 php_zip 扩展,结果编译的时候提示我需要 libzip,只能用 yum install libzip,安装完再编译又提示版本太低!!!又得去官网下载最新版的 libzip,编译的时候又提示需要 cmake !!!又去下载编译了一个 cmake ……前前后后总共用了两三个小时!

终于把 cmake 装好了,开始编译 libzip,编译成功了!接着开始编译 php_zip 扩展,结果编译失败!仔细看了看报错,再复制到 Google 搜了一下,并没有什么结果,于是看了看源码报错的地方,注释掉了两行代码,再次编译成功了(但是不知道这样会不会出什么问题)

好……我忍着终于把 Composer 装好了,然后安装 Mariadb 和 Redis,因为官方提供的二进制版本没有 ARM,只能自己编译,下载了几十 MB 的源码开始编译,耗时 1 小时 35 分钟编译完成。

配置 LNMP

由于是运行在容器里,当执行 systemctl 或者 service 类的命令时,都会提示 Running in chroot, ignore request. 这个问题是没法解决的,只能在前台运行。

于是使用 screen 将 mariadb 和 redis 放在后台运行,接着是各种蛋疼的配置,使用了 php-fpm 运行,我找了我另一台机子的 php.ini 复制过来,改一改配置就可以了。

Mariadb 我是第一次用源码编译安装,所以装的时候一脸懵逼,上 Google 找了很多安装教程,用了二十多分钟搞定了。

小插曲

我为了能够读取手机本身的文件,设置了将 / 挂载到容器的 /mnt/rootfs,结果我在容器里手贱执行了一下 chmod -R 771 /mnt/rootfs/data/*

然后……然后我发现我手机几乎所有的应用都打不开了……我慌的一批

好在系统设置还能打开,进入设置启用 adb,然后电脑链接,定位到 /data 下,执行 chmod -R 777 ./ 成功挽救。

搭建网站

一开始装了个翼龙面板,这是一个游戏管理面板,装来没啥意义,只是截图给群里那些人看看,装逼用 2333

然后就没有然后了,装完面板就是第二天的中午 12 点了,我通宵了 12 个小时!一觉醒来就到下午 6 点了,起来随便吃了点东西继续研究,然后想着搭个博客玩玩,于是装了个 Hexo,很轻松,几分钟就搭建好了。

总体而言,安卓机 Root 了以后可玩性还是很高的,特别像我这种喜欢捣鼓各种设备的人来说是最好的。各位有兴趣的话也可以试试,利用自己闲置的手机来搭个小网站之类的还是可以的。

写完这篇帖子,又快 4 点了,所以我打算先去睡个觉,晚(早)安各位。

—— 完 ——

11381 次点击
所在节点    程序员
62 条回复
defunct9
2019-01-31 13:16:28 +08:00
顶,这个东西不容易
skylancer
2019-01-31 13:32:41 +08:00
就没搞懂为什么用-k 来卸 App
"-k: keep the data and cache directories around after package removal"
KasuganoSoras
2019-01-31 13:38:19 +08:00
@skylancer #42 -k 是这个用处吗,我之前以为是强制执行
skylancer
2019-01-31 13:41:46 +08:00
libook
2019-01-31 14:03:12 +08:00
过程挺有趣的。

Google Play Store 上有个 Servers Ultimate,打折的时候入了,推荐给楼主,有些好想法可以更方便实现。
https://play.google.com/store/apps/details?id=com.icecoldapps.serversultimate&hl=zh
KasuganoSoras
2019-01-31 14:04:53 +08:00

@libook #45 这个很早就入了,Play Store 上几乎所有类似的软件我都试了一遍,最后感觉还是 Linux Deploy 好玩
TaoQAQ
2019-01-31 14:09:24 +08:00
我用 Android 手机部署接口,自己内网访问调用,就是没上内网穿透
uptime
2019-01-31 14:19:45 +08:00
就算不用 docker,用 ubuntu 或 debian,安装环境只需要 apt install 十分钟,并且根本不需要你想,搭建静态加 caddy+插件 filebrowser 只需要一分钟。filebrowser 足够你需要的文件管理。

还有,真那么喜欢折腾,花 80 块钱买个 n1,比你手机强太多了。
KasuganoSoras
2019-01-31 14:28:04 +08:00
@uptime #48 我当然知道,CentOS 用 yum install 也是几分钟就完事,但是版本太老了,而且我有些自定义扩展需要安装,只能自己编译,另外我也不是只搭静态博客,如果只是个静态博客 yum install nginx -y 就搞定了,我还需要跑一些其他的服务。

n1 要插电,而手机可以带着走,自带电池 + 蜂窝移动网络,还能打电话
(其实我都有几台 E5 服务器了,搞个这个只是好玩而已)
uptime
2019-01-31 15:12:34 +08:00
@KasuganoSoras #49 所以我说了 ubuntu 和 debian 啊,ubuntu 18.04 版,直接 apt install 就是足够新的 php7.1 版本,真心不明白,为什么用老掉牙的 centos ?为了编译的乐趣?
KasuganoSoras
2019-01-31 15:15:45 +08:00
@uptime #50 因为我是 CentOS 党(笑
目前全线机器都是 CentOS 7,可能和我喜欢玩看门狗有关吧( ctOS ?)反正对 CentOS 莫名好感
thet
2019-01-31 15:21:57 +08:00
我在手机上弄了个静态服务 app,然后用 ipv6 直连也可以
wangfei324017
2019-01-31 15:31:57 +08:00
大佬,牛逼,会玩,摩拜
keepeye
2019-01-31 15:35:11 +08:00
那个免费内网穿透平台,高中生做的,00 后好厉害啊
blackmirror
2019-01-31 18:45:16 +08:00
termux termux termux
jookr
2019-02-01 00:11:45 +08:00
http 解析到国外不用备案的空间,设置跳转到 https
https 解析到国内不封 443 端口主机展现内容
这样?

那如何怎么实现这种解析的呢?


“ http 访问会被机房拦截 ”
对 我知道被拦截了
但是我在 http 的源代码里没看到有跳转到 https 的代码呢?
运营商设置自动跳转到 https 的吗?

我就是搞不懂你这 http 是怎么实现自动跳转到 https 的

望赐教 谢谢
KasuganoSoras
2019-02-01 00:29:43 +08:00
@jookr #56 机房拦截的未备案页面,会直接给你一个 Header Location: http://183.136.132.126/renwal.html
直接将请求 302 跳转到这个页面去了
ShaoMing
2019-02-01 01:29:01 +08:00
生命在于折腾啊
wohenmang
2019-02-01 02:47:55 +08:00
这个移动服务器很酷
uorz
2019-02-01 07:40:23 +08:00
用 termux 正解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/532019

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX