Compare commits
1 Commits
v2023.08.2
...
v2023.03.3
Author | SHA1 | Date | |
---|---|---|---|
3302f0faf1 |
29
Jenkinsfile
vendored
29
Jenkinsfile
vendored
@ -23,38 +23,26 @@ pipeline {
|
|||||||
|
|
||||||
stage('Update emissary release') {
|
stage('Update emissary release') {
|
||||||
when {
|
when {
|
||||||
branch 'master'
|
|
||||||
expression {
|
expression {
|
||||||
return params.emissaryRelease != 'latest'
|
return params.emissaryRelease != 'latest'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
currentEmissaryRelease = readFile('emissary_release.txt').trim()
|
steps {
|
||||||
|
currentEmissaryRelease = readFile('emissary_release.txt')
|
||||||
|
|
||||||
if (currentEmissaryRelease == params.emissaryRelease) {
|
if (currentEmissaryRelease == params.emissaryRelease) {
|
||||||
currentBuild.result = 'SUCCESS'
|
currentBuild.result = 'SUCCESS'
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
withCredentials([
|
|
||||||
usernamePassword([
|
|
||||||
credentialsId: 'forge-jenkins',
|
|
||||||
usernameVariable: 'GIT_USERNAME',
|
|
||||||
passwordVariable: 'GIT_PASSWORD'
|
|
||||||
])
|
|
||||||
]) {
|
|
||||||
sh """
|
sh """
|
||||||
git config user.email "jenkins@cadoles.com"
|
|
||||||
git config user.name "Jenkins"
|
|
||||||
git config credential.https://forge.cadoles.com.username "\$GIT_USERNAME"
|
|
||||||
git config credential.https://forge.cadoles.com.helper '!f() { test "\$1" = get && echo "password=\$GIT_PASSWORD"; }; f'
|
|
||||||
|
|
||||||
echo '${params.emissaryRelease}' > emissary_release.txt
|
echo '${params.emissaryRelease}' > emissary_release.txt
|
||||||
git add emissary_release.txt
|
git add emissary_release.txt
|
||||||
git commit -m "feat: use emissary ${params.emissaryRelease}"
|
git commit -m "feat: use emissary ${params.emissaryRelease}"
|
||||||
git pull --rebase
|
git pull --rebase
|
||||||
git push origin \$(git rev-parse HEAD):${env.GIT_BRANCH}
|
git push
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -81,9 +69,6 @@ pipeline {
|
|||||||
}
|
}
|
||||||
|
|
||||||
stage('Release') {
|
stage('Release') {
|
||||||
when {
|
|
||||||
branch 'master'
|
|
||||||
}
|
|
||||||
steps {
|
steps {
|
||||||
withCredentials([
|
withCredentials([
|
||||||
usernamePassword([
|
usernamePassword([
|
||||||
|
8
Makefile
8
Makefile
@ -22,7 +22,7 @@ IMAGEBUILDER_CUSTOM_FILES_DIR_PATH := $(IMAGEBUILDER_DIR_PATH)/files
|
|||||||
|
|
||||||
BIN_DIR := "$(shell readlink -f bin)/$(OPENWRT_VERSION)/$(OPENWRT_TARGET)/$(OPENWRT_PROFILE)$(BIN_DIR_NAME_SUFFIX)"
|
BIN_DIR := "$(shell readlink -f bin)/$(OPENWRT_VERSION)/$(OPENWRT_TARGET)/$(OPENWRT_PROFILE)$(BIN_DIR_NAME_SUFFIX)"
|
||||||
|
|
||||||
EMISSARY_RELEASE ?= $(shell cat emissary_release.txt)
|
GITEA_DOWNLOAD_RELEASE_NAME ?= $(shell cat emissary_release.txt)
|
||||||
EMISSARY_ARCH ?= armv6
|
EMISSARY_ARCH ?= armv6
|
||||||
|
|
||||||
EMISSARY_RECONCILIATION_INTERVAL ?=
|
EMISSARY_RECONCILIATION_INTERVAL ?=
|
||||||
@ -109,8 +109,8 @@ gitea-release: tools/gitea-release/bin/gitea-release.sh
|
|||||||
GITEA_RELEASE_NAME="$(FULL_VERSION)" \
|
GITEA_RELEASE_NAME="$(FULL_VERSION)" \
|
||||||
GITEA_RELEASE_COMMITISH_TARGET="$(GIT_VERSION)" \
|
GITEA_RELEASE_COMMITISH_TARGET="$(GIT_VERSION)" \
|
||||||
GITEA_RELEASE_IS_DRAFT="false" \
|
GITEA_RELEASE_IS_DRAFT="false" \
|
||||||
GITEA_RELEASE_BODY="With Emissary $(EMISSARY_RELEASE)" \
|
GITEA_RELEASE_BODY="" \
|
||||||
GITEA_RELEASE_ATTACHMENTS="$$(find .gitea-release/* -type f)" \
|
GITEA_RELEASE_ATTACHMENTS="$(shell find .gitea-release/* -type f)" \
|
||||||
tools/gitea-release/bin/gitea-release.sh
|
tools/gitea-release/bin/gitea-release.sh
|
||||||
|
|
||||||
.PHONY: download-emissary-release
|
.PHONY: download-emissary-release
|
||||||
@ -119,7 +119,7 @@ download-emissary-release: tools/gitea-download/bin/gitea-download.sh
|
|||||||
GITEA_DOWNLOAD_PROJECT="emissary" \
|
GITEA_DOWNLOAD_PROJECT="emissary" \
|
||||||
GITEA_DOWNLOAD_ORG="arcad" \
|
GITEA_DOWNLOAD_ORG="arcad" \
|
||||||
GITEA_DOWNLOAD_BASE_URL="https://forge.cadoles.com" \
|
GITEA_DOWNLOAD_BASE_URL="https://forge.cadoles.com" \
|
||||||
GITEA_DOWNLOAD_RELEASE_NAME="$(EMISSARY_RELEASE)" \
|
GITEA_DOWNLOAD_RELEASE_NAME="$(GITEA_DOWNLOAD_RELEASE_NAME)" \
|
||||||
GITEA_DOWNLOAD_ATTACHMENTS_FILTER="\.tar\.gz$$" \
|
GITEA_DOWNLOAD_ATTACHMENTS_FILTER="\.tar\.gz$$" \
|
||||||
tools/gitea-download/bin/gitea-download.sh
|
tools/gitea-download/bin/gitea-download.sh
|
||||||
|
|
||||||
|
@ -1,13 +1,5 @@
|
|||||||
# Documentation
|
# Documentation
|
||||||
|
|
||||||
## Structure du projet
|
|
||||||
|
|
||||||
```shell
|
|
||||||
doc/ # Documentation technique
|
|
||||||
install/ # Tâches Make d'installation spécifiques aux différentes cibles de construction
|
|
||||||
misc/ # Fichiers spécifiques aux différentes cibles de construction
|
|
||||||
targets/ # Tâches Make de définition des différentes cibles de construction
|
|
||||||
```
|
|
||||||
## Tutoriels
|
## Tutoriels
|
||||||
|
|
||||||
- [Premiers pas](./tutorials/first-steps.md)
|
- [Premiers pas](./tutorials/first-steps.md)
|
||||||
|
@ -1,85 +1,16 @@
|
|||||||
# Compiler un firmware
|
# Compiler un firmware
|
||||||
|
|
||||||
## Compiler un firmware préconfiguré
|
> TODO
|
||||||
|
|
||||||
L'ensemble des cibles de construction préconfigurés sont disponibles dans le répertoire `targets/`.
|
|
||||||
|
|
||||||
Par exemple:
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# Télécharger localement les dernières archive du projet emissary
|
# Exemple: construire un firmware OpenWRT
|
||||||
make download-emissary-release
|
|
||||||
|
|
||||||
# Puis...
|
# Pour le routeur Linksys WRT1200AC
|
||||||
|
|
||||||
# ... pour le routeur Linksys WRT1200AC
|
|
||||||
make linksys-wrt1200ac
|
make linksys-wrt1200ac
|
||||||
|
|
||||||
# ... ou pour le routeur Linksys WRT1900AC
|
# Pour le routeur Linksys WRT1900AC
|
||||||
make linksys-wrt1900ac
|
make linksys-wrt1900ac
|
||||||
|
|
||||||
# ... ou pour le routeur Linksys WRT3200ACM
|
# Pourt le router Linksys WRT3200ACM
|
||||||
make linksys-wrt3200acm
|
make linksys-wrt3200acm
|
||||||
```
|
```
|
||||||
## Créer une nouvelle cible de construction
|
|
||||||
|
|
||||||
Dans ce tutoriel, nous allons voir comment créer une nouvelle cible de construction pour un nouvel appareil, ici un [Banana Pi R3](https://wiki.banana-pi.org/Banana_Pi_BPI-R3).
|
|
||||||
|
|
||||||
### Créer la nouvelle tâche Make
|
|
||||||
|
|
||||||
1. Dans le répertoire `targets/`, créer le fichier `bananapi.mk`
|
|
||||||
|
|
||||||
```shell
|
|
||||||
touch targets/bananapi.mk
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Éditer le fichier `targets/bananapi.mk` pour créer la nouvelle tâche Make
|
|
||||||
|
|
||||||
```makefile
|
|
||||||
# On ajoute notre nouvelle tâche "bpi-r3" en dépendance de la tâche
|
|
||||||
# principale "all"
|
|
||||||
all: bpi-r3
|
|
||||||
|
|
||||||
# On créait une nouvelle tâche "bpi-r3" permettant de construire le
|
|
||||||
# firmware pour notre BananaPi R3
|
|
||||||
bpi-r3:
|
|
||||||
$(MAKE) \
|
|
||||||
OPENWRT_VERSION="snapshot" \
|
|
||||||
IMAGEBUILDER_URL="https://downloads.openwrt.org/snapshots/targets/mediatek/filogic/openwrt-imagebuilder-mediatek-filogic.Linux-x86_64.tar.xz" \
|
|
||||||
ADDITIONAL_INSTALL="" \
|
|
||||||
OPENWRT_TARGET="mediatek/filogic" \
|
|
||||||
EMISSARY_ARCH="arm64" \
|
|
||||||
OPENWRT_PROFILE="bananapi_bpi-r3" \
|
|
||||||
build
|
|
||||||
```
|
|
||||||
|
|
||||||
**Explication des variables**
|
|
||||||
|
|
||||||
- `OPENWRT_VERSION`: Version d'OpenWRT à utiliser. _Normalement prédéfinie par le fichier `Makefile` principal mais ill est ici nécessaire de surcharger la variable car il n'existe à ce jour pas de version stable d'OpenWRT pour la BananaPi R3._
|
|
||||||
- `IMAGEBUILDER_URL`: URL à utiliser pour télécharger le "builder" OpenWRT. _Normalement prédéfinie par le fichier `Makefile` principal mais ill est ici nécessaire de surcharger la variable car il n'existe à ce jour pas de version stable d'OpenWRT pour la BananaPi R3._
|
|
||||||
- `ADDITIONAL_INSTALL`: Tâches Make d'installation supplémentaires à exécuter. Voir section suivante.
|
|
||||||
- `OPENWRT_TARGET`: "Cible" OpenWRT associée à l'appareil
|
|
||||||
- `EMISSARY_ARCH`: Architecture du binaire Emissary à déployer dans le firmware
|
|
||||||
- `OPENWRT_PROFILE`: "Profil" OpenWRT associé à l'appareil
|
|
||||||
|
|
||||||
3. Lancer la compilation du firmware
|
|
||||||
|
|
||||||
```shell
|
|
||||||
make bpi-r3
|
|
||||||
```
|
|
||||||
|
|
||||||
Les fichiers du firmware seront générés dans le répertoire `bin/snapshot/mediatek/filogic/bananapi_bpi-r3/`
|
|
||||||
|
|
||||||
> 🛈 **Comment trouver les valeurs des variables `OPENWRT_TARGET` et `OPENWRT_PROFILE` ?**
|
|
||||||
>
|
|
||||||
> Après avoir trouvé votre appareil sur la [liste de compatibilité d'OpenWRT](https://openwrt.org/toh/start), rechercher l'URL de téléchargement du fichier du firmware, qui devrait ressembler à `https://downloads.openwrt.org/snapshots/targets/mediatek/filogic/openwrt-mediatek-filogic-bananapi_bpi-r3-sdcard.img.gz`.
|
|
||||||
>
|
|
||||||
> La valeur de `OPENWRT_TARGET` est la chaîne comprenant les 2 répertoires juste après `targets/`, ici `mediatek/filogic`.
|
|
||||||
>
|
|
||||||
> La valeur de `OPENWRT_PROFILE` est la chaîne comprise entre la cible OpenWRT et le type/extension dans le nom de fichier, ici `bananapi_bpi-r3`.
|
|
||||||
|
|
||||||
### Personnaliser votre firmware
|
|
||||||
|
|
||||||
Afin de personnaliser votre firmware, vous pouvez déclarer des nouvelles tâches Make dans le répertoire `install/` et ensuite les référencer dans la variable `ADDITIONAL_INSTALL`.
|
|
||||||
|
|
||||||
Vous pouvez prendre exemple sur le ficher `install/raspberrypi.mk` qui par exemple déploie des fichiers de configuration UCI par défaut ainsi que des scripts [`uci-defaults`](https://openwrt.org/docs/guide-developer/uci-defaults).
|
|
@ -1 +1 @@
|
|||||||
v2023.8.25-c51ac0a
|
v2023.3.29-e5b6c5e
|
@ -1,7 +0,0 @@
|
|||||||
install-rpi-network-config:
|
|
||||||
mkdir -p files/etc/config
|
|
||||||
cp misc/rpi/uci/network files/etc/config/network
|
|
||||||
|
|
||||||
install-rpi-uci-defaults:
|
|
||||||
mkdir -p files/etc/uci-defaults
|
|
||||||
cp misc/rpi/uci-defaults/* files/etc/uci-defaults/
|
|
@ -1,3 +0,0 @@
|
|||||||
install-turris-omnia-uci-defaults:
|
|
||||||
mkdir -p files/etc/uci-defaults
|
|
||||||
cp misc/turris/omnia/uci-defaults/* files/etc/uci-defaults/
|
|
@ -1,3 +1,4 @@
|
|||||||
/etc/machine-id
|
/etc/machine-id
|
||||||
/data/emissary/agent-key.json
|
/data/emissary/agent-key.json
|
||||||
|
/data/emissary/agent-state.json
|
||||||
/data/emissary/apps/data
|
/data/emissary/apps/data
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
#/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
main() {
|
|
||||||
# Update default firewall ruleset
|
|
||||||
uci add firewall rule
|
|
||||||
uci set firewall.@rule[-1].name='Allow SSH on WAN'
|
|
||||||
uci set firewall.@rule[-1].src='wan'
|
|
||||||
uci set firewall.@rule[-1].proto='tcp'
|
|
||||||
uci set firewall.@rule[-1].dest_port='22'
|
|
||||||
uci set firewall.@rule[-1].target='ACCEPT'
|
|
||||||
|
|
||||||
uci add firewall rule
|
|
||||||
uci set firewall.@rule[-1].name='Allow HTTP on WAN'
|
|
||||||
uci set firewall.@rule[-1].src='wan'
|
|
||||||
uci set firewall.@rule[-1].proto='tcp'
|
|
||||||
uci set firewall.@rule[-1].dest_port='80'
|
|
||||||
uci set firewall.@rule[-1].target='ACCEPT'
|
|
||||||
|
|
||||||
uci add firewall rule
|
|
||||||
uci set firewall.@rule[-1].name='Allow HTTPS on WAN'
|
|
||||||
uci set firewall.@rule[-1].src='wan'
|
|
||||||
uci set firewall.@rule[-1].proto='tcp'
|
|
||||||
uci set firewall.@rule[-1].dest_port='443'
|
|
||||||
uci set firewall.@rule[-1].target='ACCEPT'
|
|
||||||
|
|
||||||
uci commit firewall
|
|
||||||
|
|
||||||
# Disable DNS-rebind protection
|
|
||||||
uci set dhcp.@dnsmasq[0].rebind_protection='0'
|
|
||||||
uci commit dhcp
|
|
||||||
|
|
||||||
reload_config
|
|
||||||
}
|
|
||||||
|
|
||||||
main
|
|
@ -1,9 +0,0 @@
|
|||||||
config interface 'loopback'
|
|
||||||
option ifname 'lo'
|
|
||||||
option proto 'static'
|
|
||||||
option ipaddr '127.0.0.1'
|
|
||||||
option netmask '255.0.0.0'
|
|
||||||
|
|
||||||
config interface 'wan'
|
|
||||||
option ifname 'eth0'
|
|
||||||
option proto 'dhcp'
|
|
@ -1,37 +0,0 @@
|
|||||||
#/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
main() {
|
|
||||||
# Update default firewall ruleset
|
|
||||||
uci add firewall rule
|
|
||||||
uci set firewall.@rule[-1].name='Allow SSH on WAN'
|
|
||||||
uci set firewall.@rule[-1].src='wan'
|
|
||||||
uci set firewall.@rule[-1].proto='tcp'
|
|
||||||
uci set firewall.@rule[-1].dest_port='22'
|
|
||||||
uci set firewall.@rule[-1].target='ACCEPT'
|
|
||||||
|
|
||||||
uci add firewall rule
|
|
||||||
uci set firewall.@rule[-1].name='Allow HTTP on WAN'
|
|
||||||
uci set firewall.@rule[-1].src='wan'
|
|
||||||
uci set firewall.@rule[-1].proto='tcp'
|
|
||||||
uci set firewall.@rule[-1].dest_port='80'
|
|
||||||
uci set firewall.@rule[-1].target='ACCEPT'
|
|
||||||
|
|
||||||
uci add firewall rule
|
|
||||||
uci set firewall.@rule[-1].name='Allow HTTPS on WAN'
|
|
||||||
uci set firewall.@rule[-1].src='wan'
|
|
||||||
uci set firewall.@rule[-1].proto='tcp'
|
|
||||||
uci set firewall.@rule[-1].dest_port='443'
|
|
||||||
uci set firewall.@rule[-1].target='ACCEPT'
|
|
||||||
|
|
||||||
uci commit firewall
|
|
||||||
|
|
||||||
# Disable DNS-rebind protection
|
|
||||||
uci set dhcp.@dnsmasq[0].rebind_protection='0'
|
|
||||||
uci commit dhcp
|
|
||||||
|
|
||||||
reload_config
|
|
||||||
}
|
|
||||||
|
|
||||||
main
|
|
@ -1,21 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -eo pipefail
|
|
||||||
|
|
||||||
block info
|
|
||||||
|
|
||||||
DISK=/dev/mmcblk0
|
|
||||||
PARTITION="${DISK}p2"
|
|
||||||
|
|
||||||
parted -s -a opt "$DISK" "resizepart 2 100%"
|
|
||||||
|
|
||||||
FS_SIZE="$(unsquashfs -s "$PARTITION" | grep -o 'Filesystem size [0-9]* bytes' | grep -o '[0-9][0-9]*')"
|
|
||||||
FS_OFFSET="$(expr '(' "$FS_SIZE" + 65535 ')' / 65536 '*' 65536)"
|
|
||||||
LOOP_DEVICE="$(losetup -f --show -o "$FS_OFFSET" "$PARTITION")"
|
|
||||||
|
|
||||||
e2fsck -y -f "$LOOP_DEVICE"
|
|
||||||
resize2fs "$LOOP_DEVICE"
|
|
||||||
|
|
||||||
rm -f /etc/uci-defaults/99-resize-disk.sh
|
|
||||||
|
|
||||||
reboot
|
|
@ -2,7 +2,7 @@ all: rpi-4 rpi-3
|
|||||||
|
|
||||||
rpi-4:
|
rpi-4:
|
||||||
$(MAKE) \
|
$(MAKE) \
|
||||||
ADDITIONAL_INSTALL="install-rpi-network-config install-rpi-uci-defaults" \
|
ADDITIONAL_INSTALL="" \
|
||||||
OPENWRT_TARGET="bcm27xx/bcm2711" \
|
OPENWRT_TARGET="bcm27xx/bcm2711" \
|
||||||
EMISSARY_ARCH="arm64" \
|
EMISSARY_ARCH="arm64" \
|
||||||
OPENWRT_PROFILE="rpi-4" \
|
OPENWRT_PROFILE="rpi-4" \
|
||||||
@ -10,7 +10,7 @@ rpi-4:
|
|||||||
|
|
||||||
rpi-3:
|
rpi-3:
|
||||||
$(MAKE) \
|
$(MAKE) \
|
||||||
ADDITIONAL_INSTALL="install-rpi-network-config install-rpi-uci-defaults" \
|
ADDITIONAL_INSTALL="" \
|
||||||
OPENWRT_TARGET="bcm27xx/bcm2710" \
|
OPENWRT_TARGET="bcm27xx/bcm2710" \
|
||||||
EMISSARY_ARCH="arm64" \
|
EMISSARY_ARCH="arm64" \
|
||||||
OPENWRT_PROFILE="rpi-3" \
|
OPENWRT_PROFILE="rpi-3" \
|
@ -4,8 +4,7 @@ turris: omnia
|
|||||||
|
|
||||||
omnia:
|
omnia:
|
||||||
$(MAKE) \
|
$(MAKE) \
|
||||||
ADDITIONAL_INSTALL="install-turris-omnia-uci-defaults" \
|
ADDITIONAL_INSTALL="" \
|
||||||
ADDITIONAL_OPENWRT_PACKAGES="losetup squashfs-tools-unsquashfs resize2fs e2fsprogs parted block-mount" \
|
|
||||||
OPENWRT_TARGET="mvebu/cortexa9" \
|
OPENWRT_TARGET="mvebu/cortexa9" \
|
||||||
EMISSARY_ARCH="armv7" \
|
EMISSARY_ARCH="armv7" \
|
||||||
OPENWRT_PROFILE="cznic_turris-omnia" \
|
OPENWRT_PROFILE="cznic_turris-omnia" \
|
||||||
|
Reference in New Issue
Block a user