-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
127 lines (95 loc) · 3.57 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
-include config.mk
BOARD ?= rpi4
PLATFORM ?= v2-hdmi
SUFFIX ?=
STAGES ?= __init__ os pikvm-repo watchdog rootdelay ro no-audit pikvm __cleanup__
HOSTNAME ?= pikvm
LOCALE ?= en_US
TIMEZONE ?= Europe/Moscow
#REPO_URL ?= http://mirror.yandex.ru/archlinux-arm
REPO_URL ?= http://de3.mirror.archlinuxarm.org
BUILD_OPTS ?=
ROOT_PASSWD ?= root
WEBUI_ADMIN_PASSWD ?= admin
IPMI_ADMIN_PASSWD ?= admin
SUDO ?= sudo
CARD ?= /dev/mmcblk0
DEPLOY_USER ?= root
# =====
SHELL = /usr/bin/env bash
_BUILDER_DIR = ./.pi-builder/$(PLATFORM)-$(BOARD)$(SUFFIX)
define optbool
$(filter $(shell echo $(1) | tr A-Z a-z),yes on 1)
endef
define fv
$(shell curl --silent "https://files.pikvm.org/repos/arch/$(BOARD)/latest/$(1)")
endef
# =====
all:
@ echo "Available commands:"
@ echo " make # Print this help"
@ echo " make os # Build OS with your default config"
@ echo " make shell # Run Arch-ARM shell"
@ echo " make install # Install rootfs to partitions on $(CARD)"
@ echo " make image # Create a binary image for burning outside of make install"
@ echo " make scan # Find all RPi devices in the local network"
@ echo " make clean # Remove the generated rootfs"
@ echo " make clean-all # Remove the generated rootfs and pi-builder toolchain"
shell: $(_BUILDER_DIR)
$(MAKE) -C $(_BUILDER_DIR) shell
os: $(_BUILDER_DIR)
rm -rf $(_BUILDER_DIR)/stages/{pikvm,pikvm-otg-console}
cp -a pikvm pikvm-otg-console $(_BUILDER_DIR)/stages
cp -a disk-$(if $(findstring v2,$(PLATFORM))$(findstring v3,$(PLATFORM))$(findstring v4,$(PLATFORM)),v2,v0).conf $(_BUILDER_DIR)/disk.conf
$(MAKE) -C $(_BUILDER_DIR) os \
NC=$(NC) \
BUILD_OPTS=' $(BUILD_OPTS) \
--build-arg PLATFORM=$(PLATFORM) \
--build-arg VERSIONS=$(call fv,ustreamer)/$(call fv,kvmd)/$(call fv,kvmd-webterm)/$(call fv,kvmd-oled)/$(call fv,kvmd-fan) \
--build-arg OLED=$(call optbool,$(OLED)) \
--build-arg FAN=$(call optbool,$(FAN)) \
--build-arg ROOT_PASSWD=$(ROOT_PASSWD) \
--build-arg WEBUI_ADMIN_PASSWD=$(WEBUI_ADMIN_PASSWD) \
--build-arg IPMI_ADMIN_PASSWD=$(IPMI_ADMIN_PASSWD) \
' \
PROJECT=pikvm-os-$(PLATFORM)$(SUFFIX) \
BOARD=$(BOARD) \
STAGES='$(STAGES)' \
HOSTNAME=$(HOSTNAME) \
LOCALE=$(LOCALE) \
TIMEZONE=$(TIMEZONE) \
REPO_URL=$(REPO_URL)
$(_BUILDER_DIR):
mkdir -p `dirname $(_BUILDER_DIR)`
git clone --depth=1 https://github.com/mdevaev/pi-builder $(_BUILDER_DIR)
update: $(_BUILDER_DIR)
cd $(_BUILDER_DIR) && git pull --rebase
git pull --rebase
install: $(_BUILDER_DIR)
$(MAKE) -C $(_BUILDER_DIR) install CARD=$(CARD)
scan: $(_BUILDER_DIR)
$(MAKE) -C $(_BUILDER_DIR) scan
clean: $(_BUILDER_DIR)
$(MAKE) -C $(_BUILDER_DIR) clean
clean-all:
- $(MAKE) -C $(_BUILDER_DIR) clean-all
rm -rf $(_BUILDER_DIR)
- rmdir `dirname $(_BUILDER_DIR)`
_IMAGE_DATED := $(PLATFORM)-$(BOARD)$(SUFFIX)-$(shell date +%Y%m%d).img
_IMAGE_LATEST := $(PLATFORM)-$(BOARD)$(SUFFIX)-latest.img
image:
which xz
mkdir -p images
$(SUDO) bash -x -c ' \
truncate images/$(_IMAGE_DATED) -s 7G \
&& device=`losetup --find --show images/$(_IMAGE_DATED)` \
&& $(MAKE) install CARD=$$device \
&& losetup -d $$device \
'
$(SUDO) chown $(shell id -u):$(shell id -g) images/$(_IMAGE_DATED)
xz -9 --compress images/$(_IMAGE_DATED)
sha1sum images/$(_IMAGE_DATED).xz | awk '{print $$1}' > images/$(_IMAGE_DATED).xz.sha1
cd images && ln -sf $(_IMAGE_DATED).xz $(_IMAGE_LATEST).xz
cd images && ln -sf $(_IMAGE_DATED).xz.sha1 $(_IMAGE_LATEST).xz.sha1
upload:
rsync -rl --progress images/ $(DEPLOY_USER)@files.pikvm.org:/var/www/files.pikvm.org/images