Skip to content
Snippets Groups Projects
Commit 0aa52048 authored by Lars Beckers's avatar Lars Beckers
Browse files

added lipnsa

parent 3cf7e5b8
Branches
No related tags found
No related merge requests found
#!/bin/sh
# lipnsa.sh -- collecting your data for a better world
# Lars Beckers, larsb@fsmpi.rwth-aachen.de, September 2014
if [ $# != 1 ]; then
echo "executes a command with proc and sysfs mounted"
echo "called by lipnsa.sh in a chroot environment"
echo "usage: chroot /root /lipnsa-chroot.sh cmd"
exit
fi
PROCMNT=0
if [ -f /proc/cmdline ]; then
PROCMNT=1
fi
SYSFSMNT=0
if [ -d /sys/class ]; then
SYSFSMNT=1
fi
if [ ${PROCMNT} == 0 ]; then
mount -t proc proc /proc
fi
if [ ${SYSFSMNT} == 0 ]; then
mount -t sysfs sysfs /sys
fi
$1
if [ ${PROCMNT} == 0 ]; then
umount /proc
fi
if [ ${SYSFSMNT} == 0 ]; then
umount /sys
fi
#!/bin/sh
# lipnsa.sh -- collecting your data for a better world
# Lars Beckers, larsb@fsmpi.rwth-aachen.de, September 2014
LIPSTICK="/cdrom"
LIPSTATS="${LIPSTICK}/lipstats"
TARGET="/root"
if [ $# -gt 0 ]; then
echo "collects system information, i.e. hardware and what the kernel thinks about it"
echo "called as liphook before leaving initramfs"
echo "usage: lipnsa.sh"
echo ""
echo "requires proc and sysfs to be mounted"
echo "append 'fnord' to your kernel cmdline to disable this tool"
echo "data is saved to ${LIPSTATS}/dmi-product-uuid/kernel-boot-id/"
echo "${LIPSTICK} is remounted rw in the process, remounted ro at the end"
echo "if there is no dmi-product-uuid available a kernel-random-uuid will be used"
echo "some commands are processed outside the initramfs, in a chroot using the prepared system"
echo "for that purpose lipnsa-chroot.sh is copied from the current directory to the target (${TARGET}) and deleted afterwards, but we do not remount the target"
echo ""
echo "currently lipnsa.sh collects the following:"
echo " running architecture"
echo " ip link information"
echo " block device listing"
echo " pci device listing"
echo " usb device listing"
echo " cpu information"
echo " listing of kernel modules"
echo " kernel command line"
echo " decoded dmi table"
echo " detection of active efi"
echo " detection of secureboot"
echo " memory information"
echo " partition information"
echo " and the current timestamp"
exit
fi
if [ -f /proc/cmdline ]; then
grep fnord /proc/cmdline
if [ $? == 0 ]; then
echo "lipnsa.sh has been deactivated. :("
exit
fi
else
echo "It seems that /proc is not mounted. lipnsa.sh aborting."
exit
fi
if [ ! -d /sys/class ]; then
echo "It seems that /sys is not mounted. lipnsa.sh aborting."
exit
fi
echo "This is lipnsa.sh -- collecting your data for a better world"
UUID=`cat /sys/class/dmi/id/product_uuid`
if [ $? != 0 ]; then
echo "> dmi system-uuid is unavailable, using random uuid"
UUID=`cat /proc/sys/kernel/random/uuid`
fi
BOOTID=`cat /proc/sys/kernel/random/boot_id`
echo "> using ${UUID}/${BOOTID}"
DIR="${LIPSTATS}/${UUID}/${BOOTID}"
mount -o remount,rw ${LIPSTICK}
mkdir -p "${DIR}"
if [ $? != 0 ]; then
echo "> could not create directory, aborting"
exit
fi
echo "> remounted lipstick rw, created directory"
date +%s > "${DIR}/timestamp" 2>&1
if [ $? != 0 ]; then
echo "> could not save timestamp"
else
echo "> saved timestamp"
fi
uname -m > "${DIR}/architecture" 2>&1
if [ $? != 0 ]; then
echo "> could not save architecture"
else
echo "> saved architecture"
fi
ip link > "${DIR}/ip-link" 2>&1
if [ $? != 0 ]; then
echo "> could not save ip devices"
else
echo "> saved ip devices"
fi
kmod list > "${DIR}/kmod-list" 2>&1
if [ $? != 0 ]; then
echo "> could not save the formatted module list"
else
echo "> saved the formatted module list"
fi
blkid > "${DIR}/blkid" 2>&1
if [ $? != 0 ]; then
echo "> could not save block device information"
else
echo "> saved block device information"
fi
if [ -d /sys/firmware/efi ]; then
echo "yes" > "${DIR}/efi" 2>&1
ls /sys/firmware/efi/efivars | grep -i SecureBoot > "${DIR}/secureboot"
if [ $? != 0 ]; then
echo "not found" > "${DIR}/secureboot" 2>&1
fi
else
echo "no" > "${DIR}/efi" 2>&1
fi
echo "> saved detection of efi and secureboot"
cat /proc/cmdline > "${DIR}/cmdline" 2>&1
if [ $? != 0 ]; then
echo "> could not save the kernel command line"
else
echo "> saved the kernel command line"
fi
cat /proc/modules > "${DIR}/modules" 2>&1
if [ $? != 0 ]; then
echo "> could not save the module list"
else
echo "> saved the module list"
fi
cat /proc/cpuinfo > "${DIR}/cpuinfo" 2>&1
if [ $? != 0 ]; then
echo "> could not save cpu information"
else
echo "> saved cpu information"
fi
cat /proc/meminfo > "${DIR}/meminfo" 2>&1
if [ $? != 0 ]; then
echo "> could not save memory information"
else
echo "> saved memory information"
fi
cat /proc/partitions > "${DIR}/partitions" 2>&1
if [ $? != 0 ]; then
echo "> could not save the partition list"
else
echo "> saved the partition list"
fi
cp lipnsa-chroot.sh ${TARGET}/lipnsa-chroot.sh
if [ $? != 0 ]; then
echo "> could not copy into target, skipping chrooted commands"
else # chrooted commands
# actually lsblk, lscpu and dmidecode work without chroot
# but i think it is more sane to not depend on that
chroot ${TARGET} /lipnsa-chroot.sh "lspci -mm" > "${DIR}/lspci" 2>&1
if [ $? != 0 ]; then
echo "> could not save listing of pci devices"
else
echo "> saved listing of pci devices"
fi
chroot ${TARGET} /lipnsa-chroot.sh lsblk > "${DIR}/lsblk" 2>&1
if [ $? != 0 ]; then
echo "> could not save listing of block devices"
else
echo "> saved listing of block devices"
fi
chroot ${TARGET} /lipnsa-chroot.sh lscpu > "${DIR}/lscpu" 2>&1
if [ $? != 0 ]; then
echo "> could not save listing of cpus"
else
echo "> saved listing of cpus"
fi
chroot ${TARGET} /lipnsa-chroot.sh dmidecode > "${DIR}/dmidecode" 2>&1
if [ $? != 0 ]; then
echo "> could not save decoded dmi table"
else
echo "> saved decoded dmi table"
fi
chroot ${TARGET} /lipnsa-chroot.sh lsusb > "${DIR}/lsusb" 2>&1
if [ $? != 0 ]; then
grep "unable to initialize libusb: -99" "${DIR}/lsusb"
if [ $? != 0 ]; then
echo "> could not save listing of usb devices"
else
echo "no usb controller found" > "${DIR}/lsusb" 2>&1
echo "> saved listing of usb devices"
fi
else
echo "> saved listing of usb devices"
fi
rm ${TARGET}/lipnsa-chroot.sh
fi # chrooted commands
sync
if [ $? != 0 ]; then
echo "> could not flush filesystem buffers"
else
echo "> flushed filesystem buffers"
fi
mount -o remount,ro ${LIPSTICK}
if [ $? != 0 ]; then
echo "> could not remount lipstick ro"
else
echo "> remounted lipstick ro"
fi
echo "lipnsa.sh has finished, thank you for your cooperation"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment