树莓派上编译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 打包.
大致内容:

  1. 基于ubuntu
  2. 更新,安装依赖
  3. 配置一些文件和环境变量
  4. 拷贝外部工具到容器中
    1. docker/assets/ 安装,下载,配置用的脚本等
    2. docker/RELEASE 记录deb包的下载地址
  5. 运行脚本

自行打包步骤

  1. 下载gitlab官方仓库,并进入 omnibus-gitlab/docker 文件夹

    1
    git clone https://gitlab.com/gitlab-org/omnibus-gitlab.git
  2. 修改 RELEASE 文件中的环境变量

    1
    2
    3
    4
    RELEASE_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
  3. 开始打包

    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
2
3
4
5
6
7
8
docker run \
--hostname locallab
-p 443:443 -p 81:80 -p 522:22 \
--name gitlab \
-v ~/gitlab/config:/etc/gitlab \
-v ~/gitlab/logs:/var/log/gitlab \
-v ~/gitlab/data:/var/opt/gitlab \
gitlab:13.12.1-ce.0
  • 只是一个临时的例子,用于检验镜像是否能使用.或者查看报错信息
    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,目前看起来不影响使用.

参考

  1. 几乎是唯一的参考
  2. apt-get报错的解决