Annotation of freem/scripts/_fmd_common.bash, revision 1.7
1.1 snw 1: #
1.7 ! snw 2: # $Id: _fmd_common.bash,v 1.6 2025/04/14 13:06:46 snw Exp $
1.1 snw 3: # fmd common functions
4: #
5: #
6: # Author: Serena Willis <snw@coherent-logic.com>
7: # Copyright (C) 2025 Coherent Logic Development LLC
8: #
9: #
10: # This file is part of FreeM.
11: #
12: # FreeM is free software: you can redistribute it and/or modify
13: # it under the terms of the GNU Affero Public License as published by
14: # the Free Software Foundation, either version 3 of the License, or
15: # (at your option) any later version.
16: #
17: # FreeM is distributed in the hope that it will be useful,
18: # but WITHOUT ANY WARRANTY; without even the implied warranty of
19: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20: # GNU Affero Public License for more details.
21: #
22: # You should have received a copy of the GNU Affero Public License
23: # along with FreeM. If not, see <https://www.gnu.org/licenses/>.
24: #
1.2 snw 25: # $Log: _fmd_common.bash,v $
1.7 ! snw 26: # Revision 1.6 2025/04/14 13:06:46 snw
! 27: # Add OS/2 RPM build script to fmd
! 28: #
1.6 snw 29: # Revision 1.5 2025/04/10 15:27:39 snw
30: # Detect Devuan distribution and fix OS/2 problem with iniconf.c
31: #
1.5 snw 32: # Revision 1.4 2025/04/07 05:19:15 snw
33: # Initial work on moving rpm packaging to fmd
34: #
1.4 snw 35: # Revision 1.3 2025/04/07 01:23:10 snw
36: # Add OS detection for Raspbian
37: #
1.3 snw 38: # Revision 1.2 2025/04/07 00:45:52 snw
39: # Enhance fmd-pkg-dpkg to auto-generate the debian/changelog file from the FreeM ChangeLog
40: #
1.2 snw 41: # Revision 1.1 2025/04/06 03:38:05 snw
42: # Prepare for adding packaging functionality to fmd
43: #
1.1 snw 44: #
45: # SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC
46: # SPDX-License-Identifier: AGPL-3.0-or-later
47: #
48:
49: function _fmd_os_detect()
50: {
51: export _fmd_uname=$(uname -a)
52: export _fmd_kernel=$(uname | tr '[:upper:]' '[:lower:]')
53:
54: _fmd_can_package=0
55:
56: case $_fmd_kernel in
57:
1.6 snw 58: "os/2")
59: export _fmd_arch=i386
60: export _fmd_subarch=i386
61: export _fmd_osversion=$(echo "${_fmd_uname}" | cut -d" " -f3)
62: export _fmd_distribution="OS/2"
63: export _fmd_distfamily="OS/2"
64: export _fmd_can_package=1
65: export _fmd_pkg_mechanism=os2rpm
1.7 ! snw 66: ;;
1.6 snw 67:
1.1 snw 68: sunos)
69: export _fmd_arch=$(isainfo | cut -d" " -f2)
70: export _fmd_subarch=$(isainfo | cut -d" " -f1)
71: export _fmd_osversion=$(echo "${_fmd_uname}" | cut -d" " -f3)
72:
73: local distname=$(cat /etc/release | head -1 | awk '{print $1}')
74: case $distname in
75: Solaris)
76: export _fmd_distribution="solaris"
77: ;;
78: Oracle)
79: export _fmd_distribution="solaris"
80: ;;
81: OpenIndiana)
82: export _fmd_distribution="openindiana"
83: export _fmd_distfamily="illumos"
84: ;;
85: *)
86: export _fmd_distribution="unknown"
87: ;;
88: esac
89:
90: ##
91: # account for systems like Oracle Solaris 11
92: # that do not have the traditional pkgadd infrastructure
93: #
94: which pkgtrans &> /dev/null
95: if [[ $? == 0 ]]
96: then
97: export _fmd_can_package=1
98: export _fmd_pkg_mechanism="pkgadd"
99: else
100: export _fmd_can_package=0
101: fi
102: ;;
103:
104: netbsd)
105: export _fmd_arch=$(echo "{_fmd_uname}" | awk '{ print $NF }')
106: export _fmd_subarch=${_fmd_arch}
107: export _fmd_osversion=$(echo $"{_fmd_uname}" | awk '{ print $3 }')
108: export _fmd_distribution="netbsd"
109: export _fmd_distfamily="bsd"
110: export _fmd_can_package=1
111: export _fmd_pkg_mechanism="pkgsrc"
112: ;;
113:
114: freebsd)
115: export _fmd_arch=$(echo "${_fmd_uname}" | awk '{ print $NF }')
116: export _fmd_subarch=${_fmd_arch}
117: export _fmd_osversion=$(echo "${_fmd_uname}" | awk '{ print $3 }')
118: export _fmd_distribution="freebsd"
119: export _fmd_distfamily="bsd"
120: export _fmd_can_package=0
121: ;;
122:
123: openbsd)
124: export _fmd_arch=$(echo "${_fmd_uname}" | awk '{ print $NF }')
125: export _fmd_subarch=${_fmd_arch}
126: export _fmd_osversion=$(echo "${_fmd_uname}" | awk '{ print $3 }')
127: export _fmd_distribution="openbsd"
128: export _fmd_distfamily="bsd"
129: export _fmd_can_package=0
130: ;;
131:
132: osf1)
133: export _fmd_arch="alpha"
134: export _fmd_subarch="alpha"
135: export _fmd_osversion=$(echo "${_fmd_uname}" | awk '{ print $3 }')
136: export _fmd_distribution="tru64"
137: export _fmd_distfamily="osf1"
138: export _fmd_can_package=0
139: ;;
140:
141: sco_sv)
142: export _fmd_arch="i386"
143: export _fmd_subarch="i386"
144: export _fmd_osversion=$(echo "${_fmd_uname}" | awk '{ print $4 }')
145: export _fmd_distribution="sco"
146: ;;
147:
148: linux)
149: export _fmd_subarch=$(echo "${_fmd_uname}" | awk '{ print $(NF - 1) }')
150: export _fmd_arch="${_fmd_subarch}"
151:
152: which lsb_release &> /dev/null;
153: if [[ $? == 0 ]]
154: then
155: local distname=$(lsb_release -i | awk '{print $3}' | tr '[:upper:]' '[:lower:]')
156: export _fmd_osversion=$(lsb_release -r | awk '{print $2}' | tr '[:upper:]' '[:lower:]')
157: else
158: local distfound=0
159:
160: if [[ -f /etc/redhat-release ]]
161: then
162: distfound=1
163: export _fmd_osversion=$(cat /etc/redhat-release | cut -d'(' -f1 | awk '{ print $NF }')
164: local distname=$(cat /etc/redhat-release | awk '{ print $1 }' | tr '[:upper]' '[:lower:]')
165: fi
166:
167: if [[ -f /etc/debian_version ]]
168: then
169: ##
170: # note that /etc/debian_version exists on Ubuntu
171: # as well, but Ubuntu always has `lsb_release` AFAIK,
172: # so Ubuntu systems should never reach this block
173: #
174: distfound=1
175: export _fmd_osversion=$(cat /etc/debian_version)
176: local distname="debian"
177: fi
178:
179: if [[ -f /etc/slackware-version ]]
180: then
181: distfound=1
182: local distname="slackware"
183: fi
184:
185: if [[ $distfound == 0 ]]
186: then
187: local distname="unknown"
188: fi
189: fi
190:
191: case $distname in
192: arch)
193: export _fmd_distribution="arch"
194: export _fmd_distfamily="arch"
195: export _fmd_can_package=0
196: export _fmd_pkg_mechanism="pacman"
197: ;;
1.5 snw 198:
199: devuan)
200: export _fmd_distribution="devuan"
201: export _fmd_distfamily="debian"
202: export _fmd_can_package=1
203: export _fmd_pkg_mechanism="dpkg"
204: ;;
205:
1.1 snw 206: debian)
207: export _fmd_distribution="debian"
208: export _fmd_distfamily="debian"
209: export _fmd_can_package=1
210: export _fmd_pkg_mechanism="dpkg"
211: ;;
1.3 snw 212:
213: raspbian)
214: export _fmd_distribution="raspbian"
215: export _fmd_distfamily="debian"
216: export _fmd_can_package=1
217: export _fmd_pkg_mechanism="dpkg"
218: ;;
1.1 snw 219:
220: ubuntu)
221: export _fmd_distribution="ubuntu"
222: export _fmd_distfamily="debian"
223: export _fmd_can_package=1
224: export _fmd_pkg_mechanism="dpkg"
225: ;;
226:
227: linuxmint)
228: export _fmd_distribution="mint"
229: export _fmd_distfamily="debian"
230: export _fmd_can_package=1
231: export _fmd_pkg_mechanism="dpkg"
232: ;;
233:
234: slackware)
235: export _fmd_distribution="slackware"
236: export _fmd_distfamily="slackware"
237: export _fmd_can_package=0
238: export _fmd_pkg_mechanism="txz"
239: ;;
240:
241: opensuse)
242: export _fmd_distribution="opensuse"
243: export _fmd_distfamily="suse"
244: export _fmd_can_package=0
1.4 snw 245: export _fmd_pkg_mechanism="rpm"
1.1 snw 246: ;;
247:
1.4 snw 248: rockylinux)
1.1 snw 249: export _fmd_distribution="rocky"
250: export _fmd_distfamily="redhat"
251: export _fmd_can_package=1
1.4 snw 252: export _fmd_pkg_mechanism="rpm"
1.1 snw 253: ;;
254:
255: fedora)
256: export _fmd_distribution="fedora"
257: export _fmd_distfamily="redhat"
258: export _fmd_can_package=1
1.4 snw 259: export _fmd_pkg_mechanism="rpm"
1.1 snw 260: ;;
261:
262: unknown)
263: export _fmd_distribution="unknown"
264: export _fmd_distfamily="unknown"
265: export _fmd_can_package=0
266: ;;
267:
268: esac
269: ;;
270: esac
271:
272: }
273:
274: function _fmd_repo_detect()
275: {
276: if [[ ! -f sem.ver ]]
277: then
278: echo "fmd: $(pwd) is not a FreeM repository"
279: exit 1
280: fi
281:
282: export _fmd_freem_version=$(cat sem.ver)
283: }
284:
285: function _fmd_loadconfig()
286: {
287: export _fmd_cvsuser=$(cat "${_fmd_rc}" | grep "user=" | cut -d= -f2)
288: export _fmd_email=$(cat "${_fmd_rc}" | grep "email=" | cut -d= -f2)
1.5 snw 289: export _fmd_fullname=$(cat "${_fmd_rc}" | grep "fullname=" | cut -d= -f2)
290: export _fmd_mantis_key=$(cat "${_fmd_rc}" | grep "mantis_key=" | cut -d= -f2)
1.1 snw 291: }
292:
293: function _fmd_reconfig()
294: {
295: echo
296: echo
297: echo -n "What is your username on cvs.coherent-logic.com? "
298: read _fmd_cvsuser
299: echo -n "What e-mail address do you want to use for FreeM contributions? "
300: read _fmd_email
301: echo -n "What is your full name? "
302: read _fmd_fullname
1.5 snw 303: echo -n "What is your Mantis API key? "
304: read _fmd_mantis_key
1.1 snw 305: echo "user=${_fmd_cvsuser}" > "${_fmd_rc}"
306: echo "email=${_fmd_email}" >> "${_fmd_rc}"
307: echo "fullname=${_fmd_fullname}" >> "${_fmd_rc}"
1.5 snw 308: echo "mantis_key=${_fmd_mantis_key}" >> "${_fmd_rc}"
1.1 snw 309: echo
310: echo "fmd: wrote ${_fmd_rc}"
311: }
312:
313: function _fmd_chkconfig()
314: {
315: export _fmd_rc="${HOME}/.fmdrc"
316:
317: if [[ ! -f "${_fmd_rc}" ]]
318: then
319: echo "fmd: not configured"
320: _fmd_reconfig
321: fi
322:
323: _fmd_loadconfig
324: }
325:
1.2 snw 326: function _fmd_next_dpkg()
327: {
328: local URL="https://freem.coherent-logic.com/nextdpkg.cfm?release=${_fmd_freem_version}&arch=${_fmd_arch}"
329: local RESULT=$(curl "${URL}" 2>/dev/null)
330:
331: echo "${RESULT}"
332: }
333:
1.1 snw 334: function _fmd_commands()
335: {
336: ls -1 ${_fmd_script_dir}/fmd-* | cut -d'-' -f2 | grep -v "~"
337: }
338:
339: SCRIPT_DIR=$(dirname "$0")
340: export _fmd_script_dir="${SCRIPT_DIR}"
341:
342: _fmd_chkconfig
343: _fmd_repo_detect
344: _fmd_os_detect
345:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>