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>