树莓派上编译gitlab的docker镜像
背景
学习使用gitlab-ci时想自己搭建一个gitlab环境,
以及gitlab-ci的runner环境.
经网上介绍说使用docker安装最方便.
于是在树莓派上安装了docker环境准备跑gitlab.
然而等docker pull gitlab/gitlab-ce后,
dokcer run xxxxx gitlab/gitlab-ce时发现报错.
搜索发现gitlab只为x86~64平台提供了docker镜像~,
像树莓派这种arm平台则需要自己编译.
官方思路
官方的docker镜像,使用 omnibus-gitlab
项目中的 docker/Dockerfile
打包.
大致内容:
- 基于ubuntu
- 更新,安装依赖
- 配置一些文件和环境变量
- 拷贝外部工具到容器中
docker/assets/
安装,下载,配置用的脚本等docker/RELEASE
记录deb包的下载地址
- 运行脚本
自行打包步骤
-
下载gitlab官方仓库,并进入
omnibus-gitlab/docker
文件夹1
git clone https://gitlab.com/gitlab-org/omnibus-gitlab.git
-
修改
RELEASE
文件中的环境变量1
2
3
4RELEASE_VERSION=13.12.1-ce.0
PACKAGECLOUD_REPO=unstable
RELEASE_PACKAGE=gitlab-ce
DOWNLOAD_URL=https://packages.gitlab.com/gitlab/raspberry-pi2/packages/raspbian/buster/gitlab-ce_13.12.1-ce.0_armhf.deb/download.deb -
开始打包
1
docker image build -t gitlab:13.12.1-ce.0 .
需要等待很久
常见问题
apt-get update报错说无法验证
表现: 在ubuntu镜像内使用 apt-get update
会报错说出现GPG error,软件源未验证.
原因:
通常是由于host机(树莓派)上的 libseccomp2
包版本太旧引起.
树莓派本身提供不了太高级的版本.需要自行下载.
确认问题:
dpkg -L libseccomp2
查看到raspbian上的版本是2.3.3
sudo apt-get install libseccomp2
查看到raspbian上的版本是2.3.3-4
解决:
debian软件包仓库上的版本是2.5.1
debian软件包仓库
下载下来,scp到树莓派上, sudo dpkg -i libxxx
安装,
然后 dpkg -L libseccomp2
确认版本即可.
然后在镜像内 apt-get
, 能够正常执行
libatomic.so.1找不到
编辑 Dockerfile
, 一开始安装依赖时,多安装一个 libatomic1
即可
libc.so.6
这是一个老问题,当ubuntu系统低于19.10时会报错.使用更新的ubuntu镜像作为基础可以解决
下载
下载方面的命令放在 docker/assets/download-package
中.
其中不乏一些条件判断,直接用最简单的内容替代之即可
1 | wget --content-disposition --quiet ${DOWNLOAD_URL} -O /tmp/gitlab.deb |
不过这似乎是个老问题,在gitlab 13.12.1 之后,内容可以正常下载.
验证
1 | docker run \ |
- 只是一个临时的例子,用于检验镜像是否能使用.或者查看报错信息
docker-compose启动后,可能只能看到unhealthy的状态. - 第一次运行花点时间.
- 默认交互模式,使用各种办法停不下来(C-c,C-\,C-p C-q,exit)
后来使用docker restart
才关闭当前的交互界面.
运行时的一些问题
这些问题可能非常陈旧,如果不出现就没必要解决
grafana报错
grafana是一个数据面板,目前总是显示
1 | chpst: fatal: unable to run: /opt/gitlab/embedded/bin/grafana-server: exec format error |
其中一个方案是禁用之.
根据 doc/settings/grafana.md
,
可以编辑docker host中的 /etc/gitlab/gitlab.rb
写上 grafana['enable'] = false
.
(docker cp或直接用卷映射来改)
重启docker即可解决
总是502错误
可能是因为树莓派性能不好
普罗米修斯占用高
在配置文件里关掉prometheus,目前看起来不影响使用.