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