首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
拉勾
V2EX  ›  程序员

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

  •  2
     
  •   KasuganoSoras · 49 天前 · 5173 次点击
    这是一个创建于 49 天前的主题,其中的信息可能已经有所发展或是发生改变。

    昨天发了个帖子: 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/ 删除应用,删除成功。

    img

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

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

    img

    连上数据线,打开 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。

    img

    三、安装 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 点了,所以我打算先去睡个觉,晚(早)安各位。

    —— 完 ——

    第 1 条附言  ·  48 天前

    于是我又折腾了一下,把另一部三星 Note 3(N9008V)也装上了 Linux Deploy

    img

    但是这部就比较蛋疼了,它不支持 Aarch64,CPU 是高通骁龙 800,只支持 ARM v7。

    现在还有一部华为畅享 8e,打算也刷机 ROOT 以后装 Linux Deploy 玩

    搭个手机服务器集群(逃

    62 回复  |  直到 2019-02-01 13:39:06 +08:00
        1
    Archeb   49 天前
    真能折腾................给耐心点个赞
        2
    IllBeBack   49 天前   ♥ 1
    想起了我年轻的时候,那时候玩的是 多普达
        3
    irainsoft   49 天前
    Play Store 里有一些 lnmp 的 app,之前各种试过,有一两个还是能用的
        4
    yuikns   49 天前
    感觉现在玩 raspberry pi 的不太多了啊。手机性能好太多,没有串口大多数时候似乎也没那么重要了
        5
    Trumeet   49 天前 via Android   ♥ 3
    何必呢,Raspberry Pi 都会好点
        6
    asdqaz   49 天前 via Android
    国内服务器才需要备案
        7
    precisi0nux   49 天前 via iPhone
    搭个 hexo 直接用 github pages 不就好了。
        8
    Hazurt   49 天前
    自家宽带搭网站安全么?试着在自家搭了几个网页,偶尔有顺着 ip 造访的,比较担心路由出现问题影响正常使用。
        9
    xiri   49 天前 via Android
    额,,,你花了那么长的时间编译 php 和 mariadb,结果搭了个静态博客?
    搭静态博客不是编译个 nginx 就够了嘛,,,,,,
        10
    KasuganoSoras   49 天前
    @Hazurt #8 这些通常是扫爆的,只要网站自身做好防护,屏蔽掉不用的端口即可
        11
    LokiSharp   49 天前 via iPhone
    用 Ubuntu 就没自己编译的事情了
        12
    Wyane   49 天前
    先收藏了,有机会试试看
        13
    KasuganoSoras   49 天前
    @xiri #9 为了搭建一个 Pterodactyl 翼龙面板,这个是 PHP 写的
        14
    xuanbg   49 天前
    装个 docker,然后就没有那么多环境问题了。。。
        15
    huangdayu   49 天前
    点赞
        16
    hly9469   49 天前 via iPhone
    为什么不 docker …
        17
    Kazuhira   49 天前 via Android
    centos 的话尝试一下 ius 源?
        18
    lzj307077687   49 天前
    想起上次树莓派 3b 装完 centos7 装 lnmp
    php 编译了 3 小时....
        19
    MKDJOJO   49 天前 via Android
    不试试 ksweb ?
        20
    guoyuchuan   49 天前
    6
        21
    dajj   49 天前
    termux 了解一下 ,简直轻松,不用 root
        22
    mikukonai   49 天前
    很酷

    在我看来,手机实际上就是一个带电池和蜂窝网络的树莓派
        23
    wxl1380610   49 天前
    生命在于折腾
        24
    chickplilita   49 天前
    10 块钱上淘宝搞了个解锁码
    这个有没有关键词,随便搜索一家都行么
        25
    aLazarus   49 天前
    不知道三星的 Linux on dex 怎么样
        26
    imaple   49 天前
    厉害啊
        27
    fyibmsd   49 天前 via iPhone
    装个 termux 几分钟的事
        28
    whypool   49 天前
    linux deploy 装 debian 跑了快 1 年了,各种爬虫还有那啥图

    手机是 5 年前的酷派,安卓 4.4,刷了精简版的原生 rom
        29
    RangerWolf   49 天前
    没折腾过, 问一个很弱的问题: 请问输入命令, 你是如何输入的?
        30
    RangerWolf   49 天前
    刚不小心直接发出去了, 是直接在手机屏幕上输入? 还是可以通过外接键盘输入?
        31
    CRUD   49 天前
    @RangerWolf #29 adb 电脑连接手机
        32
    Variazioni   49 天前
    666。。看到了我年轻时候的样子。。现在年纪大了。熬不动了。。
        33
    OMGZui   49 天前
    老哥,很 6,其实 docker 可以省很多事
        34
    jookr   49 天前
    1、请问你是怎么实现访问 http 跳转到 https 的呢
    我见你 http 打开跳转
    http://183.136.132.126/renwal.html
    在源码里没有跳转的代码是怎么跳转的呢?
    2、手机的 IP 是固定的?域名怎么做解析的?
        35
    Techzero   49 天前
    @jookr
    1. nginx rewrite
    2. ngrok 或 frp 等
        36
    yomuse   49 天前 via Android
    想起以前用小米 2 搭了个博客😁
        37
    shengyu   49 天前 via iPhone
    arm 的还编译......二进制包性能不知道高到哪里去了
        38
    a22271001   49 天前 via Android
    这个 app 了解一下…… https://www.coolapk.com/apk/xiaoqidun.anmpp
        39
    KasuganoSoras   49 天前
    @xuanbg @hly9469 @OMGZui 因为 Linux Deploy 本身就是个容器,而容器里是无法再运行容器的……所以 Docker 不能用。
    @Kazuhira #17 我用的阿里云的源,还可以吧
    @chickplilita #24 直接搜索 华为解锁 就行了
    @RangerWolf #29 用 JuiceSSH 软件
    @jookr #34 跳转不了,所以我才说要用 https 访问,因为 http 访问会被机房拦截(不过如果你说的是 301 怎么跳转,可以用 Nginx rewrite 实现),然后外部访问是通过 Frp 内网穿透实现的。
    @MKDJOJO #19 ksweb 我有,而且买了专业版,但是感觉自由度还是不够高,而且运行不了 Frp 客户端。
    @shengyu #37 Mariadb 官方没有提供 ARM 的二进制包,所以只能自己编译了……
        40
    MaxSecurity   49 天前
    老哥牛逼!!这耐心杠杠的。。。
        41
    defunct9   48 天前
    顶,这个东西不容易
        42
    skylancer   48 天前
    就没搞懂为什么用-k 来卸 App
    "-k: keep the data and cache directories around after package removal"
        43
    KasuganoSoras   48 天前
    @skylancer #42 -k 是这个用处吗,我之前以为是强制执行
        44
    skylancer   48 天前
        45
    libook   48 天前
    过程挺有趣的。

    Google Play Store 上有个 Servers Ultimate,打折的时候入了,推荐给楼主,有些好想法可以更方便实现。
    https://play.google.com/store/apps/details?id=com.icecoldapps.serversultimate&hl=zh
        46
    KasuganoSoras   48 天前

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

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

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

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


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

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

    望赐教 谢谢
        57
    KasuganoSoras   48 天前
    @jookr #56 机房拦截的未备案页面,会直接给你一个 Header Location: http://183.136.132.126/renwal.html
    直接将请求 302 跳转到这个页面去了
        58
    ShaoMing   48 天前 via Android
    生命在于折腾啊
        59
    wohenmang   48 天前
    这个移动服务器很酷
        60
    uorz   48 天前 via Android
    用 termux 正解
        61
    mostkia   48 天前
    @jookr 国内机房普遍都有白名单机制,会过滤进入 80 端口的所有流量,如果不在白名单的话,拦截的拦截(直接报错),跳转的跳转(强制转到备案提示页面),流量不会到达你的 nginx 或者 apache 服务器上,所以你自己服务器上的跳转规则是不生效的,但好在主机商一般不会拦截 443 端口(人家也是要恰饭的,一般都睁一只眼闭一只眼),所以直接访问 443 端口是可行的,但回到主题,如果想要从 80 直接跳转到 443,那是做不到的(因为刚刚说了,请求没有到你的服务器就被处分掉了,所以你的规则不生效)。除非上 HSTS 在浏览器阶段就自动跳转,那是可行的。
        62
    liyunbo   47 天前
    哇 大佬,我用电脑搭建网站还有点费劲,大佬已经在手机上搭建成功,另外我在家的电脑上搭建网站,只能用端口映射,比如 www.baidu.com:8814
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3903 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 27ms · UTC 03:51 · PVG 11:51 · LAX 20:51 · JFK 23:51
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1