forked from ungleich-public/cdist
		
	Merge branch 'fix/explorer/disks' into 'master'
explorer/disks: Fix on NetBSD and support Linux w/o lsblk See merge request ungleich-public/cdist!852
This commit is contained in:
		
				commit
				
					
						aa49afd61a
					
				
			
		
					 1 changed files with 53 additions and 13 deletions
				
			
		| 
						 | 
					@ -1,27 +1,67 @@
 | 
				
			||||||
#!/bin/sh
 | 
					#!/bin/sh -e
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# based on previous work by other people, modified by:
 | 
				
			||||||
 | 
					# 2020 Dennis Camera <dennis.camera at ssrq-sds-fds.ch>
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of cdist.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					# it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					# the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					# (at your option) any later version.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					# GNU General Public License for more details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Finds disks of the system (excl. ram disks, floppy, cdrom)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uname_s="$(uname -s)"
 | 
					uname_s="$(uname -s)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
case "${uname_s}" in
 | 
					case $uname_s in
 | 
				
			||||||
    FreeBSD)
 | 
					    FreeBSD)
 | 
				
			||||||
        sysctl -n kern.disks
 | 
					        sysctl -n kern.disks
 | 
				
			||||||
    ;;
 | 
					    ;;
 | 
				
			||||||
    OpenBSD|NetBSD)
 | 
					    OpenBSD)
 | 
				
			||||||
        sysctl -n hw.disknames | grep -Eo '[lsw]d[0-9]+' | xargs
 | 
					        sysctl -n hw.disknames | grep -Eo '[lsw]d[0-9]+'
 | 
				
			||||||
 | 
					    ;;
 | 
				
			||||||
 | 
					    NetBSD)
 | 
				
			||||||
 | 
					        PATH="${PATH}:/usr/local/sbin:/usr/sbin:/sbin"
 | 
				
			||||||
 | 
					        sysctl -n hw.disknames \
 | 
				
			||||||
 | 
					        | awk 'BEGIN { RS = " " } /^[lsw]d[0-9]+/'
 | 
				
			||||||
    ;;
 | 
					    ;;
 | 
				
			||||||
    Linux)
 | 
					    Linux)
 | 
				
			||||||
        if command -v lsblk > /dev/null
 | 
					        # list of major device numbers toexclude:
 | 
				
			||||||
 | 
					        #  ram disks, floppies, cdroms
 | 
				
			||||||
 | 
					        # https://www.kernel.org/doc/Documentation/admin-guide/devices.txt
 | 
				
			||||||
 | 
					        ign_majors='1 2 11'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if command -v lsblk >/dev/null 2>&1
 | 
				
			||||||
        then
 | 
					        then
 | 
				
			||||||
            # exclude ram disks, floppies and cdroms
 | 
					            lsblk -e "$(echo "$ign_majors" | tr ' ' ',')" -dno name
 | 
				
			||||||
            # https://www.kernel.org/doc/Documentation/admin-guide/devices.txt
 | 
					        elif test -d /sys/block/
 | 
				
			||||||
            lsblk -e 1,2,11 -dno name | xargs
 | 
					        then
 | 
				
			||||||
 | 
					            # shellcheck disable=SC2012
 | 
				
			||||||
 | 
					            ls -1 /sys/block/ \
 | 
				
			||||||
 | 
					            | awk -v ign_majors="$(echo "$ign_majors" | tr ' ' '|')" '
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  devfile = "/sys/block/" $0 "/dev"
 | 
				
			||||||
 | 
					                  getline devno < devfile
 | 
				
			||||||
 | 
					                  close(devfile)
 | 
				
			||||||
 | 
					                  if (devno !~ "^(" ign_majors "):") print
 | 
				
			||||||
 | 
					                }'
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
            printf "Don't know how to list disks for %s operating system without lsblk, if you can please submit a patch\n" "${uname_s}" >&2
 | 
					            echo "Don't know how to list disks on Linux without lsblk and sysfs." >&2
 | 
				
			||||||
 | 
					            echo 'If you can, please submit a patch.'>&2
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
    ;;
 | 
					    ;;
 | 
				
			||||||
    *)
 | 
					    *)
 | 
				
			||||||
        printf "Don't know how to list disks for %s operating system, if you can please submit a patch\n" "${uname_s}" >&2
 | 
					        printf "Don't know how to list disks for %s operating system.\n" "${uname_s}" >&2
 | 
				
			||||||
 | 
					        printf 'If you can please submit a patch\n' >&2
 | 
				
			||||||
    ;;
 | 
					    ;;
 | 
				
			||||||
esac
 | 
					esac \
 | 
				
			||||||
 | 
					| xargs
 | 
				
			||||||
exit 0
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue