-
-
Save alfredkrohmer/8d4c2a5ab62e690772f3d9de5ad2d978 to your computer and use it in GitHub Desktop.
#!/bin/sh | |
FLASH_TIME=$(opkg info busybox | grep '^Installed-Time: ') | |
for i in $(opkg list-installed | cut -d' ' -f1) | |
do | |
if [ "$(opkg info $i | grep '^Installed-Time: ')" != "$FLASH_TIME" ] | |
then | |
echo $i | |
fi | |
done |
That's way faster, @ejona86. A fraction of a second versus multiple seconds. Great
Hello
For me, none of these scripts work.
I noticed that a few of my packages have exactly the same installed time, so busybox would be the only package excluded from the output list.
I build my images with image builder in a "slow" VM.
I think installed time is not the flash time, but the install time during the build process of the image.
I found a workaround by reducing the precision of the install time value.
`#!/bin/sh
PRECISION=6
trunk_time () {
PKGTIME=$(opkg info "$1" | grep '^Installed-Time: ' | cut -f2 -d ' ')
PKGTIME=${PKGTIME:0:$2}
return
}
trunk_time busybox $PRECISION && BUILD_TIME=$PKGTIME
for i in $(opkg list-installed | cut -d' ' -f1)
do
trunk_time $i $PRECISION
if [ "$PKGTIME" != "$BUILD_TIME" ]
then
echo $i
fi
done
`
Understanding these scripts look to be correct for many, do I miss something?
Sorry but seems like I donot know how to insert code in my message
Oh .. Many Tnxs .. I took care about whats programs installed, wrote at a list .. but is possible I missed something in the way .. it's is very useful ..
Yet another variant:
DISTRI_TIME=$(grep Installed-Time /usr/lib/opkg/status | sort | head -n1)
while read -r line; do
case "$line" in
"Package: "*)
package="$line"
_skip=false;;
"${DISTRI_TIME}")
_skip=true;;
"Auto-Installed: yes")
_skip=true;;
"") # Empty line delimenates individual package blocks
[ "$_skip" = true ] || echo "$package" | awk '{print $2}';;
esac
done < /usr/lib/opkg/status | sort
Cheers!
And yet another variant. This one produces a more accurate/minimal list, as it also skips all dependents of other packages. It's based on bash, as it uses associative arrays.
https://gist.github.com/don-coleman/2218210aec58986acc80467f9a15d42b
Thanks @guymarc! Your script is the only one that worked for me. The other scripts here just list every single package installed. Maybe it is that way because I also used the Image Builder.
as someone suggested on https://www.sindastra.de/p/1213/list-user-installed-packages-in-openwrt
You can update busybox via opkg update, so it’s install time can be wrong as reference.
As a result you will have wrong list.
Only one thing you cannot install via opkg is kernel – because you update it over flashing new firmware.
So the kernel’s install time should be used as flash time.
FLASH_TIME=$(opkg info kernel | grep ‘^Installed-Time: ‘)
https://gist.github.com/ejona86/26974041ebbb3bf6602bd1bee0f92860
Faster, more reliable, and fewer false positives (but longer):
Getting FLASH_TIME is shorter with
grep ^Installed-Time: /usr/lib/opkg/status | cut -d " " -f 2 | sort -n | head -n 1
, but I chose to just use awk.