Собственный репозиторий OpenWRT на Gitlab-e
Данная статья поможет создать собственный репозиторий OpenWRT, со сборкой пакетов и хостингом их, средствами Gitlab Pages и CI/CD.
Cоздание пары ключей для подписи пакетов⌗
- Клонируйте репозиторий usign и скомпилируйте его. Обратите внимание, для успешной компиляции требуется установленный cmake.
$ git clone https://git.openwrt.org/project/usign.git
$ cd usign/
$ cmake .
$ make
- Даем команду исполняемому файлу usign создать новую пару ключей и вводим соответствующий комментарий, чтобы позже можно было идентифицировать файл ключа.
./usign -G -c "My own OpenWRT repo" -s secret.key -p public.key
Ключи готовы, к ним вернемся позже.
Окружение для сборки⌗
- Подготавливаем папку с репозиторием хранилица пакетов OpenWRT
$ mkdir openwrt-repo
$ cd openwrt-repo
- Создаем Dockerfile со следующим содержанием:
FROM debian:stable-slim
MAINTAINER name <https://hub.docker.com/u/name/>
RUN apt --quiet update --yes
RUN apt --quiet install --yes subversion g++ zlib1g-dev build-essential git python rsync man-db libncurses5-dev gawk gettext unzip file libssl-dev wget zip time
RUN wget -qO- https://downloads.openwrt.org/releases/19.07.2/targets/ar71xx/generic/openwrt-sdk-19.07.2-ar71xx-generic_gcc-7.5.0_musl.Linux-x86_64.tar.xz | tar xJf -
RUN mv openwrt* openwrtsdk
Где мейнтейнером указываем себя. Устанавливаем необходимые зависимости и в строке, со скачиванием openwrt-sdk, вставляем ссылку на нужную вам архитектуру. 3. Билдим образ и тегируем его
$ docker build -t name/openwrt-repo .
- Заливаем на hub.docker.com
$ docker login
$ docker push name/openwrt-repo:latest
С докером покончено, ждем когда сбилдится на сайте и переходим к Gitlab.
Настройка Gitlab⌗
- Создаем новый проект
- Переходим в настройки проекта Settings -> CI/CD
И в Variables (переменных) указываем ранее созданные ключи
Где GPG_PRIVATE_KEY - secret.key, GPG_PUBLIC_KEY - public.key. Обратите внимание на символ перевода строки \n после “untrusted comment: My own OpenWRT repo”
- Добавляем в проект файл .gitlab-ci.yml
image: name/openwrt-repo
pages:
stage: deploy
variables:
GPG_PUBLIC_TEST: to_be_set
script:
- mkdir /openwrtpackages
- echo -e "src-link name /openwrtpackages\n" >> /openwrtsdk/feeds.conf.default
- git clone https://gitlab.com/Name/name-of-package.git /openwrtpackages/name-of-package
- /openwrtsdk/scripts/feeds update name
- /openwrtsdk/scripts/feeds install -a -p name
- cd /openwrtsdk
- make defconfig
- make package/name-of-package/compile V=s
- echo -e $GPG_PUBLIC_KEY >> key-build.pub
- echo -e $GPG_PRIVATE_KEY >> key-build
- make package/index V=s
- mkdir "$CI_PROJECT_DIR/public"
- cp key-build.pub "$CI_PROJECT_DIR/public"
- cp -r /openwrtsdk/bin/packages/mips_24kc/name/* "$CI_PROJECT_DIR/public"
artifacts:
paths:
- public
only:
- master
Где image - имя образа на dockerhub-е, name-of-package - имя вашего пакета, и его репозиторий, name - ваше имя пользователя.
Ждем прохождения тестов и деплоя.
- Переходим в Settings -> Pages тут на ваше усмотрение, можете использовать предложенный адрес или добавить свой домен.
Добавление созданного репозитория⌗
Логинимся в OpenWRT и выполняем следующее:
echo -e -n 'untrusted My own OpenWRT repo\nPUBLIC_KEY\n' > /tmp/my-own-repo.pub && opkg-key add /tmp/my-own-repo.pub
! grep -q 'my_own_repo' /etc/opkg/customfeeds.conf && echo 'src/gz my_own_repo http://link_from_gitlab_pages.com' >> /etc/opkg/customfeeds.conf
Не забудьте указать корректную ссылку на репозиторий, полученную из GitLab Pages.
На этом все!