Skip to content

Instantly share code, notes, and snippets.

@agraul
Last active June 3, 2021 13:48
Show Gist options
  • Save agraul/3ab6d9bee1090d08d08cc6bd229789c3 to your computer and use it in GitHub Desktop.
Save agraul/3ab6d9bee1090d08d08cc6bd229789c3 to your computer and use it in GitHub Desktop.
Extract initrd on openSUSE
#!/bin/bash
set -ex
if [ -f "$1" ] ; then
if [ -f /usr/lib/dracut/skipcpio ]; then
/usr/lib/dracut/skipcpio $1 > initrd.xz;
xz -d initrd.xz;
cpio -idv < initrd;
else
echo -e "\nextracting directories..."
for i in `lsinitrd $1 | sed -e '/^Image:/,/suse/d' -e '/=/d' -e '/->/d' -e '/^d/!d' -e 's/ /_/g'`; do
echo "$i" | sed 's/.*[:0][0-9][0-9]_//'
mkdir -p $(echo "$i" | sed 's/.*[:0][0-9][0-9]_//');
done
echo -e "\nextracting files..."
for i in `lsinitrd $1 | sed -e '/^Image:/,/suse/d' -e '/=/d' -e '/->/d' -e '/^d/d' -e 's/ /_/g'`; do
echo "$i" | sed 's/.*[:0][0-9][0-9]_//'
lsinitrd -f $(echo "$i" | sed 's/.*[:0][0-9][0-9]_//') $1 >$(echo "$i" | sed 's/.*[:0][0-9][0-9]_//')
done
echo -e "\nextracting symlinks..."
for i in `lsinitrd $1 | sed -e '/^Image:/,/suse/d' -e '/=/d' -e '/^l/!d' -e 's/.*[:0][0-9][0-9] //g' -e 's/ /_/g'`; do
echo $i | sed 's/_/ /g'
LINK=${i%%_->*}
TARGET=${i##*_->_}
ln -s "$TARGET" "$LINK"
done
echo -e "\n...done"
fi
else
echo "Specify full path to initrd"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment