master
txt 268 lines 10.1 KB
Raw
1 # SPDX-License-Identifier: GPL-3.0-or-later
2
3 cmake_minimum_required(VERSION 3.16.0...3.30)
4
5 list(APPEND RHEL_DISTROS centos centos-stream rhel rocky almalinux cloudlinux)
6 list(APPEND SUSE_DISTROS opensuse-leap opensuse-tumbleweed)
7 list(APPEND RPM_DISTROS rhel opensuse ol amzn fedora)
8 list(APPEND DEB_DISTROS debian ubuntu)
9
10 set(DEB_GPG_KEY_SOURCE "https://repo.netdata.cloud/netdatabot.gpg.key")
11
12 set(PACKAGE_VERSION 5)
13 set(PACKAGE_RELEASE 5)
14
15 set(CPACK_THREADS 0)
16 set(CPACK_STRIP_FILES NO)
17 set(CPACK_PACKAGE_INSTALL_DIRECTORY "netdata")
18 set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/packages")
19 set(CPACK_PACKAGING_INSTALL_PREFIX "/")
20 set(CPACK_PACKAGE_VENDOR "Netdata Inc.")
21 set(CPACK_COMPONENT_NETDATA-REPO_PACKAGE_DESCRIPTION "Configuration for the official Netdata Stable package repository.")
22 set(CPACK_COMPONENT_NETDATA-REPO-EDGE_PACKAGE_DESCRIPTION "Configuration for the official Netdata Edge package repository.")
23
24 project(netdata-repoconfig VERSION "${PACKAGE_VERSION}.${PACKAGE_RELEASE}"
25 DESCRIPTION "Repository configuration for Netdata’s official native packages."
26 HOMEPAGE_URL "https://www.netdata.cloud/"
27 LANGUAGES NONE)
28
29 function(extract_release_item _variable _item)
30 if(DEFINED "${_variable}")
31 return()
32 endif()
33
34 if(DEFINED OS_RELEASE_FILE)
35 else()
36 message(CHECK_START "Searching for os-release file")
37 find_file(OS_RELEASE_FILE os-release PATHS /etc /lib /usr/lib NO_DEFAULT_PATH)
38 if(${OS_RELEASE_FILE} STREQUAL "OS_RELEASE_FILE-NOTFOUND")
39 message(CHECK_FAIL "failed")
40 message(FATAL_ERROR "Could not find os-release file")
41 endif()
42
43 message(CHECK_PASS "${OS_RELEASE_FILE}")
44 endif()
45
46 message(CHECK_START "Extracting ${_item} from ${OS_RELEASE_FILE}")
47 execute_process(COMMAND sh -c ". ${OS_RELEASE_FILE} && printf %s $${_item}"
48 RESULT_VARIABLE _result
49 OUTPUT_VARIABLE _output)
50
51 if(NOT ${_result} EQUAL 0)
52 message(CHECK_FAIL "failed to parse ${OS_RELEASE_FILE}")
53 return()
54 elseif(${_output} STREQUAL "")
55 message(CHECK_FAIL "variable ${_item} not defined in ${OS_RELEASE_FILE}")
56 return()
57 endif()
58
59 message(CHECK_PASS ${_output})
60 set(${_variable} ${_output} PARENT_SCOPE)
61 endfunction()
62
63 function(require_command _variable _cmd)
64 if(DEFINED ${_variable})
65 return()
66 endif()
67
68 message(CHECK_START "Looking for ${_cmd}")
69
70 find_program(_result_${_cmd} ${_cmd})
71
72 if(${_result_${_cmd}} STREQUAL "_result_${_cmd}-NOTFOUND")
73 message(CHECK_FAIL "failed")
74 message(FATAL_ERROR "Unable to find required command: ${_cmd}")
75 endif()
76
77 message(CHECK_PASS "${_result_${_cmd}}")
78 set(${_variable} ${_result_${_cmd}} PARENT_SCOPE)
79 endfunction()
80
81 if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
82 extract_release_item("DISTRO" ID)
83
84 if(NOT DEFINED DISTRO)
85 message(FATAL_ERROR "Failed to auto-detect distro ID")
86 endif()
87
88 extract_release_item(DISTRO_VERSION VERSION_ID)
89
90 if(NOT DEFINED DISTRO_VERSION)
91 message(FATAL_ERROR "Failed to auto-detect distro version ID.")
92 endif()
93 else()
94 message(FATAL_ERROR "Repository configuration packages can only be built on Linux")
95 endif()
96
97 if(${DISTRO} IN_LIST RHEL_DISTROS)
98 set(DISTRO "rhel")
99 string(FIND "${DISTRO_VERSION}" "." DECIMAL_INDEX)
100 if("${DECIMAL_INDEX}" GREATER 0)
101 string(SUBSTRING "${DISTRO_VERSION}" 0 "${DECIMAL_INDEX}" DISTRO_VERSION)
102 endif()
103 elseif(${DISTRO} STREQUAL "opensuse-leap")
104 set(DISTRO "opensuse")
105 elseif(${DISTRO} STREQUAL "opensuse-tumbleweed")
106 set(DISTRO "opensuse")
107 set(DISTRO_VERSION "tumbleweed")
108 endif()
109
110 if(${DISTRO} IN_LIST DEB_DISTROS)
111 extract_release_item(SUITE VERSION_CODENAME)
112
113 if(NOT DEFINED SUITE)
114 message(FATAL_ERROR "Failed to determine version codename")
115 endif()
116
117 require_command(DPKG dpkg)
118 require_command(CURL curl)
119 require_command(GPG gpg)
120
121 set(DIST_NAME ${DISTRO})
122 message(STATUS "Generating stable repository configuration for ${DISTRO} ${SUITE}")
123 set(VARIANT stable)
124 configure_file(netdata.sources.in netdata.sources @ONLY)
125 message(STATUS "Generating edge repository configuration for ${DISTRO} ${SUITE}")
126 set(VARIANT edge)
127 configure_file(netdata.sources.in netdata-edge.sources @ONLY)
128 message(STATUS "Preparing changelogs")
129 set(PKG_NAME netdata-repo)
130 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/netdata-repo)
131 configure_file(deb.changelog netdata-repo/changelog @ONLY)
132 set(PKG_NAME netdata-repo-edge)
133 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/netdata-repo-edge)
134 configure_file(deb.changelog netdata-repo-edge/changelog @ONLY)
135
136 install(FILES ${CMAKE_BINARY_DIR}/netdata.sources
137 DESTINATION etc/apt/sources.list.d
138 COMPONENT netdata-repo)
139 install(FILES ${CMAKE_BINARY_DIR}/netdata-edge.sources
140 DESTINATION etc/apt/sources.list.d
141 COMPONENT netdata-repo-edge)
142
143 add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/netdatabot.gpg.key
144 COMMENT "Fetch GPG key from ${DEB_GPG_KEY_SOURCE}"
145 COMMAND ${CURL} -f -L -o ${CMAKE_BINARY_DIR}/netdatabot.gpg.key ${DEB_GPG_KEY_SOURCE})
146
147 add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/netdata.gpg
148 COMMENT "Dearmor ${CMAKE_BINARY_DIR}/netdatabot.gpg.key"
149 DEPENDS ${CMAKE_BINARY_DIR}/netdatabot.gpg.key
150 COMMAND ${GPG} --dearmor --output ${CMAKE_BINARY_DIR}/netdata.gpg ${CMAKE_BINARY_DIR}/netdatabot.gpg.key)
151 add_custom_target(dearmor_gpg_key
152 ALL
153 COMMENT "Dearmor ${CMAKE_BINARY_DIR}/netdatabot.gpg.key"
154 DEPENDS ${CMAKE_BINARY_DIR}/netdata.gpg)
155
156 # install(FILES ${CMAKE_SOURCE_DIR}/netdata-deb-repo-priority
157 # DESTINATION etc/apt/preferences.d
158 # RENAME 80netdata
159 # COMPONENT netdata-repo)
160 #
161 # install(FILES ${CMAKE_SOURCE_DIR}/netdata-deb-repo-priority
162 # DESTINATION etc/apt/preferences.d
163 # RENAME 80netdata
164 # COMPONENT netdata-repo-edge)
165
166 install(FILES ${CMAKE_BINARY_DIR}/netdata.gpg
167 DESTINATION usr/share/keyrings
168 RENAME netdata-archive-keyring.gpg
169 PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
170 COMPONENT netdata-repo)
171
172 install(FILES ${CMAKE_BINARY_DIR}/netdata.gpg
173 DESTINATION usr/share/keyrings
174 RENAME netdata-archive-keyring.gpg
175 PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
176 COMPONENT netdata-repo-edge)
177
178 set(CPACK_DEB_COMPONENT_INSTALL YES)
179 set(CPACK_DEBIAN_DEBUGINFO_PACKAGE NO)
180 set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS NO)
181 set(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS YES)
182 set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
183 set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Netdata Builder <bot@netdata.cloud>")
184 set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "all")
185 set(CPACK_DEBIAN_PACKAGE_DEPENDS "debian-keyring, gnupg")
186 set(CPACK_DEBIAN_PACKAGE_SECTION "net")
187 set(CPACK_DEBIAN_PACKAGE_VERSION "${PACKAGE_VERSION}")
188 set(CPACK_DEBIAN_PACKAGE_RELEASE "${PACKAGE_RELEASE}")
189 set(CPACK_DEBIAN_NETDATA-REPO_PACKAGE_NAME "netdata-repo")
190 set(CPACK_DEBIAN_NETDATA-REPO-EDGE_PACKAGE_NAME "netdata-repo-edge")
191 set(CPACK_DEBIAN_NETDATA-REPO_PACKAGE_CONFLICTS "netdata-repo-edge")
192 set(CPACK_DEBIAN_NETDATA-REPO-EDGE_PACKAGE_CONFLICTS "netdata-repo")
193 set(CPACK_DEBIAN_NETDATA-REPO_PACKAGE_CONTROL_EXTRA "${CMAKE_BINARY_DIR}/netdata-repo/changelog")
194 set(CPACK_DEBIAN_NETDATA-REPO-EDGE_PACKAGE_CONTROL_EXTRA "${CMAKE_BINARY_DIR}/netdata-repo-edge/changelog")
195 elseif(${DISTRO} IN_LIST RPM_DISTROS)
196 require_command(RPM rpm)
197
198 if(${RPM} STREQUAL "RPM-NOTFOUND")
199 message(FATAL_ERROR "Unable to find rpm, which is required for RPM package builds.")
200 endif()
201
202 set(REPO_CFG_PATH "yum.repos.d")
203 set(REPO_ID "dnf")
204 set(DIST_NAME "${DISTRO}")
205 set(DIST_VERSION "$releasever")
206
207 if(${DISTRO} STREQUAL "amzn")
208 set(DIST_NAME "amazonlinux")
209 if(${DISTRO_VERSION} VERSION_EQUAL 2)
210 set(DIST_VERSION "2")
211 elseif(${DISTRO_VERSION} VERSION_EQUAL 2023)
212 set(DIST_VERSION "2023")
213 else()
214 message(FATAL_ERROR "Unsupported version of Amazon Linux: ${DISTRO_VERSION}")
215 endif()
216 elseif(${DISTRO} STREQUAL "opensuse")
217 set(REPO_CFG_PATH "zypp/repos.d")
218 set(REPO_ID "zypp")
219 set(DIST_NAME "opensuse")
220
221 if(${DISTRO_VERSION} STREQUAL tumbleweed)
222 set(DIST_VERSION "tumbleweed")
223 endif()
224 elseif(${DISTRO} STREQUAL "rhel")
225 set(DIST_NAME "el")
226 set(DIST_VERSION "${DISTRO_VERSION}")
227 set(CPACK_RPM_PACKAGE_REQUIRES "epel-release")
228
229 if(${DISTRO_VERSION} VERSION_LESS 8)
230 set(CPACK_RPM_PACKAGE_REQUIRES "yum-plugin-priorities, epel-release")
231 endif()
232 endif()
233
234 message(STATUS "Generating stable repository configuration for ${DISTRO} ${DISTRO_VERSION}")
235 set(VARIANT stable)
236 configure_file(netdata.repo.${REPO_ID} netdata.repo @ONLY)
237 message(STATUS "Generating edge repository configuration for ${DISTRO} ${DISTRO_VERSION}")
238 set(VARIANT edge)
239 configure_file(netdata.repo.${REPO_ID} netdata-edge.repo @ONLY)
240
241 install(FILES ${CMAKE_BINARY_DIR}/netdata.repo
242 COMPONENT netdata-repo
243 DESTINATION etc/${REPO_CFG_PATH})
244 install(FILES ${CMAKE_BINARY_DIR}/netdata-edge.repo
245 COMPONENT netdata-repo-edge
246 DESTINATION etc/${REPO_CFG_PATH})
247
248 set(CPACK_RPM_COMPONENT_INSTALL ON)
249 set(CPACK_RPM_PACAKGE_AUTOREQPROV OFF)
250 set(CPACK_RPM_DEBUGINFO_PACKAGE OFF)
251 set(CPACK_RPM_PACKAGE_LICENSE "GPLv2")
252 set(CPACK_RPM_PACKAGE_GROUP "System Environment/Base")
253 set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST "")
254 set(CPACK_RPM_PACKAGE_ARCHITECTURE "noarch")
255 set(CPACK_RPM_PACKAGE_VERSION "${PACKAGE_VERSION}")
256 set(CPACK_RPM_PACKAGE_RELEASE "${PACKAGE_RELEASE}")
257 set(CPACK_RPM_PACKAGE_CHANGELOG "${CMAKE_SOURCE_DIR}/rpm.changelog")
258 set(CPACK_RPM_NETDATA-REPO_FILE_NAME "netdata-repo-${PACKAGE_VERSION}-${PACKAGE_RELEASE}.noarch.rpm")
259 set(CPACK_RPM_NETDATA-REPO_PACKAGE_NAME "netdata-repo")
260 set(CPACK_RPM_NETDATA-REPO_PACAKGE_CONFLICTS "netdata-repo-edge")
261 set(CPACK_RPM_NETDATA-REPO-EDGE_FILE_NAME "netdata-repo-edge-${PACKAGE_VERSION}-${PACKAGE_RELEASE}.noarch.rpm")
262 set(CPACK_RPM_NETDATA-REPO-EDGE_PACKAGE_NAME "netdata-repo-edge")
263 set(CPACK_RPM_NETDATA-REPO-EDGE_PACKAGE_CONFLICTS "netdata-repo")
264 else()
265 message(FATAL_ERROR "Unsupported distribution ${DISTRO} ${DISTRO_VERSION}")
266 endif()
267
268 include(CPack)