(一)专题介绍:移动端安卓手机改造成linux服务器&linux服务器中安装软件、部署前后端分离项目实战


前言

总体概述: 本篇文章隶属于“手机改造服务器 部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇 来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目,以及内网穿透实现外网访问等全过程。具体内容见各篇介绍。
~
本文目的:本文旨在分享如何实现将一部手机改造成linux服务器,改造后的Linux中软件的安装,以及 整个过程中碰到的问题和解决方案,重点关注点在于记录实现过程中踩到的坑。所以大家可以根据自己的情况,选择性阅读本专栏的各篇文章及内容。


写前小插曲:
相信大家平时一般都是通过购买服务器、域名来做点事情,不出意外 俺之前也是zai样子搞,但是想想每次都得掏钱买服务器才能搞事情,我就肉疼万分哈哈哈。其实我之前就一直有想法将自己的手机整成一个Linux服务器,体验一把不用掏钱就能拥有一台自己的服务器,然后在上面尽情造作的快感比如在上面部署个项目啊什么的。你不妨跟我一起想一下这个场景:有一台属于自己的个人服务器随身携带着,时不时的远程连接上操作一番是不是贼爽,重点是既提升了Linux技能,又掌握了Linux平台下安装软件、开发与部署项目等等,是不是想想就很nice!

咳咳,言归正题,想法归想法但光想也没鸟用。身为一名普通打工仔,平时一直忙于给老板打工从不敢摸鱼,生怕老板的宝马变青桔 hahaha…所以抽不出身来落地实现这个想法。这不最近挤啊挤终于海绵里挤出了一丢丢时间,一不小心就将我的手机改造成了一台Linux服务器(Debian Linux)。对,你没听错,这不是在做梦,是真的实现并体验了一番!当然了,至于怎么整成Linux不是本文的重点内容,本文重点在于记录一下移动端手机改造成Linux服务器后,Linux中安装软件过程中踩到的各种坑,同时总结整理出正确可行的方法,分享出自己的心得,希望能帮助到更多有同样需求的朋友少走弯路,快速实现目的,从而腾出更多的时间来做自己喜欢的事情,比如喝着java享受生活。


一、涉及到的相关技术简介

本栏目专题涉及到的关键词主要有:Linux 、Java、MySQL、Nginx、Redis等,但对于它们及相关的技术在此就不作介绍了,姑且认为读者已具备并掌握相应技术,本文的主角是Linux与MySQL。

Linux: 我们都知道Linux是一套免费使用和自由传播的类Unix操作系统,因此有许多分支发行版及衍生版本。Linux支持多用户、多任务、多线程和多CPU,在安全、稳定、性能等诸多方面都有优势,多用作服务器操作系統,想必大家在实际工作开发中都亲身接触感受过它的魅力吧。
作为 Linux界的第一个发行版,Debian是活跃开发中最古老,最稳定的 GNU/Linux 发行版之一,同时也是社区类Linux的典范,是迄今为止最遵循GNU规范的Linux系统。因其优良的稳定性及灵活扩展性,使得它在很多方面都是一个理想的环境:桌面、服务器、测试、开发… 所以本专题所有文章中提到的Linux均指的是Debian Linux。

MySQL: MySQL是一款非常优秀的关系型数据库,因为其速度、可靠性和适应性而备受关注,很多大型网站都是用Mysql作为数据存储,本文将较为详细的记录安卓手机Debian Linux上安装mysql5.7的艰难历险记。

二、具体实现过程及踩坑杂谈

1.安卓手机改造成linux系统实现方案

对于Linux系统的使用,我们常见的做法是按需付费购买一定配置的服务器,或是通过虚拟机安装、当然只要足够任性还可以直接购买一台硬件服务器等等。不过这些基本都是PC端体验的,如果购买服务器就要花钱才能拥有而且还得持续花钱哈哈哈(不然到期了什么都没了);如果选择安装虚拟机然后在虚拟机上安装Linux,相信时间长了你就会慢慢嚼着这种方式体验不爽(实体机得一直开机着、启动慢、虚拟机占用内存大、使用过程中可能会卡顿等一系列问题)。因此,喜欢折腾的我开始踏上了研究探索新的体验方式之路-----“将手机改造成Linux服务器”,所以才有了大家看到的这篇文章。在整个实现过程中收获颇多,也学习到了很多相关的知识,所以决定出一个系列专题,分篇分享自己的所思所得。

目前手机端体验Linux大致有两种实现思路:

  • 通过刷机直接将手机刷成Linux。由于安卓手机本身就是在Linux基础上进行的二次开发,所以安卓系统用的就是linux内核,本质上就是精简版的Linux,但这种方式有点繁琐大多需要root,适配的驱动等;
  • 通过安装软件来模拟Linux环境。市面上这类软件有很多比如Termux、zerotermux、aidlearning、AidLux等。本人采用的是第二种虚拟化方式来实现,具体采用的是AidLearning的商业版本—AidLux。为撒子选择AidLux?别问了问就是最好用哈哈哈我不是托说的是大实话。AidLux是基于ARM架构的跨生态(Android/鸿蒙+Linux)一站式AIoT应用快速开发和部署平台APP,通过共享 Linux 内核实现了Android 和 Linux 生态融合,这就是说能够为单一设备同时提供Android和Linux运行环境,所以我建议大家使用AidLux,而且AidLux本身就是一个Linux平台,而Termux这些需单独安装Linux系统,并且AidLux拥有可视化界面,可在PC端控制AidLux,方便很多。

2.改造后的手机Linux中软件的安装

手机改造成Linux系统后,我们便可以进入Linux系统上手体验了…期待的搓手手。以AidLux为例,可以直接在手机端进入到Linux系统进行操作,也可以通过AidLux提供的文件浏览器功能,在PC端浏览器输入手机ip:8000端口访问,或者采用传统方式通过XShell等远程工具连接到Linux。进入Linux系统之后就可以在里面安装软件、配置环境之类的从而为部署网站部署项目等做好准备工作。

Linux系统中安装软件的方法有好几种,但是从本质上来讲大致有三种类型: 通过Linux系统的包管理工具安装(如yum,apt等,具体取决于Linux发行版类型)、通过二进制包安装、通过源码编译安装。

  • 包管理工具安装: Linux系统中大多数软件的安装可以通过此命令工具安装。如果你的Linux是RedHat红帽系列如RHEL、Fedora、Centos等,则可以通过输入yum install 软件名 直接安装即可;如果是Debian系列如Debian、Ubuntu、Mint等及其衍生的版本,则通过apt/apt-get install 软件名 安装。 这种方式安装的优势/好处在于它在执行安装过程中可以自行解决包依赖问题不用我们自己来处理依赖关系。
  • 二进制包安装: 对于有些软件 包管理器工具上是没有的,不能通过apt等直接安装,这时候就可以用二进制包方式安装了。二进制包是预先在linux机器上编译好并打包好的文件,是别人制作好的可以直接安装或者直接使用的软件包,类似于windows里的.exe,具体来说就是.exe文件是适用于windows平台的二进制包;deb包是适用于ubuntu等linux平台的二进制包;RPM包是适用于redhat系列Linux的二进制包。所以Linux系统中 二进制包安装方式根据是否需要安装又分为两种:
    解压即可用(类似于Windows平台绿色版软件)。如oracle jdk 的安装,下载压缩包解压后配置好环境变量即可;
    另一种是通过安装脚本或安装向导程序完成安装。如下载解压后的rpm包、deb包等 需要使用rpm命令、dpkg命令等包管理工具来安装。由于这种方式运行的是编译好的可执行二进制文件,快捷方便 但是也有缺点,比如安装的环境必须与编译时的环境一致或者相当;包与包之间存在着相互依赖的情况;卸载包时需要先把依赖的包卸载掉,如果依赖的包是系统所必须的,那就不能卸载这个包,否则会造成系统崩溃。总之rpm方式方便是方便但是安装过程中如果出现多级包之间依赖的情况需要自己处理依赖,而且rpm包里各个rpm文件安装顺序不能随意修改。
  • 通过源码编译安装: 编译安装可以根据需求来定制软件, 可以指定安装路径, 可以指定某些模块的功能开启或者禁用,但是这种方式操作起来稍显复杂,感兴趣的可以自行去研究。

温馨提示:
最后特别要强调的一点是:
在Linux中安装软件时,不管使用哪种方式去安装,一定要下载与你的linux系统CPU架构匹配的安装包!这句话很重要,后面还会再次提到并进行详细解释,虽然没必要圈起来,而且考试也不会考hahaha,但是相信读完这篇文章后你就会彻底明白有多重要。

本人当时就是因为这个问题在安装MySQL5.7时踩了不少坑浪费了不少宝贵的时间。但话说回来任何事情都有两面性,虽然失败的感觉很让人受挫,但是这个过程中可以收获很多意想不到的知识与技能,可以很好的积累经验正所谓吃一堑长一智!接下来我将围绕这个问题展开,详细跟大伙儿唠唠我的踩坑历险记。。。。

3.手机Linux中安装MySQL5.7踩坑实录

在安装软件这件事上,其实AidLux做的挺到位的,因为AidLux作为一款智能物联网(AIoT)应用开发和部署平台,提供了具有统一交互体验的跨平台图形化界面的完整linux系统,使安装了AidLux的设备可为用户同时提供Android和Linux运行环境,所以我们在此Linux中安装软件可以像在安卓系统上一样 通过应用中心或命令行的形式安装运行海量Linux软件、编程语言及框架等,也可以根据自己的需求自行安装指定版本的软件。

当时在安装JDK等其他软件时都没啥毛病,后来在安装MySQL时,本来可以直接通过AidLux提供的命令或应用中心下载安装,但不幸的是AidLux中提供的mysql其实是mysql的一个分支:MariaDB。考虑到我项目中经常使用的数据库是MySQL5.7,虽然这两个是兼容的应该影响不大,但是偏偏这个时候我强迫症老毛病又犯了,就想安装个MySQL5.7你说气人不hahaha,,,,但是很遗憾的发现oracle官方提供的安装包都是amd的(未提供arm/aarch64的任何形式的安装包),所以只好下载了amd64的包,而且主要是 当时对这个问题认识还比较模糊,所以并没有意识到问题的严重性没有想到会给自己带来这么多麻烦…吐舌头,以至于接下来我各种能尝试的方法都试遍了,能参考的博客什么的都翻了个底朝天恁是死活装不成功。不管是apt,apt-get,rpm,dpkg等之类的命令大法,还是二进制安装包,不管是下载deb包,rpm包通过命令自动安装,还是下载deb包,rpm包的各个deb/rpm文件手动顺序安装,不是在安装过程中提示Unable to locate package(根据网上说法换了各种源都没解决,又安装了其他工具命令等等之类的方法结果统统都无济于事),就是执行中途各种报错,最让人崩溃的是前几步都成功了到关键的最后一步给你报错(气的差点当场去世)!中间的无数次报错经历我就不列举了。

最后在一个论坛里找见了一种解决办法,说是通过命令sudo dpkg --add-architecture amd64即可,尝试后的确原来的报错不见了可是新一轮的问题又来了:提示缺少依赖,恐怖的地方在于这种依赖简直就是黑洞式依赖,层层多级依赖(后来我想大概因为本身是arm64架构的,现在添加了amd64,虽然安装包支持了但是系统上没有任何amd64的底层lib库文件),直接让人安装到怀疑人生,差点就要将电脑大卸八块了!!!

你以为坎坷这就结束了?NoNoNo折磨还没完呢,请耐心 听我说谢谢你 啊呸说错了,是耐心听我继续放哈哈哈,话说最后的最后,山穷水尽疑无路,以为柳暗花明又一村,我琢磨着既然安装方式都不行,那我能不能找到一个二进制免安装版的捏(前面讲到过),于是找啊找啊找网上找到了二进制免安装的,心里开始暗自欣喜并告诉吉几马桑要成功了准备拥抱世界吧!结果,,谁知正当我配置好mysql的配置文件my.cnf之后 自信的敲下./mysqld --initialize --user=mysqluser…命令进行数据库初始化操作时:又报错提示:Illegal instruction,尼玛什么鬼,,, ,,笑容渐渐消失!经过又一轮百度之后,找到原因大概是非法的指令,不支持。按照网上说法,用mysql_install_db命令替换mysqld再次执行初始化时,提示: -bash: mysqld: command not found,嗯?又给劳资出了新花样?没关系换个姿势再来,于是又一顿百度:说是Linux系统会将全部用户的命令都会放在 usr/bin/ 目录下,所以系统会默认查找/usr/bin/目录下的命令,而MySQL的命令没有出现在该目录下,所以就会出现 -bash: mysql: command not found,通过拷贝或建立软链接就可以解决。经历了这么多次的挑战,我赶脚自己似乎已初具福尔摩斯秘法开始怀疑可行度了,但还是照做了,运行完ln -s /usr/local/mysql/mysql-5.7-linux/bin/mysql_install_db /usr/bin之后,忐忑的再次执行了初始化命令,呵呵果不其然又是可恶的提示:Illegal instruction!!!!!

这下你们是不是开始思考我是否还活着哈哈哈。放心,作为一名程序员,遇到bug是我们的荣幸,没有强大的内心和顽强的毅力怎么能征服bug呢,怎么能实现改造世界的梦想呢hahaha吹的有点过了,不过有首歌唱的是真好:心若在梦就在,只不过是从头再来!不经一番寒彻骨,怎得梅花扑鼻香是吧,我相信只有我们想不到的没有做不到的。

功夫不负有心人,终于在尝遍了各种方法之后,我深刻的重新又认识了一次操作系统所依赖的处理器架构,立马去了解学习了指令集、处理器架构等方面的知识。了解后可谓豁然开朗,找到了问题根源并成功解决了问题,现在回过头来看,其实问题很简单就是架构不匹配不支持!

4.手机Linux中安装软件的正确方法

在Linux中安装软件时,不管使用何种安装方式,一定要在安装前先查看确认自己Linux系统的cpu架构类型,然后下载与你的linux系统内核架构相匹配的安装包。

  • PC端Linux系统的CPU一般是x86、x86_64或amd64架构(三者其实是同一个东西不同叫法);
  • 移动端设备CPU都是使用ARM架构(arm处理器的特性决定了它非常适合在移动通信领域使用,所以目前智能手机处理器都是采用的arm的架构),所以安卓手机中的Linux是基于arm的(可以通过arch等命令查看确认)。因此,对于安卓手机端Linux系统,就得下载arm/aarch64的软件安装包,其他amd64等架构的包都是安装不成功的(因为arm架构的CPU是不支持不识别x86下amd架构的CPU的指令集的!),相信能看到这个地方的朋友,已经体会到了我尝遍百草的不易哈哈,所以可能在大家看来很不起眼的一段话,却是我经受沉痛的折磨教训之后换来宝贵经验哦。

三、Linux服务器部署前后端分离项目流程

大多数情况下,搭建服务器的目的就是来部署上线我们的项目,以提供给用户去使用,提供服务给目标用户。所以下面给出本专题的所有计划内容:Linux服务器中部署前后端分离项目全流程。大家可以结合自身需求选择阅读本专题的系列文章。

1. 前提准备(安装必要软件,搭建环境):

  • 安装jdk (常用oracle jdk1.8)
    oracle jdk1.8安装教程
  • 安装数据库(常用mysql5.7+ 或oracle等)
    mysql5.7+版本 安装教程
  • 安装Redis (非关系型内存数据库,做缓存等用途)
    zhengzai更新中,请 ==
  • 安装Nginx中间件 (做正/反向代理转发、资源压缩、负载均衡等用途)
    zhengzai更新中,请 ==

2. 前后端分离项目的详细部署过程:

  • 正在实现中,请==

总结

以上就是今天要说的全部内容,为了能尽可能的表达清楚,帮助大家更好的理解,这篇文章也是花了我将近一周的时间,不为别的,就为了将自己踩过的坑、遇到的重点问题及解决方案等记录并分享出来,从而帮助在同条路上走来的伙伴们及时止步,吸取一些经验避免再次入坑。

从下一篇开始,将正式分享改造后的安卓Linux服务器中进行 JDK 、MySQL5.7、Redis、Nginx等软件的安装和环境配置,以及前后端项目的打包、部署到手机Debian Linux系统中等等。内容持续更新中,欢迎大家的阅读,希望大家多支持哦!有不对的地方欢迎指正,我们一起奋斗一起进步吧。

  • 10
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
若依前后端分离移动端接口示例: 假设我们要实现一个简单的登录功能,前端页面包括一个用户名和密码的输入框,一个登录按钮,后端需要验证用户名和密码是否正确。 1. 定义接口 首先,我们需要定义一个登录接口,前端可以通过该接口发送登录请求,并且接收后端返回的结果。 接口地址:/api/login 请求方式:POST 请求参数: | 参数名 | 类型 | 是否必填 | 描述 | | ------ | ------ | -------- | -------- | | username | string | 是 | 用户名 | | password | string | 是 | 密码 | 返回结果: | 参数名 | 类型 | 描述 | | ------ | ------ | -------- | | code | number | 状态码 | | msg | string | 提示信息 | | token | string | 登录凭证 | 2. 前端页面 前端页面需要包括一个用户名和密码的输入框,一个登录按钮,并且需要使用 AJAX 技术发送登录请求。 HTML 代码: ```html <!DOCTYPE html> <html> <head> <title>登录页面</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css"> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <h1>登录页面</h1> <form id="login-form"> <div class="form-group"> <label for="username">用户名</label> <input type="text" class="form-control" id="username" name="username" placeholder="请输入用户名"> </div> <div class="form-group"> <label for="password">密码</label> <input type="password" class="form-control" id="password" name="password" placeholder="请输入密码"> </div> <button type="submit" class="btn btn-primary">登录</button> </form> </div> <script> $(function() { $('#login-form').submit(function(event) { event.preventDefault(); var username = $('#username').val(); var password = $('#password').val(); $.ajax({ url: '/api/login', type: 'POST', dataType: 'json', data: { username: username, password: password }, success: function(data) { if (data.code === 200) { alert('登录功'); localStorage.setItem('token', data.token); window.location.href = '/home'; } else { alert(data.msg); } }, error: function(xhr, status, error) { alert('登录失败,请重试'); } }); }); }); </script> </body> </html> ``` 3. 后端实现 后端需要使用某种编程语言和框架实现登录接口,并且需要对用户名和密码进行验证。 以 Node.js 和 Express 框架为例,后端代码如下: ```javascript const express = require('express'); const bodyParser = require('body-parser'); const jwt = require('jsonwebtoken'); const app = express(); const secret = 'mysecret'; // 解析 application/x-www-form-urlencoded 格式的请求体 app.use(bodyParser.urlencoded({ extended: false })); // 解析 application/json 格式的请求体 app.use(bodyParser.json()); // 登录接口 app.post('/api/login', (req, res) => { const { username, password } = req.body; // 验证用户名和密码是否正确 if (username === 'admin' && password === '123456') { // 生 token const token = jwt.sign({ username: username }, secret, { expiresIn: '1h' }); res.json({ code: 200, msg: '登录功', token: token }); } else { res.json({ code: 400, msg: '用户名或密码错误' }); } }); app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 在上面的代码,我们使用了 JWT(JSON Web Token)来生登录凭证,用于后续的接口调用。同时,我们使用了 body-parser 间件来解析请求体,方便后续的参数获取和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值