前言
事情的起因非常简单,得益于某位校长的功劳,我的网络访问Github奇慢无比,最近甚至出现了push失败的情况,我连博客都没法好好更新了!(说的好像你更新得很多一样)
嘛,正好潇在给我孜孜不倦地推荐Gitea,我就来试试在树莓派上搭建一下吧。
首先我们来看官方文档:
易安装
您除了可以根据操作系统平台通过 二进制运行,还可以通过 Docker 或 Vagrant,以及 包管理 安装。
嚯,挺厉害嘛,那就图个省事,用Docker安装吧。然而这之后我才知道,这是地狱的开始。
Docker试探
安装
官方的教程非常的简单,看起来就和能用一样
我们在 Docker Hub 的 Gitea 组织中提供了自动更新的 Docker 镜像,它会保持最新的稳定版。你也可以用其它 Docker 服务来更新。首先你需要pull镜像:
1 | docker pull gitea/gitea:latest |
这时候我才发现我根本就没有安装docker,赶紧apt解决:
1 | apt install docker |
然后开始pull,这时又要忍受国内网络的龟速:
1 | docker pull gitea/gitea:latest |
受阻
尝试运行一下
1 | # root @ rasp in ~ [14:46:44] |
没有回显,不过还是先看看容器跑起来没有:
1 | # root @ rasp in ~ [14:46:54] |
喵喵喵?这尼玛是啥?看起来好像是可执行文件架构不对。。
原因分析
兔角龟毛,总之先inspect一下吧
1 | # root @ rasp in ~ [14:55:17] |
得到如下结果:
1 | [ |
进入到LowerDir看一下?
1 | # root @ rasp in /var/lib/docker/overlay2/9fce26ccc4b7e0aefe663ecb165615aadda2d2437b3ab7cafab599de5d055736/diff/app/gitea [15:18:01] |
只有一个执行文件,这时候需要请出file大法了
1 | # root @ rasp in /var/lib/docker/overlay2/9fce26ccc4b7e0aefe663ecb165615aadda2d2437b3ab7cafab599de5d055736/diff/app/gitea [15:18:02] |
やっぱり!™这个文档谁写的!头伸过来,看我不来给你加个bug,你写这个文档的时候就没考虑过其他架构的CPU的感受么!你是不是看不起ARM!!
最后的挣扎
嘛,既然这样了,摆在我面前也就三条路:
- 制作基于ARM64的docker容器
- 放弃docker
- 玩一些骚操作
首先来看看骚操作,既然它的运行依靠的是单文件,那我如果下载arm64的二进制文件手动替换,不就可以运行了么?
但是事实狠狠的打了我的脸,前面的替换进行地很顺利,直到…1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22root@rasp:/var/lib/docker/overlay2# cd b37847000ccdd55f5acd0ea549f16073da142458dd7e1cc1487d5ce2ea944611/diff/bin/
root@rasp:/var/lib/docker/overlay2/b37847000ccdd55f5acd0ea549f16073da142458dd7e1cc1487d5ce2ea944611/diff/bin# ls
background fdreserve multisubstitute s6-fdholder-list s6-ipcserver s6-svlisten1
backtick fdswap pipeline s6-fdholder-listc s6-ipcserver-access s6-svok
bash forbacktickx piperw s6-fdholder-retrieve s6-ipcserverd s6-svscan
bashbug foreground redirfd s6-fdholder-retrievec s6-ipcserver-socketbinder s6-svscanctl
cd forstdin runblock s6-fdholder-setdump s6lockd s6-svstat
define forx s6-accessrules-cdb-from-fs s6-fdholder-setdumpc s6-log s6-svwait
dollarat getcwd s6-accessrules-fs-from-cdb s6-fdholder-store s6-mkfifodir s6-tai64n
elgetopt getpid s6-applyuidgid s6-fdholder-storec s6-notifyoncheck s6-tai64nlocal
elgetpositionals heredoc s6-cleanfifodir s6-fdholder-transferdump s6-setlock shift
elglob homeof s6-connlimit s6-fdholder-transferdumpc s6-setsid trap
emptyenv if s6-envdir s6-fghack s6-setuidgid tryexec
exec ifelse s6-envuidgid s6-ftrig-listen s6-softlimit ucspilogd
execlineb ifte s6-fdholderd s6-ftrig-listen1 s6-sudo umask
exit ifthenelse s6-fdholder-daemon s6-ftrig-notify s6-sudoc unexport
export import s6-fdholder-delete s6-ftrigrd s6-sudod wait
fdblock importas s6-fdholder-deletec s6-ftrig-wait s6-supervise withstdinas
fdclose loopwhilex s6-fdholder-getdump s6-ioconnect s6-svc
fdmove multidefine s6-fdholder-getdumpc s6-ipcclient s6-svlisten
root@rasp:/var/lib/docker/overlay2/b37847000ccdd55f5acd0ea549f16073da142458dd7e1cc1487d5ce2ea944611/diff/bin# file bash
bash: ELF 64-bit LSB pie executable x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-x86_64.so.1, stripped
惹不起,惹不起,告辞!
至于编译,我实在不想弄,理由如下:
首先,有了上次编译驱动的经历之后,我是再也不想在树莓派上编译任何东西了。且不说CPU的弱鸡,光是内存不足就足够你喝一壶的。至于交叉编译?不好意思,编译之神Baymax持续掉线中。
二进制安装
那就只有来二进制文件了。
嘛,这个就没啥说的了,直接参照官方教程就好了。
配置文件随便根据官网改改就好,这里就不贴出来。
最终效果
Gitea
嘛,就是这样,试过了速度还行。还拥有镜像功能,可以自动追踪某一个远程仓库,以后有啥小项目就决定是你了!
では、諸君は。