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