diff --git a/.gitignore b/.gitignore index dad4e7d..73d7763 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ out/* cache/* report.html +tools/__pycache__ \ No newline at end of file diff --git a/Makefile b/Makefile index 6f25ae1..65b8cc2 100644 --- a/Makefile +++ b/Makefile @@ -15,17 +15,20 @@ FILE_LISTS = \ all: report.html flatpak-runtime.yaml -report.html $(PROFILE_FILES): $(PACKAGE_LISTS) package-notes.txt generate-report.py report-template.html - ./generate-report.py +report.html $(PROFILE_FILES): $(PACKAGE_LISTS) package-notes.txt tools/generate-report.py report-template.html + ./tools/generate-report.py -flatpak-runtime.yaml: $(PROFILE_FILES) flatpak-runtime.in.yaml generate-modulemd.py - ./generate-modulemd.py +$(FILE_LISTS): tools/generate-files.sh tools/list-files.py + ./tools/generate-files.sh $@ -$(FILE_LISTS): %.files: generate-files.sh list-files.py - ./generate-files.sh $@ +$(PACKAGE_LISTS): tools/resolve-files.py $(FILE_LISTS) -%.packages: %.files resolve-files.py - ./resolve-files.py $< + for f in $(patsubst %.packages,%.files,$(PACKAGE_LISTS)) ; do \ + ./tools/resolve-files.py $$f ; \ + done + +flatpak-runtime.yaml: $(PROFILE_FILES) flatpak-runtime.in.yaml tools/generate-modulemd.py + ./tools/generate-modulemd.py clean: rm -f out/* diff --git a/data/f26-flatpak-runtime.packages b/data/f26-flatpak-runtime.packages new file mode 100644 index 0000000..538ff24 --- /dev/null +++ b/data/f26-flatpak-runtime.packages @@ -0,0 +1,204 @@ +abattis-cantarell-fonts +acl +adwaita-cursor-theme +adwaita-gtk2-theme +adwaita-icon-theme +at-spi2-atk +at-spi2-core +atk +audit-libs +avahi-libs +basesystem +bash +bzip2-libs +ca-certificates +cairo +cairo-gobject +chkconfig +colord-libs +coreutils +coreutils-common +cracklib +crypto-policies +cryptsetup-libs +cups-libs +dbus +dbus-libs +device-mapper +device-mapper-libs +elfutils-default-yama-scope +elfutils-libelf +elfutils-libs +emacs-filesystem +enchant +expat +fedora-modular-release +fedora-modular-repos +filesystem +flatpak-runtime-config +fontconfig +fontpackages-filesystem +freetype +gawk +gdbm +gdk-pixbuf2 +gdk-pixbuf2-modules +glib-networking +glib2 +glibc +glibc-all-langpacks +glibc-common +gmp +gnome-desktop3 +gnome-themes-standard +gnutls +gobject-introspection +graphite2 +grep +gsettings-desktop-schemas +gtk-update-icon-cache +gtk2 +gtk3 +gvfs-client +gzip +harfbuzz +hicolor-icon-theme +hunspell +hunspell-en-GB +hunspell-en-US +hwdata +info +iptables-libs +jasper-libs +jbigkit-libs +json-glib +keyutils-libs +kmod-libs +krb5-libs +lcms2 +libX11 +libX11-common +libXau +libXcomposite +libXcursor +libXdamage +libXext +libXfixes +libXft +libXi +libXinerama +libXrandr +libXrender +libXtst +libXxf86vm +libacl +libappstream-glib +libarchive +libattr +libblkid +libcap +libcap-ng +libcom_err +libcroco +libcrypt +libdatrie +libdb +libdrm +libepoxy +libfdisk +libffi +libgcab1 +libgcc +libgcrypt +libglvnd +libglvnd-egl +libglvnd-glx +libgpg-error +libgusb +libidn +libidn2 +libjpeg-turbo +libmodman +libmount +libnotify +libpcap +libpciaccess +libpng +libproxy +libpwquality +librsvg2 +libseccomp +libselinux +libsemanage +libsepol +libsigsegv +libsmartcols +libsoup +libstdc++ +libstemmer +libtasn1 +libthai +libtiff +libunistring +libusbx +libutempter +libuuid +libverto +libwayland-client +libwayland-cursor +libwayland-server +libxcb +libxkbcommon +libxml2 +libxshmfence +lz4-libs +lzo +mesa-libEGL +mesa-libGL +mesa-libgbm +mesa-libglapi +mesa-libwayland-egl +mpfr +ncurses +ncurses-base +ncurses-libs +nettle +openssl-libs +p11-kit +p11-kit-trust +pam +pango +pcre +pixman +popt +python3 +python3-appdirs +python3-cairo +python3-gobject +python3-gobject-base +python3-libs +python3-packaging +python3-pip +python3-pyparsing +python3-setuptools +python3-six +qrencode-libs +readline +rest +sed +setup +shadow-utils +shared-mime-info +sqlite-libs +system-python +system-python-libs +systemd +systemd-libs +systemd-pam +tzdata +ustr +util-linux +xkeyboard-config +xz-libs +zenity +zlib diff --git a/data/f27-live.packages b/data/f27-live.packages new file mode 100644 index 0000000..0d2f5ef --- /dev/null +++ b/data/f27-live.packages @@ -0,0 +1,1561 @@ +aajohan-comfortaa-fonts +abattis-cantarell-fonts +abrt +abrt-addon-ccpp +abrt-addon-coredump-helper +abrt-addon-kerneloops +abrt-addon-pstoreoops +abrt-addon-vmcore +abrt-addon-xorg +abrt-cli +abrt-dbus +abrt-desktop +abrt-gui +abrt-gui-libs +abrt-java-connector +abrt-libs +abrt-plugin-bodhi +abrt-retrace-client +abrt-tui +accountsservice +accountsservice-libs +acl +adcli +adobe-source-han-sans-cn-fonts +adobe-source-han-sans-tw-fonts +adobe-source-han-serif-cn-fonts +adobe-source-han-serif-tw-fonts +adwaita-cursor-theme +adwaita-gtk2-theme +adwaita-icon-theme +adwaita-qt4 +adwaita-qt5 +alsa-lib +alsa-plugins-pulseaudio +alsa-ucm +alsa-utils +anaconda +anaconda-core +anaconda-gui +anaconda-tui +anaconda-user-help +anaconda-widgets +appstream-data +apr +apr-util +argyllcms +atk +atkmm +atmel-firmware +at-spi2-atk +at-spi2-core +attr +audit +audit-libs +audit-libs-python3 +augeas-libs +authconfig +autocorr-en +avahi +avahi-glib +avahi-libs +b43-fwcutter +b43-openfwwf +baobab +basesystem +bash +bash-completion +bc +bcache-tools +bind99-libs +bind99-license +bind-libs +bind-libs-lite +bind-license +bind-utils +blivet-gui-runtime +bluez +bluez-cups +bluez-libs +bluez-obexd +boost-date-time +boost-filesystem +boost-iostreams +boost-system +brasero-libs +bridge-utils +brlapi +brltty +btrfs-progs +bubblewrap +bzip2 +bzip2-libs +ca-certificates +cairo +cairo-gobject +cairomm +c-ares +caribou +caribou-gtk2-module +caribou-gtk3-module +cdparanoia-libs +celt051 +checkpolicy +cheese +cheese-libs +chkconfig +chrony +cifs-utils +cldr-emoji-annotation +clucene-contribs-lib +clucene-core +clutter +clutter-gst2 +clutter-gst3 +clutter-gtk +cogl +colord +colord-gtk +colord-libs +color-filesystem +compat-openssl10 +comps-extras +control-center +control-center-filesystem +copy-jdk-configs +coreutils +coreutils-common +corosync +corosynclib +cpio +cracklib +cracklib-dicts +crda +createrepo_c +createrepo_c-libs +cronie +cronie-anacron +crontabs +crypto-policies +cryptsetup +cryptsetup-libs +cups +cups-client +cups-filesystem +cups-filters +cups-filters-libs +cups-libs +cups-pk-helper +curl +cyrus-sasl +cyrus-sasl-gssapi +cyrus-sasl-lib +cyrus-sasl-plain +dbus +dbus-glib +dbus-libs +dbusmenu-qt +dbus-x11 +dbxtool +dconf +dejavu-fonts-common +dejavu-sans-fonts +dejavu-sans-mono-fonts +dejavu-serif-fonts +deltarpm +desktop-backgrounds-gnome +desktop-file-utils +device-mapper +device-mapper-event +device-mapper-event-libs +device-mapper-libs +device-mapper-multipath +device-mapper-multipath-libs +device-mapper-persistent-data +dhcp-client +dhcp-common +dhcp-libs +diffutils +djvulibre-libs +dleyna-connector-dbus +dleyna-core +dleyna-server +dmidecode +dmraid +dmraid-events +dnf +dnf-conf +dnf-plugins-core +dnf-yum +dnsmasq +dos2unix +dosfstools +dotconf +dracut +dracut-config-rescue +dracut-live +dracut-network +drpm +e2fsprogs +e2fsprogs-libs +ebtables +edk2-ovmf +efibootmgr +efivar +efivar-libs +elfutils +elfutils-default-yama-scope +elfutils-libelf +elfutils-libs +emacs-filesystem +enca +enchant +eog +epiphany-runtime +espeak +ethtool +evince +evince-djvu +evince-libs +evince-nautilus +evolution +evolution-data-server +evolution-data-server-langpacks +evolution-ews +evolution-ews-langpacks +evolution-help +evolution-langpacks +exempi +exiv2 +exiv2-libs +expat +f27-backgrounds-base +f27-backgrounds-gnome +fcoe-utils +fedora-bookmarks +fedora-logos +fedora-logos-httpd +fedora-productimg-workstation +fedora-release +fedora-release-workstation +fedora-repos +fedora-repos-rawhide +fedora-user-agent-chrome +fedora-workstation-backgrounds +file +file-libs +file-roller +file-roller-nautilus +filesystem +findutils +fipscheck +fipscheck-lib +firefox +firewalld +firewalld-filesystem +flac-libs +flatpak +flatpak-libs +folks +fontconfig +fontpackages-filesystem +foomatic +foomatic-db +foomatic-db-filesystem +foomatic-db-ppds +fpaste +fprintd +fprintd-pam +freetype +frei0r-plugins +fros +fros-gnome +fuse +fuse-common +fuse-libs +fwupd +fwupdate-efi +fwupdate-libs +fwupd-labels +gavl +gawk +gc +GConf2 +gcr +gd +gdb-headless +gdbm +gdisk +gdk-pixbuf2 +gdk-pixbuf2-modules +gdm +gdouros-symbola-fonts +gedit +genisoimage +geoclue2 +geoclue2-libs +geocode-glib +GeoIP +GeoIP-GeoLite-data +gettext +gettext-libs +gfbgraph +ghostscript +ghostscript-core +ghostscript-fonts +ghostscript-x11 +giflib +git +git-core +git-core-doc +gjs +glade-libs +glib2 +glibc +glibc-all-langpacks +glibc-common +glibc-langpack-en +glibmm24 +glib-networking +glusterfs +glusterfs-api +glusterfs-cli +glusterfs-client-xlators +glusterfs-fuse +glusterfs-libs +glx-utils +gmime30 +gmp +gnome-abrt +gnome-autoar +gnome-backgrounds +gnome-bluetooth +gnome-bluetooth-libs +gnome-boxes +gnome-calculator +gnome-calendar +gnome-characters +gnome-classic-session +gnome-clocks +gnome-color-manager +gnome-contacts +gnome-desktop3 +gnome-disk-utility +gnome-documents +gnome-documents-libs +gnome-font-viewer +gnome-getting-started-docs +gnome-initial-setup +gnome-keyring +gnome-keyring-pam +gnome-logs +gnome-maps +gnome-menus +gnome-online-accounts +gnome-online-miners +gnome-screenshot +gnome-session +gnome-session-wayland-session +gnome-session-xsession +gnome-settings-daemon +gnome-shell +gnome-shell-extension-alternate-tab +gnome-shell-extension-apps-menu +gnome-shell-extension-background-logo +gnome-shell-extension-common +gnome-shell-extension-launch-new-instance +gnome-shell-extension-places-menu +gnome-shell-extension-window-list +gnome-software +gnome-system-monitor +gnome-terminal +gnome-terminal-nautilus +gnome-themes-standard +gnome-todo +gnome-user-docs +gnome-user-share +gnome-video-effects +gnome-weather +gnu-free-fonts-common +gnu-free-mono-fonts +gnu-free-sans-fonts +gnu-free-serif-fonts +gnupg +gnupg2 +gnupg2-smime +gnutls +gobject-introspection +gom +google-android-emoji-fonts +google-crosextra-caladea-fonts +google-crosextra-carlito-fonts +google-noto-emoji-fonts +google-noto-fonts-common +google-noto-sans-lisu-fonts +google-noto-sans-mandaic-fonts +google-noto-sans-meetei-mayek-fonts +google-noto-sans-sinhala-fonts +google-noto-sans-tagalog-fonts +google-noto-sans-tai-tham-fonts +google-noto-sans-tai-viet-fonts +gperftools-libs +gpgme +gpgmepp +gpg-pubkey +graphite2 +grep +grilo +grilo-plugins +groff-base +grub2-common +grub2-efi-ia32 +grub2-efi-ia32-cdboot +grub2-efi-x64 +grub2-efi-x64-cdboot +grub2-pc +grub2-pc-modules +grub2-tools +grub2-tools-efi +grub2-tools-extra +grub2-tools-minimal +grubby +gsettings-desktop-schemas +gsm +gsound +gspell +gssdp +gssproxy +gstreamer1 +gstreamer1-plugins-bad-free +gstreamer1-plugins-bad-free-gtk +gstreamer1-plugins-base +gstreamer1-plugins-good +gstreamer1-plugins-ugly-free +gtk2 +gtk3 +gtkmm24 +gtkmm30 +gtksourceview3 +gtkspell3 +gtk-update-icon-cache +gtk-vnc2 +guile +gupnp +gupnp-av +gupnp-dlna +gutenprint +gutenprint-cups +gutenprint-libs +gvfs +gvfs-afc +gvfs-afp +gvfs-archive +gvfs-client +gvfs-fuse +gvfs-goa +gvfs-gphoto2 +gvfs-mtp +gvfs-smb +gvnc +gzip +hardlink +harfbuzz +harfbuzz-icu +hfsplus-tools +hicolor-icon-theme +highlight +hostname +hplip +hplip-common +hplip-libs +httpd +httpd-filesystem +httpd-tools +http-parser +hunspell +hunspell-en +hunspell-en-GB +hunspell-en-US +hwdata +hyperv-daemons +hyperv-daemons-license +hypervfcopyd +hypervkvpd +hypervvssd +hyphen +hyphen-en +ibus +ibus-gtk2 +ibus-gtk3 +ibus-hangul +ibus-kkc +ibus-libpinyin +ibus-libs +ibus-libzhuyin +ibus-m17n +ibus-qt +ibus-rawcode +ibus-setup +ibus-typing-booster +ibus-wayland +iio-sensor-proxy +info +initscripts +ipcalc +iproute +iproute-tc +ipset +ipset-libs +iptables +iptables-libs +iptstate +iputils +ipw2100-firmware +ipw2200-firmware +ipxe-roms-qemu +iscsi-initiator-utils +iscsi-initiator-utils-iscsiuio +isns-utils-libs +iso-codes +isomd5sum +iw +iwl1000-firmware +iwl100-firmware +iwl105-firmware +iwl135-firmware +iwl2000-firmware +iwl2030-firmware +iwl3160-firmware +iwl3945-firmware +iwl4965-firmware +iwl5000-firmware +iwl5150-firmware +iwl6000-firmware +iwl6000g2a-firmware +iwl6000g2b-firmware +iwl6050-firmware +iwl7260-firmware +jansson +jasper-libs +java-1.8.0-openjdk-headless +javapackages-tools +jbigkit-libs +jimtcl +jomolhari-fonts +js-jquery +json-c +json-glib +julietaula-montserrat-fonts +jwhois +kbd +kbd-legacy +kbd-misc +kernel +kernel-core +kernel-modules +kernel-modules-extra +kexec-tools +kexec-tools-anaconda-addon +keybinder3 +keyutils +keyutils-libs +khmeros-base-fonts +khmeros-fonts-common +kmod +kmod-libs +kpartx +krb5-libs +kyotocabinet-libs +lame-libs +langpacks-en +langtable +langtable-data +langtable-python3 +lcms2 +less +liba52 +libabw +libacl +libaio +libao +libappstream-glib +libarchive +libassuan +libasyncns +libatasmart +libatomic_ops +libattr +libavc1394 +libbabeltrace +libbasicobjects +libblkid +libblockdev +libblockdev-btrfs +libblockdev-crypto +libblockdev-dm +libblockdev-fs +libblockdev-kbd +libblockdev-loop +libblockdev-lvm +libblockdev-mdraid +libblockdev-mpath +libblockdev-part +libblockdev-plugins-all +libblockdev-swap +libblockdev-utils +libbluray +libbytesize +libcacard +libcanberra +libcanberra-gtk2 +libcanberra-gtk3 +libcap +libcap-ng +libcdio +libcdio-paranoia +libcdr +libcgroup +libchamplain +libchamplain-gtk +libcmis +libcollection +libcom_err +libcomps +libconfig +libcroco +libcrypt-nss +libcryptui +libcue +libcurl +libdaemon +libdatrie +libdb +libdb-utils +libdfu +libdhash +libdmapsharing +libdmx +libdnet +libdnf +libdrm +libdv +libdvdnav +libdvdread +libe-book +libedit +libeot +libepoxy +liberation-fonts-common +liberation-mono-fonts +liberation-sans-fonts +liberation-serif-fonts +libertas-usb8388-firmware +libetonyek +libev +libevdev +libevent +libexif +libexttextcat +libfdisk +libfdt +libffi +libfontenc +libfprint +libfreehand +libgcab1 +libgcc +libgcrypt +libgdata +libgdither +libgee +libgepub +libgexiv2 +libgltf +libglvnd +libglvnd-egl +libglvnd-gles +libglvnd-glx +libgnomekbd +libgnome-keyring +libgomp +libgovirt +libgpg-error +libgphoto2 +libgpod +libgrss +libgsf +libgtop2 +libgudev +libgusb +libgweather +libgxps +libhangul +libibverbs +libical +libICE +libicu +libidn +libidn2 +libiec61883 +libieee1284 +libimagequant +libimobiledevice +libini_config +libinput +libipa_hbac +libipt +libiptcdata +libiscsi +libjpeg-turbo +libkadm5 +libkkc +libkkc-common +libkkc-data +libksba +liblangtag +liblangtag-data +libldb +liblouis +libmbim +libmbim-utils +libmcpp +libmediaart +libmetalink +libmng +libmnl +libmodman +libmount +libmpc +libmpcdec +libmspack +libmspub +libmtp +libmusicbrainz5 +libmwaw +libmx +libndp +libnetfilter_conntrack +libnfnetlink +libnfs +libnfsidmap +libnghttp2 +libnl3 +libnl3-cli +libnma +libnm-gtk +libnotify +liboauth +libodfgen +libogg +liborcus +libosinfo +libpagemaker +libpath_utils +libpcap +libpciaccess +libpeas +libpeas-gtk +libpeas-loader-python3 +libphodav +libpinyin +libpinyin-data +libpipeline +libpkgconf +libplist +libpng +libproxy +libproxy-mozjs +libpskc +libpsl +libpwquality +libqb +libqmi +libqmi-utils +libquvi +libquvi-scripts +librados2 +LibRaw +libraw1394 +librbd1 +librdmacm +libref_array +libreoffice-calc +libreoffice-core +libreoffice-data +libreoffice-draw +libreoffice-emailmerge +libreoffice-filters +libreoffice-graphicfilter +libreoffice-gtk2 +libreoffice-gtk3 +libreoffice-help-en +libreoffice-impress +libreofficekit +libreoffice-langpack-en +libreoffice-math +libreoffice-opensymbol-fonts +libreoffice-pdfimport +libreoffice-pyuno +libreoffice-ure +libreoffice-ure-common +libreoffice-writer +libreoffice-x11 +libreoffice-xsltfilter +librepo +libreport +libreport-anaconda +libreport-cli +libreport-fedora +libreport-filesystem +libreport-gtk +libreport-plugin-bugzilla +libreport-plugin-kerneloops +libreport-plugin-logger +libreport-plugin-reportuploader +libreport-plugin-systemd-journal +libreport-plugin-ureport +libreport-python3 +libreport-web +librevenge +librsvg2 +libsamplerate +libsane-hpaio +libseccomp +libsecret +libselinux +libselinux-python3 +libselinux-utils +libsemanage +libsemanage-python3 +libsepol +libshout +libsigc++20 +libsigsegv +libSM +libsmartcols +libsmbclient +libsmbios +libsndfile +libsolv +libsoup +libspectre +libsrtp +libss +libssh +libssh2 +libsss_autofs +libsss_certmap +libsss_idmap +libsss_nss_idmap +libsss_sudo +libstaroffice +libstdc++ +libstemmer +libsysfs +libtalloc +libtar +libtasn1 +libtdb +libteam +libtevent +libthai +libtheora +libtiff +libtimezonemap +libtirpc +libtool-ltdl +libudisks2 +libunistring +libunwind +libusal +libusb +libusbmuxd +libusbx +libuser +libutempter +libuuid +libv4l +libvdpau +libverto +libverto-libev +libvirt-daemon +libvirt-daemon-config-network +libvirt-daemon-driver-interface +libvirt-daemon-driver-network +libvirt-daemon-driver-nodedev +libvirt-daemon-driver-nwfilter +libvirt-daemon-driver-qemu +libvirt-daemon-driver-secret +libvirt-daemon-driver-storage +libvirt-daemon-driver-storage-core +libvirt-daemon-driver-storage-disk +libvirt-daemon-driver-storage-gluster +libvirt-daemon-driver-storage-iscsi +libvirt-daemon-driver-storage-logical +libvirt-daemon-driver-storage-mpath +libvirt-daemon-driver-storage-rbd +libvirt-daemon-driver-storage-scsi +libvirt-daemon-driver-storage-sheepdog +libvirt-daemon-driver-storage-zfs +libvirt-daemon-kvm +libvirt-gconfig +libvirt-glib +libvirt-gobject +libvirt-libs +libvisio +libvisual +libvorbis +libvpx +libwacom +libwacom-data +libwayland-client +libwayland-cursor +libwayland-server +libwbclient +libwebp +libwnck3 +libwpd +libwpg +libwps +libwsman1 +libwvstreams +libX11 +libX11-common +libX11-xcb +libXau +libxcb +libXcomposite +libXcursor +libXdamage +libXdmcp +libXext +libXfixes +libXfont +libXfont2 +libXft +libXi +libXinerama +libxkbcommon +libxkbcommon-x11 +libxkbfile +libxklavier +libxml2 +libXmu +libXpm +libXrandr +libXrender +libXres +libxshmfence +libxslt +libXt +libXtst +libXv +libXvMC +libXxf86dga +libXxf86misc +libXxf86vm +libzapojit +libzhuyin +libzmf +linux-atm-libs +linux-firmware +lksctp-tools +lldpad +llvm-libs +Lmod +lockdev +logrotate +lohit-assamese-fonts +lohit-bengali-fonts +lohit-devanagari-fonts +lohit-gujarati-fonts +lohit-gurmukhi-fonts +lohit-kannada-fonts +lohit-odia-fonts +lohit-tamil-fonts +lohit-telugu-fonts +lpsolve +lrzsz +lsof +lttng-ust +lua +lua-expat +lua-filesystem +lua-json +lua-libs +lua-lpeg +lua-posix +lua-socket +lua-term +lvm2 +lvm2-libs +lxpolkit +lz4 +lz4-libs +lzo +lzop +m17n-db +m17n-lib +mactel-boot +mailcap +make +man-db +man-pages +marisa +mcelog +mcpp +mdadm +media-player-info +memtest86+ +mesa-dri-drivers +mesa-filesystem +mesa-libEGL +mesa-libgbm +mesa-libGL +mesa-libglapi +mesa-libwayland-egl +mesa-libxatracker +microcode_ctl +mlocate +mobile-broadband-provider-info +mod_dnssd +ModemManager +ModemManager-glib +mod_http2 +mokutil +mousetweaks +mozilla-filesystem +mozjs17 +mozjs38 +mozjs52 +mpage +mpfr +mpg123-libs +mtdev +mtools +mtr +mutter +mythes +mythes-en +nautilus +nautilus-extensions +nautilus-sendto +naver-nanum-fonts-common +naver-nanum-gothic-fonts +ncurses +ncurses-base +ncurses-libs +neon +netcf-libs +net-snmp-libs +nettle +net-tools +NetworkManager +NetworkManager-adsl +NetworkManager-bluetooth +NetworkManager-config-connectivity-fedora +NetworkManager-glib +NetworkManager-libnm +NetworkManager-openconnect +NetworkManager-openconnect-gnome +NetworkManager-openvpn +NetworkManager-openvpn-gnome +NetworkManager-pptp +NetworkManager-pptp-gnome +NetworkManager-ssh +NetworkManager-ssh-gnome +NetworkManager-team +NetworkManager-vpnc +NetworkManager-vpnc-gnome +NetworkManager-wifi +NetworkManager-wwan +newt +nfs-utils +nmap-ncat +nm-connection-editor +npth +nspr +nss +nss-mdns +nss-pem +nss-softokn +nss-softokn-freebl +nss-sysinit +nss-tools +nss-util +ntfs-3g +ntfsprogs +numactl-libs +numad +opencc +openCOLLADA +openconnect +openjpeg2 +openldap +openssh +openssh-clients +openssh-server +openssl +openssl-libs +open-vm-tools +open-vm-tools-desktop +openvpn +opus +orc +orca +osinfo-db +osinfo-db-tools +os-prober +ostree +ostree-libs +p11-kit +p11-kit-trust +PackageKit +PackageKit-command-not-found +PackageKit-glib +PackageKit-gstreamer-plugin +PackageKit-gtk3-module +pakchois +paktype-naskh-basic-fonts +pam +pam_krb5 +pango +pangomm +paps +paps-libs +paratype-pt-sans-fonts +parted +passwd +passwdqc +passwdqc-lib +pciutils +pciutils-libs +pcre +pcre2 +pcre2-utf16 +pcsc-lite-libs +perl-Carp +perl-constant +perl-Data-Dumper +perl-Encode +perl-Errno +perl-Error +perl-Exporter +perl-File-Path +perl-File-Temp +perl-Getopt-Long +perl-Git +perl-HTTP-Tiny +perl-interpreter +perl-IO +perl-IO-Socket-IP +perl-IO-Socket-SSL +perl-libnet +perl-libs +perl-macros +perl-MIME-Base64 +perl-Mozilla-CA +perl-Net-SSLeay +perl-parent +perl-PathTools +perl-Pod-Escapes +perl-podlators +perl-Pod-Perldoc +perl-Pod-Simple +perl-Pod-Usage +perl-Scalar-List-Utils +perl-Socket +perl-Storable +perl-Term-ANSIColor +perl-Term-Cap +perl-TermReadKey +perl-Text-ParseWords +perl-Text-Tabs+Wrap +perl-threads +perl-threads-shared +perl-Time-Local +perl-Unicode-Normalize +perl-URI +pigz +pinentry +pinentry-gnome3 +pinentry-gtk +pinfo +pipewire +pipewire-libs +pixman +pkcs11-helper +pkgconf +pkgconf-m4 +pkgconf-pkg-config +plymouth +plymouth-core-libs +plymouth-graphics-libs +plymouth-plugin-label +plymouth-plugin-two-step +plymouth-scripts +plymouth-system-theme +plymouth-theme-charge +policycoreutils +policycoreutils-python3 +policycoreutils-python-utils +polkit +polkit-libs +polkit-pkla-compat +poppler +poppler-data +poppler-glib +poppler-utils +popt +ppp +pptp +procps-ng +psacct +psmisc +publicsuffix-list-dafsa +pulseaudio +pulseaudio-gdm-hooks +pulseaudio-libs +pulseaudio-libs-glib2 +pulseaudio-module-bluetooth +pulseaudio-module-x11 +pulseaudio-utils +python2 +python2-libs +python2-pip +python2-setuptools +python2-talloc +python3 +python3-abrt +python3-abrt-addon +python3-asn1crypto +python3-augeas +python3-beaker +python3-bind +python3-blivet +python3-blockdev +python3-brlapi +python3-bytesize +python3-cairo +python3-caribou +python3-cffi +python3-chardet +python3-coverage +python3-cryptography +python3-cups +python3-dbus +python3-decorator +python3-dmidecode +python3-dnf +python3-dnf-plugins-core +python3-enchant +python3-firewall +python3-gobject +python3-gobject-base +python3-gpg +python3-hawkey +python3-humanize +python3-idna +python3-iniparse +python3-inotify +python3-IPy +python3-iscsi-initiator-utils +python3-kickstart +python3-libcomps +python3-librepo +python3-libs +python3-libxml2 +python3-louis +python3-mako +python3-markupsafe +python3-meh +python3-meh-gui +python3-ntplib +python3-olefile +python3-ordered-set +python3-pid +python3-pillow +python3-pip +python3-ply +python3-pwquality +python3-pyatspi +python3-pycparser +python3-pycurl +python3-pydbus +python3-pyOpenSSL +python3-pyparted +python3-pysocks +python3-pytz +python3-pyudev +python3-pyxdg +python3-requests +python3-requests-file +python3-requests-ftp +python3-rpm +python3-setuptools +python3-simpleline +python3-six +python3-slip +python3-slip-dbus +python3-speechd +python3-sssdconfig +python3-systemd +python3-urllib3 +python3-wrapt +python-systemd-doc +qemu-block-curl +qemu-block-dmg +qemu-block-gluster +qemu-block-iscsi +qemu-block-nfs +qemu-block-rbd +qemu-block-ssh +qemu-common +qemu-guest-agent +qemu-img +qemu-kvm +qemu-system-x86 +qemu-system-x86-core +qgnomeplatform +qpdf-libs +qrencode-libs +qt +qt5-qtbase +qt5-qtbase-common +qt5-qtbase-gui +qt5-qtdeclarative +qt5-qtxmlpatterns +qt-common +qt-settings +qt-x11 +quota +quota-nls +radvd +raptor2 +rasqal +rdist +rdma-core +readline +realmd +redhat-menus +redland +rest +rhythmbox +rng-tools +rootfiles +rpcbind +rpm +rpm-build-libs +rpm-libs +rpm-plugin-selinux +rpm-plugin-systemd-inhibit +rp-pppoe +rsync +rtkit +rygel +samba-client +samba-client-libs +samba-common +samba-common-libs +samba-dc-libs +samba-libs +sane-backends +sane-backends-drivers-cameras +sane-backends-drivers-scanners +sane-backends-libs +satyr +sbc +scl-utils +SDL2 +seabios-bin +seavgabios-bin +sed +selinux-policy +selinux-policy-targeted +setools-python3 +setroubleshoot +setroubleshoot-plugins +setroubleshoot-server +setup +setuptool +sg3_utils-libs +sgabios-bin +sgpio +shadow-utils +shared-mime-info +sheepdog +shim-ia32 +shim-x64 +shotwell +sil-abyssinica-fonts +sil-mingzat-fonts +sil-nuosu-fonts +sil-padauk-fonts +simple-scan +skkdic +slang +smc-fonts-common +smc-meera-fonts +snappy +sni-qt +sos +sound-theme-freedesktop +soundtouch +soxr +speech-dispatcher +speech-dispatcher-espeak +speex +speexdsp +spice-glib +spice-gtk3 +spice-server +spice-vdagent +sqlite-libs +sshpass +sssd +sssd-ad +sssd-client +sssd-common +sssd-common-pac +sssd-ipa +sssd-kcm +sssd-krb5 +sssd-krb5-common +sssd-ldap +sssd-nfs-idmap +sssd-proxy +startup-notification +stix-fonts +stoken-libs +sudo +sushi +switcheroo-control +symlinks +syslinux +syslinux-extlinux +syslinux-extlinux-nonlinux +syslinux-nonlinux +system-config-printer-libs +system-config-printer-udev +systemd +systemd-bootchart +systemd-container +systemd-libs +systemd-pam +systemd-udev +tabish-eeyek-fonts +taglib +tar +tcl +tcpdump +tcp_wrappers +tcp_wrappers-libs +teamd +telepathy-filesystem +telepathy-glib +telepathy-logger +telnet +thai-scalable-fonts-common +thai-scalable-waree-fonts +tigervnc-license +tigervnc-server-minimal +time +timedatex +totem +totem-nautilus +totem-pl-parser +traceroute +tracker +tracker-miners +tree +trousers +trousers-lib +tzdata +tzdata-java +udisks2 +unicode-ucd +unique +unoconv +unzip +upower +urw-fonts +usb_modeswitch +usb_modeswitch-data +usbmuxd +usbredir +usbutils +usermode +userspace-rcu +util-linux +vconfig +vim-minimal +vino +virglrenderer +vlgothic-fonts +volume_key-libs +vpnc +vpnc-script +vte291 +vte-profile +wavpack +web-assets-filesystem +webkitgtk4 +webkitgtk4-jsc +webkitgtk4-plugin-process-gtk2 +webrtc-audio-processing +wget +which +wireless-tools +words +wpa_supplicant +wvdial +xcb-util +xcb-util-image +xcb-util-keysyms +xcb-util-renderutil +xcb-util-wm +xdg-desktop-portal +xdg-desktop-portal-gtk +xdg-user-dirs +xdg-user-dirs-gtk +xdg-utils +xen-libs +xen-licenses +xfsprogs +xkeyboard-config +xml-common +xmlrpc-c +xmlrpc-c-client +xmlsec1 +xmlsec1-openssl +xorg-x11-drv-ati +xorg-x11-drv-evdev +xorg-x11-drv-fbdev +xorg-x11-drv-intel +xorg-x11-drv-libinput +xorg-x11-drv-nouveau +xorg-x11-drv-openchrome +xorg-x11-drv-qxl +xorg-x11-drv-vesa +xorg-x11-drv-vmware +xorg-x11-drv-wacom +xorg-x11-font-utils +xorg-x11-server-common +xorg-x11-server-utils +xorg-x11-server-Xorg +xorg-x11-server-Xwayland +xorg-x11-utils +xorg-x11-xauth +xorg-x11-xinit +xorg-x11-xkb-utils +xz +xz-libs +yajl +yelp +yelp-libs +yelp-xsl +zd1211-firmware +zenity +zfs-fuse +zip +zlib diff --git a/f26-flatpak-runtime.packages b/f26-flatpak-runtime.packages deleted file mode 100644 index 538ff24..0000000 --- a/f26-flatpak-runtime.packages +++ /dev/null @@ -1,204 +0,0 @@ -abattis-cantarell-fonts -acl -adwaita-cursor-theme -adwaita-gtk2-theme -adwaita-icon-theme -at-spi2-atk -at-spi2-core -atk -audit-libs -avahi-libs -basesystem -bash -bzip2-libs -ca-certificates -cairo -cairo-gobject -chkconfig -colord-libs -coreutils -coreutils-common -cracklib -crypto-policies -cryptsetup-libs -cups-libs -dbus -dbus-libs -device-mapper -device-mapper-libs -elfutils-default-yama-scope -elfutils-libelf -elfutils-libs -emacs-filesystem -enchant -expat -fedora-modular-release -fedora-modular-repos -filesystem -flatpak-runtime-config -fontconfig -fontpackages-filesystem -freetype -gawk -gdbm -gdk-pixbuf2 -gdk-pixbuf2-modules -glib-networking -glib2 -glibc -glibc-all-langpacks -glibc-common -gmp -gnome-desktop3 -gnome-themes-standard -gnutls -gobject-introspection -graphite2 -grep -gsettings-desktop-schemas -gtk-update-icon-cache -gtk2 -gtk3 -gvfs-client -gzip -harfbuzz -hicolor-icon-theme -hunspell -hunspell-en-GB -hunspell-en-US -hwdata -info -iptables-libs -jasper-libs -jbigkit-libs -json-glib -keyutils-libs -kmod-libs -krb5-libs -lcms2 -libX11 -libX11-common -libXau -libXcomposite -libXcursor -libXdamage -libXext -libXfixes -libXft -libXi -libXinerama -libXrandr -libXrender -libXtst -libXxf86vm -libacl -libappstream-glib -libarchive -libattr -libblkid -libcap -libcap-ng -libcom_err -libcroco -libcrypt -libdatrie -libdb -libdrm -libepoxy -libfdisk -libffi -libgcab1 -libgcc -libgcrypt -libglvnd -libglvnd-egl -libglvnd-glx -libgpg-error -libgusb -libidn -libidn2 -libjpeg-turbo -libmodman -libmount -libnotify -libpcap -libpciaccess -libpng -libproxy -libpwquality -librsvg2 -libseccomp -libselinux -libsemanage -libsepol -libsigsegv -libsmartcols -libsoup -libstdc++ -libstemmer -libtasn1 -libthai -libtiff -libunistring -libusbx -libutempter -libuuid -libverto -libwayland-client -libwayland-cursor -libwayland-server -libxcb -libxkbcommon -libxml2 -libxshmfence -lz4-libs -lzo -mesa-libEGL -mesa-libGL -mesa-libgbm -mesa-libglapi -mesa-libwayland-egl -mpfr -ncurses -ncurses-base -ncurses-libs -nettle -openssl-libs -p11-kit -p11-kit-trust -pam -pango -pcre -pixman -popt -python3 -python3-appdirs -python3-cairo -python3-gobject -python3-gobject-base -python3-libs -python3-packaging -python3-pip -python3-pyparsing -python3-setuptools -python3-six -qrencode-libs -readline -rest -sed -setup -shadow-utils -shared-mime-info -sqlite-libs -system-python -system-python-libs -systemd -systemd-libs -systemd-pam -tzdata -ustr -util-linux -xkeyboard-config -xz-libs -zenity -zlib diff --git a/f27-live.packages b/f27-live.packages deleted file mode 100644 index 0d2f5ef..0000000 --- a/f27-live.packages +++ /dev/null @@ -1,1561 +0,0 @@ -aajohan-comfortaa-fonts -abattis-cantarell-fonts -abrt -abrt-addon-ccpp -abrt-addon-coredump-helper -abrt-addon-kerneloops -abrt-addon-pstoreoops -abrt-addon-vmcore -abrt-addon-xorg -abrt-cli -abrt-dbus -abrt-desktop -abrt-gui -abrt-gui-libs -abrt-java-connector -abrt-libs -abrt-plugin-bodhi -abrt-retrace-client -abrt-tui -accountsservice -accountsservice-libs -acl -adcli -adobe-source-han-sans-cn-fonts -adobe-source-han-sans-tw-fonts -adobe-source-han-serif-cn-fonts -adobe-source-han-serif-tw-fonts -adwaita-cursor-theme -adwaita-gtk2-theme -adwaita-icon-theme -adwaita-qt4 -adwaita-qt5 -alsa-lib -alsa-plugins-pulseaudio -alsa-ucm -alsa-utils -anaconda -anaconda-core -anaconda-gui -anaconda-tui -anaconda-user-help -anaconda-widgets -appstream-data -apr -apr-util -argyllcms -atk -atkmm -atmel-firmware -at-spi2-atk -at-spi2-core -attr -audit -audit-libs -audit-libs-python3 -augeas-libs -authconfig -autocorr-en -avahi -avahi-glib -avahi-libs -b43-fwcutter -b43-openfwwf -baobab -basesystem -bash -bash-completion -bc -bcache-tools -bind99-libs -bind99-license -bind-libs -bind-libs-lite -bind-license -bind-utils -blivet-gui-runtime -bluez -bluez-cups -bluez-libs -bluez-obexd -boost-date-time -boost-filesystem -boost-iostreams -boost-system -brasero-libs -bridge-utils -brlapi -brltty -btrfs-progs -bubblewrap -bzip2 -bzip2-libs -ca-certificates -cairo -cairo-gobject -cairomm -c-ares -caribou -caribou-gtk2-module -caribou-gtk3-module -cdparanoia-libs -celt051 -checkpolicy -cheese -cheese-libs -chkconfig -chrony -cifs-utils -cldr-emoji-annotation -clucene-contribs-lib -clucene-core -clutter -clutter-gst2 -clutter-gst3 -clutter-gtk -cogl -colord -colord-gtk -colord-libs -color-filesystem -compat-openssl10 -comps-extras -control-center -control-center-filesystem -copy-jdk-configs -coreutils -coreutils-common -corosync -corosynclib -cpio -cracklib -cracklib-dicts -crda -createrepo_c -createrepo_c-libs -cronie -cronie-anacron -crontabs -crypto-policies -cryptsetup -cryptsetup-libs -cups -cups-client -cups-filesystem -cups-filters -cups-filters-libs -cups-libs -cups-pk-helper -curl -cyrus-sasl -cyrus-sasl-gssapi -cyrus-sasl-lib -cyrus-sasl-plain -dbus -dbus-glib -dbus-libs -dbusmenu-qt -dbus-x11 -dbxtool -dconf -dejavu-fonts-common -dejavu-sans-fonts -dejavu-sans-mono-fonts -dejavu-serif-fonts -deltarpm -desktop-backgrounds-gnome -desktop-file-utils -device-mapper -device-mapper-event -device-mapper-event-libs -device-mapper-libs -device-mapper-multipath -device-mapper-multipath-libs -device-mapper-persistent-data -dhcp-client -dhcp-common -dhcp-libs -diffutils -djvulibre-libs -dleyna-connector-dbus -dleyna-core -dleyna-server -dmidecode -dmraid -dmraid-events -dnf -dnf-conf -dnf-plugins-core -dnf-yum -dnsmasq -dos2unix -dosfstools -dotconf -dracut -dracut-config-rescue -dracut-live -dracut-network -drpm -e2fsprogs -e2fsprogs-libs -ebtables -edk2-ovmf -efibootmgr -efivar -efivar-libs -elfutils -elfutils-default-yama-scope -elfutils-libelf -elfutils-libs -emacs-filesystem -enca -enchant -eog -epiphany-runtime -espeak -ethtool -evince -evince-djvu -evince-libs -evince-nautilus -evolution -evolution-data-server -evolution-data-server-langpacks -evolution-ews -evolution-ews-langpacks -evolution-help -evolution-langpacks -exempi -exiv2 -exiv2-libs -expat -f27-backgrounds-base -f27-backgrounds-gnome -fcoe-utils -fedora-bookmarks -fedora-logos -fedora-logos-httpd -fedora-productimg-workstation -fedora-release -fedora-release-workstation -fedora-repos -fedora-repos-rawhide -fedora-user-agent-chrome -fedora-workstation-backgrounds -file -file-libs -file-roller -file-roller-nautilus -filesystem -findutils -fipscheck -fipscheck-lib -firefox -firewalld -firewalld-filesystem -flac-libs -flatpak -flatpak-libs -folks -fontconfig -fontpackages-filesystem -foomatic -foomatic-db -foomatic-db-filesystem -foomatic-db-ppds -fpaste -fprintd -fprintd-pam -freetype -frei0r-plugins -fros -fros-gnome -fuse -fuse-common -fuse-libs -fwupd -fwupdate-efi -fwupdate-libs -fwupd-labels -gavl -gawk -gc -GConf2 -gcr -gd -gdb-headless -gdbm -gdisk -gdk-pixbuf2 -gdk-pixbuf2-modules -gdm -gdouros-symbola-fonts -gedit -genisoimage -geoclue2 -geoclue2-libs -geocode-glib -GeoIP -GeoIP-GeoLite-data -gettext -gettext-libs -gfbgraph -ghostscript -ghostscript-core -ghostscript-fonts -ghostscript-x11 -giflib -git -git-core -git-core-doc -gjs -glade-libs -glib2 -glibc -glibc-all-langpacks -glibc-common -glibc-langpack-en -glibmm24 -glib-networking -glusterfs -glusterfs-api -glusterfs-cli -glusterfs-client-xlators -glusterfs-fuse -glusterfs-libs -glx-utils -gmime30 -gmp -gnome-abrt -gnome-autoar -gnome-backgrounds -gnome-bluetooth -gnome-bluetooth-libs -gnome-boxes -gnome-calculator -gnome-calendar -gnome-characters -gnome-classic-session -gnome-clocks -gnome-color-manager -gnome-contacts -gnome-desktop3 -gnome-disk-utility -gnome-documents -gnome-documents-libs -gnome-font-viewer -gnome-getting-started-docs -gnome-initial-setup -gnome-keyring -gnome-keyring-pam -gnome-logs -gnome-maps -gnome-menus -gnome-online-accounts -gnome-online-miners -gnome-screenshot -gnome-session -gnome-session-wayland-session -gnome-session-xsession -gnome-settings-daemon -gnome-shell -gnome-shell-extension-alternate-tab -gnome-shell-extension-apps-menu -gnome-shell-extension-background-logo -gnome-shell-extension-common -gnome-shell-extension-launch-new-instance -gnome-shell-extension-places-menu -gnome-shell-extension-window-list -gnome-software -gnome-system-monitor -gnome-terminal -gnome-terminal-nautilus -gnome-themes-standard -gnome-todo -gnome-user-docs -gnome-user-share -gnome-video-effects -gnome-weather -gnu-free-fonts-common -gnu-free-mono-fonts -gnu-free-sans-fonts -gnu-free-serif-fonts -gnupg -gnupg2 -gnupg2-smime -gnutls -gobject-introspection -gom -google-android-emoji-fonts -google-crosextra-caladea-fonts -google-crosextra-carlito-fonts -google-noto-emoji-fonts -google-noto-fonts-common -google-noto-sans-lisu-fonts -google-noto-sans-mandaic-fonts -google-noto-sans-meetei-mayek-fonts -google-noto-sans-sinhala-fonts -google-noto-sans-tagalog-fonts -google-noto-sans-tai-tham-fonts -google-noto-sans-tai-viet-fonts -gperftools-libs -gpgme -gpgmepp -gpg-pubkey -graphite2 -grep -grilo -grilo-plugins -groff-base -grub2-common -grub2-efi-ia32 -grub2-efi-ia32-cdboot -grub2-efi-x64 -grub2-efi-x64-cdboot -grub2-pc -grub2-pc-modules -grub2-tools -grub2-tools-efi -grub2-tools-extra -grub2-tools-minimal -grubby -gsettings-desktop-schemas -gsm -gsound -gspell -gssdp -gssproxy -gstreamer1 -gstreamer1-plugins-bad-free -gstreamer1-plugins-bad-free-gtk -gstreamer1-plugins-base -gstreamer1-plugins-good -gstreamer1-plugins-ugly-free -gtk2 -gtk3 -gtkmm24 -gtkmm30 -gtksourceview3 -gtkspell3 -gtk-update-icon-cache -gtk-vnc2 -guile -gupnp -gupnp-av -gupnp-dlna -gutenprint -gutenprint-cups -gutenprint-libs -gvfs -gvfs-afc -gvfs-afp -gvfs-archive -gvfs-client -gvfs-fuse -gvfs-goa -gvfs-gphoto2 -gvfs-mtp -gvfs-smb -gvnc -gzip -hardlink -harfbuzz -harfbuzz-icu -hfsplus-tools -hicolor-icon-theme -highlight -hostname -hplip -hplip-common -hplip-libs -httpd -httpd-filesystem -httpd-tools -http-parser -hunspell -hunspell-en -hunspell-en-GB -hunspell-en-US -hwdata -hyperv-daemons -hyperv-daemons-license -hypervfcopyd -hypervkvpd -hypervvssd -hyphen -hyphen-en -ibus -ibus-gtk2 -ibus-gtk3 -ibus-hangul -ibus-kkc -ibus-libpinyin -ibus-libs -ibus-libzhuyin -ibus-m17n -ibus-qt -ibus-rawcode -ibus-setup -ibus-typing-booster -ibus-wayland -iio-sensor-proxy -info -initscripts -ipcalc -iproute -iproute-tc -ipset -ipset-libs -iptables -iptables-libs -iptstate -iputils -ipw2100-firmware -ipw2200-firmware -ipxe-roms-qemu -iscsi-initiator-utils -iscsi-initiator-utils-iscsiuio -isns-utils-libs -iso-codes -isomd5sum -iw -iwl1000-firmware -iwl100-firmware -iwl105-firmware -iwl135-firmware -iwl2000-firmware -iwl2030-firmware -iwl3160-firmware -iwl3945-firmware -iwl4965-firmware -iwl5000-firmware -iwl5150-firmware -iwl6000-firmware -iwl6000g2a-firmware -iwl6000g2b-firmware -iwl6050-firmware -iwl7260-firmware -jansson -jasper-libs -java-1.8.0-openjdk-headless -javapackages-tools -jbigkit-libs -jimtcl -jomolhari-fonts -js-jquery -json-c -json-glib -julietaula-montserrat-fonts -jwhois -kbd -kbd-legacy -kbd-misc -kernel -kernel-core -kernel-modules -kernel-modules-extra -kexec-tools -kexec-tools-anaconda-addon -keybinder3 -keyutils -keyutils-libs -khmeros-base-fonts -khmeros-fonts-common -kmod -kmod-libs -kpartx -krb5-libs -kyotocabinet-libs -lame-libs -langpacks-en -langtable -langtable-data -langtable-python3 -lcms2 -less -liba52 -libabw -libacl -libaio -libao -libappstream-glib -libarchive -libassuan -libasyncns -libatasmart -libatomic_ops -libattr -libavc1394 -libbabeltrace -libbasicobjects -libblkid -libblockdev -libblockdev-btrfs -libblockdev-crypto -libblockdev-dm -libblockdev-fs -libblockdev-kbd -libblockdev-loop -libblockdev-lvm -libblockdev-mdraid -libblockdev-mpath -libblockdev-part -libblockdev-plugins-all -libblockdev-swap -libblockdev-utils -libbluray -libbytesize -libcacard -libcanberra -libcanberra-gtk2 -libcanberra-gtk3 -libcap -libcap-ng -libcdio -libcdio-paranoia -libcdr -libcgroup -libchamplain -libchamplain-gtk -libcmis -libcollection -libcom_err -libcomps -libconfig -libcroco -libcrypt-nss -libcryptui -libcue -libcurl -libdaemon -libdatrie -libdb -libdb-utils -libdfu -libdhash -libdmapsharing -libdmx -libdnet -libdnf -libdrm -libdv -libdvdnav -libdvdread -libe-book -libedit -libeot -libepoxy -liberation-fonts-common -liberation-mono-fonts -liberation-sans-fonts -liberation-serif-fonts -libertas-usb8388-firmware -libetonyek -libev -libevdev -libevent -libexif -libexttextcat -libfdisk -libfdt -libffi -libfontenc -libfprint -libfreehand -libgcab1 -libgcc -libgcrypt -libgdata -libgdither -libgee -libgepub -libgexiv2 -libgltf -libglvnd -libglvnd-egl -libglvnd-gles -libglvnd-glx -libgnomekbd -libgnome-keyring -libgomp -libgovirt -libgpg-error -libgphoto2 -libgpod -libgrss -libgsf -libgtop2 -libgudev -libgusb -libgweather -libgxps -libhangul -libibverbs -libical -libICE -libicu -libidn -libidn2 -libiec61883 -libieee1284 -libimagequant -libimobiledevice -libini_config -libinput -libipa_hbac -libipt -libiptcdata -libiscsi -libjpeg-turbo -libkadm5 -libkkc -libkkc-common -libkkc-data -libksba -liblangtag -liblangtag-data -libldb -liblouis -libmbim -libmbim-utils -libmcpp -libmediaart -libmetalink -libmng -libmnl -libmodman -libmount -libmpc -libmpcdec -libmspack -libmspub -libmtp -libmusicbrainz5 -libmwaw -libmx -libndp -libnetfilter_conntrack -libnfnetlink -libnfs -libnfsidmap -libnghttp2 -libnl3 -libnl3-cli -libnma -libnm-gtk -libnotify -liboauth -libodfgen -libogg -liborcus -libosinfo -libpagemaker -libpath_utils -libpcap -libpciaccess -libpeas -libpeas-gtk -libpeas-loader-python3 -libphodav -libpinyin -libpinyin-data -libpipeline -libpkgconf -libplist -libpng -libproxy -libproxy-mozjs -libpskc -libpsl -libpwquality -libqb -libqmi -libqmi-utils -libquvi -libquvi-scripts -librados2 -LibRaw -libraw1394 -librbd1 -librdmacm -libref_array -libreoffice-calc -libreoffice-core -libreoffice-data -libreoffice-draw -libreoffice-emailmerge -libreoffice-filters -libreoffice-graphicfilter -libreoffice-gtk2 -libreoffice-gtk3 -libreoffice-help-en -libreoffice-impress -libreofficekit -libreoffice-langpack-en -libreoffice-math -libreoffice-opensymbol-fonts -libreoffice-pdfimport -libreoffice-pyuno -libreoffice-ure -libreoffice-ure-common -libreoffice-writer -libreoffice-x11 -libreoffice-xsltfilter -librepo -libreport -libreport-anaconda -libreport-cli -libreport-fedora -libreport-filesystem -libreport-gtk -libreport-plugin-bugzilla -libreport-plugin-kerneloops -libreport-plugin-logger -libreport-plugin-reportuploader -libreport-plugin-systemd-journal -libreport-plugin-ureport -libreport-python3 -libreport-web -librevenge -librsvg2 -libsamplerate -libsane-hpaio -libseccomp -libsecret -libselinux -libselinux-python3 -libselinux-utils -libsemanage -libsemanage-python3 -libsepol -libshout -libsigc++20 -libsigsegv -libSM -libsmartcols -libsmbclient -libsmbios -libsndfile -libsolv -libsoup -libspectre -libsrtp -libss -libssh -libssh2 -libsss_autofs -libsss_certmap -libsss_idmap -libsss_nss_idmap -libsss_sudo -libstaroffice -libstdc++ -libstemmer -libsysfs -libtalloc -libtar -libtasn1 -libtdb -libteam -libtevent -libthai -libtheora -libtiff -libtimezonemap -libtirpc -libtool-ltdl -libudisks2 -libunistring -libunwind -libusal -libusb -libusbmuxd -libusbx -libuser -libutempter -libuuid -libv4l -libvdpau -libverto -libverto-libev -libvirt-daemon -libvirt-daemon-config-network -libvirt-daemon-driver-interface -libvirt-daemon-driver-network -libvirt-daemon-driver-nodedev -libvirt-daemon-driver-nwfilter -libvirt-daemon-driver-qemu -libvirt-daemon-driver-secret -libvirt-daemon-driver-storage -libvirt-daemon-driver-storage-core -libvirt-daemon-driver-storage-disk -libvirt-daemon-driver-storage-gluster -libvirt-daemon-driver-storage-iscsi -libvirt-daemon-driver-storage-logical -libvirt-daemon-driver-storage-mpath -libvirt-daemon-driver-storage-rbd -libvirt-daemon-driver-storage-scsi -libvirt-daemon-driver-storage-sheepdog -libvirt-daemon-driver-storage-zfs -libvirt-daemon-kvm -libvirt-gconfig -libvirt-glib -libvirt-gobject -libvirt-libs -libvisio -libvisual -libvorbis -libvpx -libwacom -libwacom-data -libwayland-client -libwayland-cursor -libwayland-server -libwbclient -libwebp -libwnck3 -libwpd -libwpg -libwps -libwsman1 -libwvstreams -libX11 -libX11-common -libX11-xcb -libXau -libxcb -libXcomposite -libXcursor -libXdamage -libXdmcp -libXext -libXfixes -libXfont -libXfont2 -libXft -libXi -libXinerama -libxkbcommon -libxkbcommon-x11 -libxkbfile -libxklavier -libxml2 -libXmu -libXpm -libXrandr -libXrender -libXres -libxshmfence -libxslt -libXt -libXtst -libXv -libXvMC -libXxf86dga -libXxf86misc -libXxf86vm -libzapojit -libzhuyin -libzmf -linux-atm-libs -linux-firmware -lksctp-tools -lldpad -llvm-libs -Lmod -lockdev -logrotate -lohit-assamese-fonts -lohit-bengali-fonts -lohit-devanagari-fonts -lohit-gujarati-fonts -lohit-gurmukhi-fonts -lohit-kannada-fonts -lohit-odia-fonts -lohit-tamil-fonts -lohit-telugu-fonts -lpsolve -lrzsz -lsof -lttng-ust -lua -lua-expat -lua-filesystem -lua-json -lua-libs -lua-lpeg -lua-posix -lua-socket -lua-term -lvm2 -lvm2-libs -lxpolkit -lz4 -lz4-libs -lzo -lzop -m17n-db -m17n-lib -mactel-boot -mailcap -make -man-db -man-pages -marisa -mcelog -mcpp -mdadm -media-player-info -memtest86+ -mesa-dri-drivers -mesa-filesystem -mesa-libEGL -mesa-libgbm -mesa-libGL -mesa-libglapi -mesa-libwayland-egl -mesa-libxatracker -microcode_ctl -mlocate -mobile-broadband-provider-info -mod_dnssd -ModemManager -ModemManager-glib -mod_http2 -mokutil -mousetweaks -mozilla-filesystem -mozjs17 -mozjs38 -mozjs52 -mpage -mpfr -mpg123-libs -mtdev -mtools -mtr -mutter -mythes -mythes-en -nautilus -nautilus-extensions -nautilus-sendto -naver-nanum-fonts-common -naver-nanum-gothic-fonts -ncurses -ncurses-base -ncurses-libs -neon -netcf-libs -net-snmp-libs -nettle -net-tools -NetworkManager -NetworkManager-adsl -NetworkManager-bluetooth -NetworkManager-config-connectivity-fedora -NetworkManager-glib -NetworkManager-libnm -NetworkManager-openconnect -NetworkManager-openconnect-gnome -NetworkManager-openvpn -NetworkManager-openvpn-gnome -NetworkManager-pptp -NetworkManager-pptp-gnome -NetworkManager-ssh -NetworkManager-ssh-gnome -NetworkManager-team -NetworkManager-vpnc -NetworkManager-vpnc-gnome -NetworkManager-wifi -NetworkManager-wwan -newt -nfs-utils -nmap-ncat -nm-connection-editor -npth -nspr -nss -nss-mdns -nss-pem -nss-softokn -nss-softokn-freebl -nss-sysinit -nss-tools -nss-util -ntfs-3g -ntfsprogs -numactl-libs -numad -opencc -openCOLLADA -openconnect -openjpeg2 -openldap -openssh -openssh-clients -openssh-server -openssl -openssl-libs -open-vm-tools -open-vm-tools-desktop -openvpn -opus -orc -orca -osinfo-db -osinfo-db-tools -os-prober -ostree -ostree-libs -p11-kit -p11-kit-trust -PackageKit -PackageKit-command-not-found -PackageKit-glib -PackageKit-gstreamer-plugin -PackageKit-gtk3-module -pakchois -paktype-naskh-basic-fonts -pam -pam_krb5 -pango -pangomm -paps -paps-libs -paratype-pt-sans-fonts -parted -passwd -passwdqc -passwdqc-lib -pciutils -pciutils-libs -pcre -pcre2 -pcre2-utf16 -pcsc-lite-libs -perl-Carp -perl-constant -perl-Data-Dumper -perl-Encode -perl-Errno -perl-Error -perl-Exporter -perl-File-Path -perl-File-Temp -perl-Getopt-Long -perl-Git -perl-HTTP-Tiny -perl-interpreter -perl-IO -perl-IO-Socket-IP -perl-IO-Socket-SSL -perl-libnet -perl-libs -perl-macros -perl-MIME-Base64 -perl-Mozilla-CA -perl-Net-SSLeay -perl-parent -perl-PathTools -perl-Pod-Escapes -perl-podlators -perl-Pod-Perldoc -perl-Pod-Simple -perl-Pod-Usage -perl-Scalar-List-Utils -perl-Socket -perl-Storable -perl-Term-ANSIColor -perl-Term-Cap -perl-TermReadKey -perl-Text-ParseWords -perl-Text-Tabs+Wrap -perl-threads -perl-threads-shared -perl-Time-Local -perl-Unicode-Normalize -perl-URI -pigz -pinentry -pinentry-gnome3 -pinentry-gtk -pinfo -pipewire -pipewire-libs -pixman -pkcs11-helper -pkgconf -pkgconf-m4 -pkgconf-pkg-config -plymouth -plymouth-core-libs -plymouth-graphics-libs -plymouth-plugin-label -plymouth-plugin-two-step -plymouth-scripts -plymouth-system-theme -plymouth-theme-charge -policycoreutils -policycoreutils-python3 -policycoreutils-python-utils -polkit -polkit-libs -polkit-pkla-compat -poppler -poppler-data -poppler-glib -poppler-utils -popt -ppp -pptp -procps-ng -psacct -psmisc -publicsuffix-list-dafsa -pulseaudio -pulseaudio-gdm-hooks -pulseaudio-libs -pulseaudio-libs-glib2 -pulseaudio-module-bluetooth -pulseaudio-module-x11 -pulseaudio-utils -python2 -python2-libs -python2-pip -python2-setuptools -python2-talloc -python3 -python3-abrt -python3-abrt-addon -python3-asn1crypto -python3-augeas -python3-beaker -python3-bind -python3-blivet -python3-blockdev -python3-brlapi -python3-bytesize -python3-cairo -python3-caribou -python3-cffi -python3-chardet -python3-coverage -python3-cryptography -python3-cups -python3-dbus -python3-decorator -python3-dmidecode -python3-dnf -python3-dnf-plugins-core -python3-enchant -python3-firewall -python3-gobject -python3-gobject-base -python3-gpg -python3-hawkey -python3-humanize -python3-idna -python3-iniparse -python3-inotify -python3-IPy -python3-iscsi-initiator-utils -python3-kickstart -python3-libcomps -python3-librepo -python3-libs -python3-libxml2 -python3-louis -python3-mako -python3-markupsafe -python3-meh -python3-meh-gui -python3-ntplib -python3-olefile -python3-ordered-set -python3-pid -python3-pillow -python3-pip -python3-ply -python3-pwquality -python3-pyatspi -python3-pycparser -python3-pycurl -python3-pydbus -python3-pyOpenSSL -python3-pyparted -python3-pysocks -python3-pytz -python3-pyudev -python3-pyxdg -python3-requests -python3-requests-file -python3-requests-ftp -python3-rpm -python3-setuptools -python3-simpleline -python3-six -python3-slip -python3-slip-dbus -python3-speechd -python3-sssdconfig -python3-systemd -python3-urllib3 -python3-wrapt -python-systemd-doc -qemu-block-curl -qemu-block-dmg -qemu-block-gluster -qemu-block-iscsi -qemu-block-nfs -qemu-block-rbd -qemu-block-ssh -qemu-common -qemu-guest-agent -qemu-img -qemu-kvm -qemu-system-x86 -qemu-system-x86-core -qgnomeplatform -qpdf-libs -qrencode-libs -qt -qt5-qtbase -qt5-qtbase-common -qt5-qtbase-gui -qt5-qtdeclarative -qt5-qtxmlpatterns -qt-common -qt-settings -qt-x11 -quota -quota-nls -radvd -raptor2 -rasqal -rdist -rdma-core -readline -realmd -redhat-menus -redland -rest -rhythmbox -rng-tools -rootfiles -rpcbind -rpm -rpm-build-libs -rpm-libs -rpm-plugin-selinux -rpm-plugin-systemd-inhibit -rp-pppoe -rsync -rtkit -rygel -samba-client -samba-client-libs -samba-common -samba-common-libs -samba-dc-libs -samba-libs -sane-backends -sane-backends-drivers-cameras -sane-backends-drivers-scanners -sane-backends-libs -satyr -sbc -scl-utils -SDL2 -seabios-bin -seavgabios-bin -sed -selinux-policy -selinux-policy-targeted -setools-python3 -setroubleshoot -setroubleshoot-plugins -setroubleshoot-server -setup -setuptool -sg3_utils-libs -sgabios-bin -sgpio -shadow-utils -shared-mime-info -sheepdog -shim-ia32 -shim-x64 -shotwell -sil-abyssinica-fonts -sil-mingzat-fonts -sil-nuosu-fonts -sil-padauk-fonts -simple-scan -skkdic -slang -smc-fonts-common -smc-meera-fonts -snappy -sni-qt -sos -sound-theme-freedesktop -soundtouch -soxr -speech-dispatcher -speech-dispatcher-espeak -speex -speexdsp -spice-glib -spice-gtk3 -spice-server -spice-vdagent -sqlite-libs -sshpass -sssd -sssd-ad -sssd-client -sssd-common -sssd-common-pac -sssd-ipa -sssd-kcm -sssd-krb5 -sssd-krb5-common -sssd-ldap -sssd-nfs-idmap -sssd-proxy -startup-notification -stix-fonts -stoken-libs -sudo -sushi -switcheroo-control -symlinks -syslinux -syslinux-extlinux -syslinux-extlinux-nonlinux -syslinux-nonlinux -system-config-printer-libs -system-config-printer-udev -systemd -systemd-bootchart -systemd-container -systemd-libs -systemd-pam -systemd-udev -tabish-eeyek-fonts -taglib -tar -tcl -tcpdump -tcp_wrappers -tcp_wrappers-libs -teamd -telepathy-filesystem -telepathy-glib -telepathy-logger -telnet -thai-scalable-fonts-common -thai-scalable-waree-fonts -tigervnc-license -tigervnc-server-minimal -time -timedatex -totem -totem-nautilus -totem-pl-parser -traceroute -tracker -tracker-miners -tree -trousers -trousers-lib -tzdata -tzdata-java -udisks2 -unicode-ucd -unique -unoconv -unzip -upower -urw-fonts -usb_modeswitch -usb_modeswitch-data -usbmuxd -usbredir -usbutils -usermode -userspace-rcu -util-linux -vconfig -vim-minimal -vino -virglrenderer -vlgothic-fonts -volume_key-libs -vpnc -vpnc-script -vte291 -vte-profile -wavpack -web-assets-filesystem -webkitgtk4 -webkitgtk4-jsc -webkitgtk4-plugin-process-gtk2 -webrtc-audio-processing -wget -which -wireless-tools -words -wpa_supplicant -wvdial -xcb-util -xcb-util-image -xcb-util-keysyms -xcb-util-renderutil -xcb-util-wm -xdg-desktop-portal -xdg-desktop-portal-gtk -xdg-user-dirs -xdg-user-dirs-gtk -xdg-utils -xen-libs -xen-licenses -xfsprogs -xkeyboard-config -xml-common -xmlrpc-c -xmlrpc-c-client -xmlsec1 -xmlsec1-openssl -xorg-x11-drv-ati -xorg-x11-drv-evdev -xorg-x11-drv-fbdev -xorg-x11-drv-intel -xorg-x11-drv-libinput -xorg-x11-drv-nouveau -xorg-x11-drv-openchrome -xorg-x11-drv-qxl -xorg-x11-drv-vesa -xorg-x11-drv-vmware -xorg-x11-drv-wacom -xorg-x11-font-utils -xorg-x11-server-common -xorg-x11-server-utils -xorg-x11-server-Xorg -xorg-x11-server-Xwayland -xorg-x11-utils -xorg-x11-xauth -xorg-x11-xinit -xorg-x11-xkb-utils -xz -xz-libs -yajl -yelp -yelp-libs -yelp-xsl -zd1211-firmware -zenity -zfs-fuse -zip -zlib diff --git a/generate-files.sh b/generate-files.sh deleted file mode 100755 index 0219a61..0000000 --- a/generate-files.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -out=$1 -base=$(basename $out) - -case $base in - freedesktop-*) - ns=org.freedesktop - version=1.6 - ;; - gnome-*) - ns=org.gnome - version=3.26 - ;; - *) - echo 1>&2 "Can't identify runtime for $base" - exit 1 - ;; -esac - -case $base in - *-Platform.files) - sdk= - type=Platform - ;; - *-Sdk.files) - sdk=--sdk - type=Sdk - ;; - *) - echo 1>&2 "Can't identify type for $base" - exit 1 - ;; -esac - -runtime="$ns.$type/x86_64/$version" - -echo "$base: listing files in $runtime" - -flatpak run --file-forwarding --command=/usr/bin/python3 $runtime @@ list-files.py @@ $sdk > $out diff --git a/generate-modulemd.py b/generate-modulemd.py deleted file mode 100755 index b3bb4ef..0000000 --- a/generate-modulemd.py +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/python3 -import sys -from yaml_utils import ordered_load, ordered_dump - -with open('flatpak-runtime.in.yaml') as f: - modulemd = ordered_load(f) - -def set_profile(profile_name, list_file): - with open(list_file) as f: - packages = [l.strip() for l in f] - print("{}: {} packages".format(profile_name, len(packages)), file=sys.stderr) - modulemd['data']['profiles'][profile_name] = packages - -set_profile('runtime', 'out/runtime.profile') -set_profile('runtime-base', 'out/runtime-base.profile') -set_profile('sdk', 'out/sdk.profile') -set_profile('sdk-base', 'out/sdk-base.profile') - -with open('flatpak-runtime.yaml', 'w') as f: - ordered_dump(modulemd, stream=f, default_flow_style=False, encoding="utf-8") diff --git a/generate-report.py b/generate-report.py deleted file mode 100755 index c405d30..0000000 --- a/generate-report.py +++ /dev/null @@ -1,401 +0,0 @@ -#!/usr/bin/python3 - -from jinja2 import Environment, FileSystemLoader, select_autoescape -import json -import locale -import os -import re -import subprocess -import sys - -def start(msg): - print("{}: \033[90m{} ... \033[39m".format(os.path.basename(sys.argv[0]), msg), file=sys.stderr, end="") - sys.stderr.flush() - -def done(): - print("\033[90mdone\033[39m", file=sys.stderr) - -def warn(msg): - print("{}: \033[31m{}\033[39m".format(os.path.basename(sys.argv[0]), msg), file=sys.stderr) - -def fedmod_output(args): - return subprocess.check_output(['pipenv', 'run', 'fedmod'] + args, encoding='utf-8', cwd='/home/otaylor/Source/fedmod') - -_nvr_to_name_re = re.compile('^(.*)-[^-]*-[^-]*') -def nvr_to_name(nvr): - return _nvr_to_name_re.match(nvr).group(1) - -class Package(object): - def __init__(self, name): - self.name = name - self.freedesktop_platform = 0 - self.freedesktop_platform_files = None - self.freedesktop_platform_required_by = None - self.gnome_platform = 0 - self.gnome_platform_files = None - self.gnome_platform_required_by = None - self.freedesktop_sdk = 0 - self.freedesktop_sdk_files = None - self.freedesktop_sdk_required_by = None - self.gnome_sdk = 0 - self.gnome_sdk_files = None - self.gnome_sdk_required_by = None - self.live = 0 - self.rf26 = 0 - self.source_package = None - self.flag = None - self._note = None - - @property - def runtimes(self): - return self.freedesktop_platform or self.gnome_platform or self.freedesktop_sdk or self.gnome_sdk - - @property - def klass(self): - if self.flag == 'F': - return "flagged" - elif self.flag == 'F?': - return "questionable" - elif self.flag == 'FD': - return "flagged-dep" - elif self.flag == 'W': - return "waived" - elif self.gnome_platform and not self.live: - return "questionable" - - @property - def modules(self): - return package_to_module.get(self.name, "") - - @property - def note(self): - if self.gnome_platform and not self.live: - return "platform package not on Live image" - elif self._note: - return self._note - else: - return "" - - def why(self, which): - files = getattr(self, which + '_files') - if files is None: - files_str = '' - elif len(files) <= 3: - files_str= 'Files: ' + ' '.join(files) - else: - files_str = 'Files: ' + ' '.join(files[:3]) + ' ...' - - required_by = getattr(self, which + '_required_by') - if required_by is None: - required_by_str = '' - else: - required_by_str = '\n'.join('{} ({})'.format(req, provider) for req, provider in required_by) - - if files_str and required_by_str: - return files_str + '\n' + required_by_str - elif files_str: - return files_str - elif required_by_str: - return required_by_str - else: - return '' - - @property - def freedesktop_platform_why(self): - return self.why('freedesktop_platform') - - @property - def freedesktop_sdk_why(self): - return self.why('freedesktop_sdk') - - @property - def gnome_platform_why(self): - return self.why('gnome_platform') - - @property - def gnome_sdk_why(self): - return self.why('gnome_sdk') - - def inclusion(self, which): - level = getattr(self, which) - if level == 0: - return 'absent' - elif level == 1: - return 'dep' - else: - required_by = getattr(self, which + '_required_by', False) - if required_by is False: - return 'present' - elif required_by is not None and len(required_by) > 0: - return 'files' - else: - return 'root' - - @property - def freedesktop_platform_inclusion(self): - return self.inclusion('freedesktop_platform') - - @property - def freedesktop_sdk_inclusion(self): - return self.inclusion('freedesktop_sdk') - - @property - def gnome_platform_inclusion(self): - return self.inclusion('gnome_platform') - - @property - def gnome_sdk_inclusion(self): - return self.inclusion('gnome_sdk') - - @property - def live_inclusion(self): - return self.inclusion('live') - - @property - def rf26_inclusion(self): - return self.inclusion('rf26') - -class SourcePackage(object): - def __init__(self, name): - self.name = name - self.packages = [] - - @property - def modules(self): - old_modules = self.packages[0].modules - klass = self.klass - if klass == "build-platform": - new_module = "desktop-runtime" - elif klass == "build-sdk": - new_module = "flatpak-runtime" - else: - new_module = None - - if old_modules and new_module: - return old_modules + " ⇒ " + new_module - elif old_modules: - return old_modules - else: - return new_module - - @property - def sdk_only(self): - return sdk_only - - @property - def klass(self): - if self.packages[0].modules in ("", "installer"): - sdk_only = True - for package in self.packages: - if package.freedesktop_platform or package.gnome_platform: - sdk_only = False - if sdk_only: - return "build-sdk" - else: - return "build-platform" - else: - return "" - -class Letter(object): - def __init__(self, letter): - self.letter = letter - self.packages = [] - -# -# Get information about packages -# - -packages = dict() -def add_package(name, which, level, only_if_exists=False, source_package=None): - pkg = packages.get(name, None) - if pkg is None: - if only_if_exists: - return - pkg = Package(name) - packages[name] = pkg - if getattr(pkg, which) < level: - setattr(pkg, which, level) - if source_package is not None: - pkg.source_package = source_package - -def add_packages(filename, which, resolve_deps=False, only_if_exists=False): - start("Adding packages from {}".format(filename)) - with open(filename) as f: - pkgs = set(line.strip() for line in f) - - if resolve_deps: - resolved_packages = json.loads(fedmod_output(['resolve-deps', '--json'] + list(pkgs))) - for package in resolved_packages: - name = nvr_to_name(package['rpm']) - srpm_name = nvr_to_name(package['srpm']) - add_package(name, which, level=(2 if name in pkgs else 1), - source_package=srpm_name, only_if_exists=only_if_exists) - - for package in resolved_packages: - for req, providers in package['requires'].items(): - provider = nvr_to_name(providers[0]) - provider_package = packages.get(provider, None) - if provider_package is None: # filtered out of the resolve-deps output - e.g., fedora-release - continue - required_by = getattr(provider_package, which + '_required_by') - if required_by is None: - required_by = [] - setattr(provider_package, which + '_required_by', required_by) - required_by.append((nvr_to_name(package['rpm']), req)) - else: - for package in pkgs: - add_package(package, which, level=2, only_if_exists=only_if_exists) - - done() - -def add_package_files(filename, which): - with open(filename) as f: - for line in f: - f, p = line.strip().split() - f = f[:-1] # strip trailing : - pkg = packages[p] - old = getattr(pkg, which + '_files') - if old is not None: - old.append(f) - else: - setattr(pkg, which + '_files', [f]) - -add_packages('out/freedesktop-Platform.packages', 'freedesktop_platform', resolve_deps=True) -add_packages('out/freedesktop-Sdk.packages', 'freedesktop_sdk', resolve_deps=True) -add_packages('out/gnome-Platform.packages', 'gnome_platform', resolve_deps=True) -add_packages('out/gnome-Sdk.packages', 'gnome_sdk', resolve_deps=True) -add_packages('f27-live.packages', 'live', only_if_exists=True) -add_packages('f26-flatpak-runtime.packages', 'rf26', only_if_exists=True) - -add_package_files('out/freedesktop-Platform.matched', 'freedesktop_platform') -add_package_files('out/freedesktop-Sdk.matched', 'freedesktop_sdk') -add_package_files('out/gnome-Platform.matched', 'gnome_platform') -add_package_files('out/gnome-Sdk.matched', 'gnome_sdk') - -source_packages = {} -for package in packages.values(): - source_package = source_packages.get(package.source_package, None) - if source_package is None: - source_package = SourcePackage(package.source_package) - source_packages[source_package.name] = source_package - source_package.packages.append(package) - -letters_map = dict() -for k, v in source_packages.items(): - v.packages.sort(key=lambda p: locale.strxfrm(p.name)) - l = v.name[0].upper() - letter = letters_map.get(l, None) - if letter is None: - letter = Letter(l) - letters_map[l] = letter - letter.packages.append(v) - -letters = [] -for k in sorted(letters_map.keys()): - letter = letters_map[k] - letter.packages.sort(key=lambda p: locale.strxfrm(p.name)) - letters.append(letter) - -start("Loading package to module map") -package_to_module = dict() - -output = fedmod_output(['list-rpms', '--list-modules']) -for l in output.split('\n'): - fields = l.strip().split() - if len(fields) != 2: - continue - package_to_module[fields[0]] = fields[1][1:-1] -done() - -start("Loading package notes") -comment_re = re.compile(r'\s*#.*') -flag_re = re.compile(r'[A-Z?]+$') -package_re = re.compile(r'\S+') - -with open("package-notes.txt") as f: - for line in f: - line = comment_re.sub('', line) - line = line.strip() - if line == '': - continue - parts = line.split(":", 2) - name = parts[0].strip() - if not re.match(package_re, name): - warn("Can't parse package note: {}".format(line)) - continue - if len(parts) == 1: - flag = note = None - elif len(parts) == 2: - x = parts[1].strip() - if flag_re.match(x): - flag = x - note = None - else: - note = x - flag = None - elif len(parts) == 3: - x = parts[1].strip() - if flag_re.match(x): - flag = x - note = parts[2].strip() - else: - flag = None - note = parts[1] + ':' + parts[2] - - pkg = packages.get(name, None) - if pkg is None: - warn("Package note for missing package: {}".format(name)) - continue - - if flag is not None: - pkg.flag = flag - if note is not None: - pkg._note = note -done() - -# -# Get summary information for unmatched files -# - -def count_lines(fname): - with open(fname) as f: - return len(list(f)) - -unmatched_counts = { - 'freedesktop_platform': count_lines('out/freedesktop-Platform.unmatched'), - 'gnome_platform': count_lines('out/gnome-Platform.unmatched'), - 'freedesktop_sdk': count_lines('out/freedesktop-Sdk.unmatched'), - 'gnome_sdk': count_lines('out/gnome-Sdk.unmatched'), -} - -# -# Generate the profiles -# -def generate_profile(outfile, which): - with open(outfile, 'w') as f: - for letter in letters: - for src in letter.packages: - for pkg in src.packages: - if getattr(pkg, which) != 0: - print(pkg.name, file=f) - -generate_profile('out/runtime-base.profile', 'freedesktop_platform') -generate_profile('out/sdk-base.profile', 'freedesktop_sdk') -generate_profile('out/runtime.profile', 'gnome_platform') -generate_profile('out/sdk.profile', 'gnome_sdk') - -# -# Generate the report -# - -env = Environment( - loader=FileSystemLoader('.'), - autoescape=select_autoescape(['html', 'xml']), - trim_blocks=True, - lstrip_blocks=True -) - -template = env.get_template('report-template.html') - -with open('report.html', 'w') as f: - f.write(template.render(letters=letters, unmatched=unmatched_counts, package_to_module=package_to_module)) diff --git a/list-files.py b/list-files.py deleted file mode 100755 index 3e95058..0000000 --- a/list-files.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/python3 - -import os -import re -import sys - -sdk = len(sys.argv) > 1 and sys.argv[1] == '--sdk' - -def output_dir(d): - for f in sorted(os.listdir(d)): - full = os.path.join(d, f) - if not os.path.isdir(full): - print(os.path.join(d, f)) - -def output_dir_recurse(d): - for dirName, subdirs, files in os.walk(d): - for f in sorted(files): - print(os.path.join(dirName, f)) - -output_dir('/usr/bin') - -for f in os.listdir('/usr/lib'): - full = os.path.join('/usr/lib', f) - if (re.match(r'^.*\.so\.\d+$', f) is not None or - re.match(r'^.*\.so$', f) is not None and not os.path.islink(full)): - print(full) - -output_dir_recurse('/usr/share/fonts') - -if sdk: - output_dir_recurse('/usr/include') - output_dir('/usr/lib/pkgconfig') - output_dir('/usr/share/pkgconfig') - -# import pkgutil -# for f in pkgutil.iter_modules(): -# try: -# path = f[0].path -# if path.find('site-packages') < 0: -# continue -# except AttributeError: -# continue -# if not(f[1].startswith('_')): -# print(f, 'python3dist({})'.format(f[1])) - diff --git a/resolve-files.py b/resolve-files.py deleted file mode 100755 index de5631f..0000000 --- a/resolve-files.py +++ /dev/null @@ -1,531 +0,0 @@ -#!/usr/bin/python3 - -from functools import cmp_to_key -import gzip -import hashlib -import os -import pickle -import re -import rpm -import sys -import xml.etree.ElementTree as ET -import xml.sax - -XDG_CACHE_HOME = os.environ.get("XDG_CACHE_HOME") or os.path.expanduser("~/.cache") - -# This needs to be in sync with fedmod -REPOS = [ - "f28-packages" -] - -ignore = set() -rename = dict() - -bin_ignore = [ - # A bunch of binaries built as part of nss. A few of these are - # in /usr/lib64/nss/unsupported-tools/ as part of nss-tools, the rest are not considered - # worth installing at all (test utilities, etc.) - 'addbuiltin', 'atob', 'baddbdir', 'bltest', 'btoa', 'certcgi', 'chktest', 'conflict', - 'crmftest', 'dbtest', 'derdump', 'dertimetest', 'digest', 'ecperf', 'encodeinttest', - 'fipstest', 'httpserv', 'listsuites', 'makepqg', 'mangle', 'multinit', 'nonspr10', - 'ocspclnt', 'ocspresp', 'oidcalc', 'p7content', 'p7env', 'p7sign', 'p7verify', - 'pk11gcmtest', 'pk11mode', 'pk1sign', 'pkix-errcodes', 'pp', 'pwdecrypt', 'remtest', - 'rsaperf', 'sdrtest', 'secmodtest', 'selfserv', 'shlibsign', 'signtool', 'strsclnt', - 'symkeyutil', 'tstclnt', 'vfychain', 'vfyserv', - - # Script added into nss by openembedded - 'signlibs.sh', - - # /usr/share/doc/aspell/aspell-import in Fedora - 'aspell-import', - - # Removed in perl-5.27 - 'c2ph', - - # Removed - https://lists.fedorahosted.org/archives/list/elfutils-devel@lists.fedorahosted.org/thread/22LIIMXI6EDGCOIO6QFSBUO2KHEXIGSJ/ - 'eu-ld', - - # compatibility perl script in zenity for something quite old, not packaged in fedora - 'gdialog', - - # An openembedded thing - # "Tool that installs the GNU config.guess / config.sub into a directory tree" - 'gnu-configize', - - # GPG test program (https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=tree;f=tests) - 'gpgscm', - - # An implementation of tar for cross-platform compatibility, disabled in gnupg2.spec - 'gpgtar', - - # Removed from gtk-doc - # https://git.gnome.org/browse/gtk-doc/commit/?id=46df4354abed5724697fd5e39630c5bbc6637cc4 - 'gtkdoc-mktmpl', - - # Versioned python-3.5 binaries - 'idle3.5', 'pydoc3.5', 'python3.5', 'python3.5-config', 'python3.5m', 'python3.5m-config', '2to3-3.5', - - # installed in openembedded with a coreutils suffix along with the more normal version - 'kill.coreutils', 'uptime.coreutils', - - # nettle utilities not currently packaged in fedora - # (https://src.fedoraproject.org/rpms/nettle/c/2ec204e2de17006b566c9ff7d90ec65ca1680ed5?branch=master) - 'nettle-hash', 'nettle-lfib-stream', 'nettle-pbkdf2', 'pkcs1-conv', 'sexp-conv', - - # Not built by default as of util-linux-2.29 - '/usr/bin/pg', - - # These are installed as -64 in Fedora, we just ignore them because they will be - # pulled in by the corresponding library - 'gdk-pixbuf-query-loaders', 'gtk-query-immodules-2.0', - 'gio-querymodules', 'gtk-query-immodules-3.0', - - # Removed in krb5-1.13 (https://web.mit.edu/kerberos/krb5-1.13/README-1.13.5.txt) - 'krb5-send-pr', - - # Removed in util-linux-2.30' - 'tailf', - - # OpenEmbedded uses Debian's ca-certificates, Fedora is different - 'update-ca-certificates', - - ######################################################################### - # In the freedesktop runtime for some reason, doesn't seem useful - 'bsdcat', - - # Same as 'openssl rehash', but as a perl script (openssl-perl) - 'c_rehash', - - # From pulseaudio, wrapper script to start a pulseaudio server as if it was ESD (pulseaudio-esound-compat) - 'esdcompat', - - # Just need the library (gcab) - 'gcab', - - # Probably not useful in the runtime or the SDK (gstreamer-plugins-base-tools) - 'gst-device-monitor-1.0', 'gst-discoverer-1.0', 'gst-play-1.0', - - # Python utilities (python2-tools) - 'idle', 'smtpd.py', - - # Python3 utilities (python3-tools) - 'idle3', '2to3', - - # A binary from cups, we just need the libraries (cups-libs) - 'ipptool', - - # Minimal profiler (glibc-utils) - 'pcprofiledump', - - # (pcre-tools) - 'pcre2grep', 'pcre2test', - - # Random test program from libproxy (libproxy-bin) - 'proxy', - - # Tools from libvpx (libvpx-utils) - 'vpxdec', 'vpxenc', -] -ignore.update('/usr/bin/' + x for x in bin_ignore) - -bin_rename = { - # lcms2 compiled with --program-suffix=2 in Fedora, even though there are no actual - # conflicts between lcms and lcms2 - jpegicc was renamed to jpgicc, etc. - 'jpgicc': 'jpgicc2', - 'linkicc': 'linkicc2', - 'psicc': 'psicc2', - 'tificc': 'tificc2', - 'transicc': 'transicc2', -} -rename.update({ '/usr/bin/' + k: '/usr/bin/' + v for k, v in bin_rename.items() }) - -lib_ignore = [ - # Symlink created in freedesktop.org flatpak runtime, not standard - 'libEGL_indirect.so.0', - - # Removed in gpgme-1.9.0 - 'libgpgme-pthread.so.11', - - # Not enabled in fedora (consider fixing) - 'libharfbuzz-gobject.so.0', - - # Part of glibc - 'libssp.so.0', -] -ignore.update('/usr/lib64/' + x for x in lib_ignore) - -fonts_ignore = { - # Added in 2.36 - 'dejavu/DejaVuMathTeXGyre.ttf', -} -ignore.update('/usr/share/fonts/' + x for x in fonts_ignore) - -lib_rename = { - # Newer in Fedora - 'libhunspell-1.3.so.0': 'libhunspell-1.5.so.0', - 'libwebp.so.6': 'libwebp.so.7', - 'libwebpmux.so.2': 'libwebpmux.so.3', - 'libpcre2-posix.so.1': 'libpcre2-posix.so.2', - 'libvpx.so.3': 'libvpx.so.4', - 'libkadm5clnt_mit.so.9': 'libkadm5clnt_mit.so.11', - 'libkadm5srv_mit.so.9': 'libkadm5srv_mit.so.11', - - # Newer in Flatpak runtime - 'libprocps.so.6': 'libprocps.so.4', # procps-3.10 vs. procps-3.12 - 'libgif.so.7': 'libgif.so.4', # giflib 4 vs giflib-5 - https://bugzilla.redhat.com/show_bug.cgi?id=822844 - - # Fedora arch-handling - 'ld-linux.so.2': 'ld-linux-x86-64.so.2', -} -rename.update({ '/usr/lib64/' + k: '/usr/lib64/' + v for k, v in lib_rename.items() }) - -include_ignore = { - # https://git.gnome.org/browse/at-spi2-core/commit/?id=1eb223bb48464d707290ef540581e9763b0ceee8 - 'at-spi-2.0/atspi/atspi-gmain.c', - - # Removed in 7.55 https://github.com/curl/curl/commit/73a2fcea0b4adea6ba342cd7ed1149782c214ae3 - 'curl/curlbuild-64.h', 'curl/curlbuild.h', 'curl/curlrules.h', - - # Not enabled on Fedora - 'harfbuzz/hb-gobject-enums.h', - 'harfbuzz/hb-gobject-structs.h', - 'harfbuzz/hb-gobject.h', - - # https://github.com/hunspell/hunspell/commit/99675e791d123cbe1be914b1a49dd83062134301 - 'hunspell/affentry.hxx', 'hunspell/affixmgr.hxx', 'hunspell/baseaffix.hxx', 'hunspell/dictmgr.hxx', - 'hunspell/filemgr.hxx','hunspell/hashmgr.hxx','hunspell/hunzip.hxx','hunspell/langnum.hxx', - 'hunspell/phonet.hxx','hunspell/replist.hxx','hunspell/suggestmgr.hxx', - - # Removed in openssl-1.1 - 'openssl/des_old.h', 'openssl/dso.h', 'openssl/krb5_asn.h', 'openssl/kssl.h', 'openssl/pqueue.h', - 'openssl/ssl23.h', 'openssl/ui_compat.h', -} -ignore.update('/usr/include/' + x for x in include_ignore) - -include_rename = { - 'assuan.h': 'libassuan2/assuan.h', - 'nss3/nssck.api': 'nss3/templates/nssck.api', -} -rename.update({ '/usr/include/' + k: '/usr/include/' + v for k, v in include_rename.items() }) - -nspr_include = [ - 'nspr.h', 'plarena.h', 'plarenas.h', 'plbase64.h', 'plerror.h', 'plgetopt.h', 'plhash.h', - 'plstr.h', 'pratom.h', 'prbit.h', 'prclist.h', 'prcmon.h', 'prcountr.h', 'prcpucfg.h', - 'prcvar.h', 'prdtoa.h', 'prenv.h', 'prerr.h', 'prerror.h', 'prinet.h', 'prinit.h', - 'prinrval.h', 'prio.h', 'pripcsem.h', 'private/pprio.h', 'private/pprthred.h', 'private/prpriv.h', - 'prlink.h', 'prlock.h', 'prlog.h', 'prlong.h', 'prmem.h', 'prmon.h', 'prmwait.h', 'prnetdb.h', - 'prolock.h', 'prpdce.h', 'prprf.h', 'prproces.h', 'prrng.h', 'prrwlock.h', 'prshm.h', 'prshma.h', - 'prsystem.h', 'prthread.h', 'prtime.h', 'prtpool.h', 'prtrace.h', 'prtypes.h', 'prvrsion.h', - 'prwin16.h', 'stropts.h', 'obsolete/pralarm.h', 'obsolete/probslet.h', 'obsolete/protypes.h', 'obsolete/prsem.h' -] -rename.update({ '/usr/include/' + x: '/usr/include/nspr4/' + x for x in nspr_include }) - -pc_ignore = { - # Not enabled on Fedora - 'harfbuzz-gobject.pc', - - # https://github.com/ostroproject/ostro-os/blob/master/meta/recipes-support/libassuan/libassuan/libassuan-add-pkgconfig-support.patch - 'libassuan.pc', - - # http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-support/libgpg-error/libgpg-error/pkgconfig.patch - 'gpg-error.pc', - - # http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-support/libgcrypt/files/0001-Add-and-use-pkg-config-for-libgcrypt-instead-of-conf.patch - 'libgcrypt.pc', -} -ignore.update('/usr/lib64/pkgconfig/' + x for x in pc_ignore) - -pc_rename = { - 'python-3.5.pc': 'python-3.6.pc', - 'python-3.5m.pc': 'python-3.6m.pc', -} -rename.update({ '/usr/lib64/pkgconfig/' + k: '/usr/lib64/pkgconfig/' + v for k, v in pc_rename.items() }) -rename.update({ '/usr/share/pkgconfig/' + k: '/usr/share/pkgconfig/' + v for k, v in pc_rename.items() }) - -ignore_patterns = [ - # Flatpak runtime has a versioned gawk-4.1.3 - r'/usr/bin/gawk-.*', - - # Architecture specific aliases for gcc, binutils, etc - r'^/usr/bin/x86_64-unknown-linux-.*', - - # From NSPR, intentionally not installed on Fedora - r'/usr/include/md/.*', - - # .install files litter the include directories of openembedded - r'.*/\.install$' -] -ignore_compiled = [re.compile(x) for x in ignore_patterns] - -rename_patterns = [ - (r'^/usr/include/c\+\+/6.2.0/(.*)', r'/usr/include/c++/7/\1'), - (r'^/usr/include/c\+\+/7/x86_64-unknown-linux/(.*)', r'/usr/include/c++/7/x86_64-redhat-linux/\1'), - (r'^/usr/include/python3.5m/(.*)', r'/usr/include/python3.6m/\1'), - (r'^/usr/lib64/pkgconfig/(.*proto.pc)', r'/usr/share/pkgconfig/\1'), - (r'^/usr/share/fonts/liberation-fonts/(.*)', r'/usr/share/fonts/liberation/\1'), -] -rename_compiled = [(re.compile(a), b) for a, b in rename_patterns] - -platform_package_ignore_patterns = [ - "^.*-devel$", - "^libappstream-glib-builder$", # may not need in the sdk either - "^gtk-doc$", - "^icu$", # may not need in the sdk either - '^llvm$', - '^sqlite$', -] -platform_package_ignore_compiled = [re.compile(p) for p in platform_package_ignore_patterns] - - -# We need to look up a lot of file dependencies. dnf/libsolv is not fast at doing -# this (at least when we look up files one-by-one) so we create a hash table that -# maps from *all* files in the distribution to the "best" package that provides -# the file. To further speed this up, we pickle the result and store it, and only -# recreate it when the DNF metadata changes. We gzip the pickle to save space -# (70M instead of 700M), this slows things down by about 2 seconds. -# - -def package_cmp(p1, p2): - n1, e1, v1, r1, a1 = p1 - n2, e2, v2, r2, a2 = p2 - - if a1 == 'i686' and a2 != 'i686': - return 1 - if a1 != 'i686' and a2 == 'i686': - return -1 - - if n1.startswith('compat-') and not n2.startswith('compat-'): - return 1 - elif n2.startswith('compat-') and not n1.startswith('compat-'): - return -1 - - if n1 < n2: - return -1 - elif n1 > n2: - return 1 - - if e1 is None: - e1 = '0' - if e2 is None: - e2 = '0' - - return - rpm.labelCompare((e1, v1, r1), (e2, v2, r2)) - -class FilesMapHandler(xml.sax.handler.ContentHandler): - def __init__(self, files_map): - self.files_map = files_map - self.name = None - self.arch = None - self.epoch = None - self.version = None - self.release = None - self.file = None - - def startElement(self, name, attrs): - if name == 'package': - self.name = attrs['name'] - self.arch = attrs['arch'] - elif name == 'version': - if self.name is not None: - self.epoch = attrs['epoch'] - self.version = attrs['ver'] - self.release = attrs['rel'] - elif name == 'file': - self.file = '' - - def endElement(self, name): - if name == 'package': - self.name = None - elif name == 'file': - package = (self.name, self.epoch, self.version, self.release, self.arch) - old = self.files_map.get(self.file) - if old is None or package_cmp(package, old) < 0: - self.files_map[self.file] = package - - self.file = None - - def characters(self, content): - if self.file is not None: - self.file += content - -def scan_filelists(filelists_path, files_map): - handler = FilesMapHandler(files_map) - with gzip.open(filelists_path, 'rb') as f: - xml.sax.parse(f, handler) - - -def make_files_map(repo_info): - files_map = {} - - for repo in REPOS: - start("Scanning files for {}".format(repo)) - repo_dir, repomd_contents = repo_info[repo] - root = ET.fromstring(repomd_contents) - - ns = {'repo': 'http://linux.duke.edu/metadata/repo'} - filelists_location = root.find("./repo:data[@type='filelists']/repo:location", ns).attrib['href'] - filelists_path = os.path.join(repo_dir, filelists_location) - if os.path.commonprefix([filelists_path, repo_dir]) != repo_dir: - done() - error("{}: filelists directory is outside of repository".format(repo_dir)) - - scan_filelists(filelists_path, files_map) - done() - - start("Finalizing files map") - for k in files_map: - files_map[k] = files_map[k][0] - done() - - return files_map - - -def get_files_map(): - hash_text = '' - repos_dir = os.path.join(XDG_CACHE_HOME, "fedmod/repos") - repo_info = {} - for repo in REPOS: - repo_dir = os.path.join(repos_dir, repo, 'x86_64') - repomd_path = os.path.join(repo_dir, 'repodata/repomd.xml') - try: - with open(repomd_path, 'rb') as f: - repomd_contents = f.read() - except (OSError, IOError): - print("Cannot read {}, try 'fedmod fetch-metadata'".format(repomd_path), file=sys.stderr) - sys.exit(1) - - repo_info[repo] = (repo_dir, repomd_contents) - hash_text += '{}|{}\n'.format(repo, hashlib.sha256(repomd_contents).hexdigest()) - - repo_hash = hashlib.sha256(hash_text.encode("UTF-8")).hexdigest() - - files_map_path = os.path.join(XDG_CACHE_HOME, "fedmod/flatpak-runtime-files-map.gz") - - try: - with gzip.open(files_map_path, 'rb') as f: - old_repo_hash = f.read(64).decode('utf-8') - if old_repo_hash == repo_hash: - start("Reading cached file map") - files_map = pickle.load(f) - done() - - return files_map - except FileNotFoundError: - pass - - files_map = make_files_map(repo_info) - - start("Writing file map to cache") - with gzip.open(files_map_path, 'wb') as f: - f.write(repo_hash.encode('utf-8')) - pickle.dump(files_map, f) - done() - - return files_map - -if len(sys.argv) != 2: - print("Usage: resolve-files.py INFILE", file=sys.stderr) - sys.exit(1) - -inpath = sys.argv[1] -if not inpath.endswith('.files'): - print("INFILE must have .files suffix", file=sys.stderr) - sys.exit(1) - -base_path = inpath[:-len('.files')] -is_platform = "-Platform" in base_path -is_sdk = "-Sdk" in base_path - -def warn(msg): - print("{}: \033[31m{}\033[39m".format(inpath, msg), file=sys.stderr) - -def error(msg): - print("{}: \033[31m{}\033[39m".format(inpath, msg), file=sys.stderr) - sys.exit(1) - -def start(msg): - print("{}: \033[90m{} ... \033[39m".format(inpath, msg), file=sys.stderr, end="") - sys.stderr.flush() - -def done(): - print("\033[90mdone\033[39m", file=sys.stderr) - -start("Reading file list") - -to_resolve = [] -with open(inpath) as f: - for l in f: - r = l.rstrip() - if r.startswith('/usr/lib/'): - r = '/usr/lib64/' + r[len('/usr/lib/'):] - to_resolve.append(r) - -to_resolve.sort() - -done() - -files_map = get_files_map() -found_packages = set() - -start("Resolving files to packages") - -matched_file = open(base_path + '.matched', 'w') -unmatched_file = open(base_path + '.unmatched', 'w') -unmatched_count = 0 - -for r in to_resolve: - if r in ignore: - continue - - skip = False - for p in ignore_compiled: - if p.match(r) is not None: - skip = True - if skip: - continue - - if r in rename: - r = rename[r] - - for p, replacement in rename_compiled: - if p.match(r) is not None: - r = p.sub(replacement, r) - - if r.startswith('/usr/lib64/'): - search = [r, '/lib64/' + os.path.basename(r)] - elif r.startswith('/usr/bin/'): - search = [r, '/bin/' + os.path.basename(r), '/usr/sbin/' + os.path.basename(r), '/sbin/' + os.path.basename(r)] - else: - search = [r] - - if r.startswith('/usr/lib64/libLLVM'): - # freedesktop SDK builds "split" LLVM libraries - found_packages.add('llvm-libs') - continue - - for s in search: - providing = files_map.get(s, None) - if providing is not None: - break - - if providing is None: - print(r, file=unmatched_file) - unmatched_count += 1 - else: - if is_platform and any(p.match(providing) is not None for p in platform_package_ignore_compiled): - continue - - found_packages.add(providing) - print("{}: {}".format(r, providing), file=matched_file) - -unmatched_file.close() -matched_file.close() - -with open(base_path + '.packages', 'w') as f: - for p in sorted(found_packages): - print(p, file=f) - -done() - -if unmatched_count > 0: - warn("{} unmatched files, see {}".format(unmatched_count, base_path + ".unmatched")) diff --git a/tools/generate-files.sh b/tools/generate-files.sh new file mode 100755 index 0000000..24be4e3 --- /dev/null +++ b/tools/generate-files.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +out=$1 +base=$(basename $out) + +case $base in + freedesktop-*) + ns=org.freedesktop + version=1.6 + ;; + gnome-*) + ns=org.gnome + version=3.26 + ;; + *) + echo 1>&2 "Can't identify runtime for $base" + exit 1 + ;; +esac + +case $base in + *-Platform.files) + sdk= + type=Platform + ;; + *-Sdk.files) + sdk=--sdk + type=Sdk + ;; + *) + echo 1>&2 "Can't identify type for $base" + exit 1 + ;; +esac + +runtime="$ns.$type/x86_64/$version" + +echo "$base: listing files in $runtime" + +flatpak run --file-forwarding --command=/usr/bin/python3 $runtime @@ tools/list-files.py @@ $sdk > $out diff --git a/tools/generate-modulemd.py b/tools/generate-modulemd.py new file mode 100755 index 0000000..b3bb4ef --- /dev/null +++ b/tools/generate-modulemd.py @@ -0,0 +1,20 @@ +#!/usr/bin/python3 +import sys +from yaml_utils import ordered_load, ordered_dump + +with open('flatpak-runtime.in.yaml') as f: + modulemd = ordered_load(f) + +def set_profile(profile_name, list_file): + with open(list_file) as f: + packages = [l.strip() for l in f] + print("{}: {} packages".format(profile_name, len(packages)), file=sys.stderr) + modulemd['data']['profiles'][profile_name] = packages + +set_profile('runtime', 'out/runtime.profile') +set_profile('runtime-base', 'out/runtime-base.profile') +set_profile('sdk', 'out/sdk.profile') +set_profile('sdk-base', 'out/sdk-base.profile') + +with open('flatpak-runtime.yaml', 'w') as f: + ordered_dump(modulemd, stream=f, default_flow_style=False, encoding="utf-8") diff --git a/tools/generate-report.py b/tools/generate-report.py new file mode 100755 index 0000000..a64a008 --- /dev/null +++ b/tools/generate-report.py @@ -0,0 +1,401 @@ +#!/usr/bin/python3 + +from jinja2 import Environment, FileSystemLoader, select_autoescape +import json +import locale +import os +import re +import subprocess +import sys + +def start(msg): + print("{}: \033[90m{} ... \033[39m".format(os.path.basename(sys.argv[0]), msg), file=sys.stderr, end="") + sys.stderr.flush() + +def done(): + print("\033[90mdone\033[39m", file=sys.stderr) + +def warn(msg): + print("{}: \033[31m{}\033[39m".format(os.path.basename(sys.argv[0]), msg), file=sys.stderr) + +def fedmod_output(args): + return subprocess.check_output(['pipenv', 'run', 'fedmod'] + args, encoding='utf-8', cwd='/home/otaylor/Source/fedmod') + +_nvr_to_name_re = re.compile('^(.*)-[^-]*-[^-]*') +def nvr_to_name(nvr): + return _nvr_to_name_re.match(nvr).group(1) + +class Package(object): + def __init__(self, name): + self.name = name + self.freedesktop_platform = 0 + self.freedesktop_platform_files = None + self.freedesktop_platform_required_by = None + self.gnome_platform = 0 + self.gnome_platform_files = None + self.gnome_platform_required_by = None + self.freedesktop_sdk = 0 + self.freedesktop_sdk_files = None + self.freedesktop_sdk_required_by = None + self.gnome_sdk = 0 + self.gnome_sdk_files = None + self.gnome_sdk_required_by = None + self.live = 0 + self.rf26 = 0 + self.source_package = None + self.flag = None + self._note = None + + @property + def runtimes(self): + return self.freedesktop_platform or self.gnome_platform or self.freedesktop_sdk or self.gnome_sdk + + @property + def klass(self): + if self.flag == 'F': + return "flagged" + elif self.flag == 'F?': + return "questionable" + elif self.flag == 'FD': + return "flagged-dep" + elif self.flag == 'W': + return "waived" + elif self.gnome_platform and not self.live: + return "questionable" + + @property + def modules(self): + return package_to_module.get(self.name, "") + + @property + def note(self): + if self.gnome_platform and not self.live: + return "platform package not on Live image" + elif self._note: + return self._note + else: + return "" + + def why(self, which): + files = getattr(self, which + '_files') + if files is None: + files_str = '' + elif len(files) <= 3: + files_str= 'Files: ' + ' '.join(files) + else: + files_str = 'Files: ' + ' '.join(files[:3]) + ' ...' + + required_by = getattr(self, which + '_required_by') + if required_by is None: + required_by_str = '' + else: + required_by_str = '\n'.join('{} ({})'.format(req, provider) for req, provider in required_by) + + if files_str and required_by_str: + return files_str + '\n' + required_by_str + elif files_str: + return files_str + elif required_by_str: + return required_by_str + else: + return '' + + @property + def freedesktop_platform_why(self): + return self.why('freedesktop_platform') + + @property + def freedesktop_sdk_why(self): + return self.why('freedesktop_sdk') + + @property + def gnome_platform_why(self): + return self.why('gnome_platform') + + @property + def gnome_sdk_why(self): + return self.why('gnome_sdk') + + def inclusion(self, which): + level = getattr(self, which) + if level == 0: + return 'absent' + elif level == 1: + return 'dep' + else: + required_by = getattr(self, which + '_required_by', False) + if required_by is False: + return 'present' + elif required_by is not None and len(required_by) > 0: + return 'files' + else: + return 'root' + + @property + def freedesktop_platform_inclusion(self): + return self.inclusion('freedesktop_platform') + + @property + def freedesktop_sdk_inclusion(self): + return self.inclusion('freedesktop_sdk') + + @property + def gnome_platform_inclusion(self): + return self.inclusion('gnome_platform') + + @property + def gnome_sdk_inclusion(self): + return self.inclusion('gnome_sdk') + + @property + def live_inclusion(self): + return self.inclusion('live') + + @property + def rf26_inclusion(self): + return self.inclusion('rf26') + +class SourcePackage(object): + def __init__(self, name): + self.name = name + self.packages = [] + + @property + def modules(self): + old_modules = self.packages[0].modules + klass = self.klass + if klass == "build-platform": + new_module = "desktop-runtime" + elif klass == "build-sdk": + new_module = "flatpak-runtime" + else: + new_module = None + + if old_modules and new_module: + return old_modules + " ⇒ " + new_module + elif old_modules: + return old_modules + else: + return new_module + + @property + def sdk_only(self): + return sdk_only + + @property + def klass(self): + if self.packages[0].modules in ("", "installer"): + sdk_only = True + for package in self.packages: + if package.freedesktop_platform or package.gnome_platform: + sdk_only = False + if sdk_only: + return "build-sdk" + else: + return "build-platform" + else: + return "" + +class Letter(object): + def __init__(self, letter): + self.letter = letter + self.packages = [] + +# +# Get information about packages +# + +packages = dict() +def add_package(name, which, level, only_if_exists=False, source_package=None): + pkg = packages.get(name, None) + if pkg is None: + if only_if_exists: + return + pkg = Package(name) + packages[name] = pkg + if getattr(pkg, which) < level: + setattr(pkg, which, level) + if source_package is not None: + pkg.source_package = source_package + +def add_packages(filename, which, resolve_deps=False, only_if_exists=False): + start("Adding packages from {}".format(filename)) + with open(filename) as f: + pkgs = set(line.strip() for line in f) + + if resolve_deps: + resolved_packages = json.loads(fedmod_output(['resolve-deps', '--json'] + list(pkgs))) + for package in resolved_packages: + name = nvr_to_name(package['rpm']) + srpm_name = nvr_to_name(package['srpm']) + add_package(name, which, level=(2 if name in pkgs else 1), + source_package=srpm_name, only_if_exists=only_if_exists) + + for package in resolved_packages: + for req, providers in package['requires'].items(): + provider = nvr_to_name(providers[0]) + provider_package = packages.get(provider, None) + if provider_package is None: # filtered out of the resolve-deps output - e.g., fedora-release + continue + required_by = getattr(provider_package, which + '_required_by') + if required_by is None: + required_by = [] + setattr(provider_package, which + '_required_by', required_by) + required_by.append((nvr_to_name(package['rpm']), req)) + else: + for package in pkgs: + add_package(package, which, level=2, only_if_exists=only_if_exists) + + done() + +def add_package_files(filename, which): + with open(filename) as f: + for line in f: + f, p = line.strip().split() + f = f[:-1] # strip trailing : + pkg = packages[p] + old = getattr(pkg, which + '_files') + if old is not None: + old.append(f) + else: + setattr(pkg, which + '_files', [f]) + +add_packages('out/freedesktop-Platform.packages', 'freedesktop_platform', resolve_deps=True) +add_packages('out/freedesktop-Sdk.packages', 'freedesktop_sdk', resolve_deps=True) +add_packages('out/gnome-Platform.packages', 'gnome_platform', resolve_deps=True) +add_packages('out/gnome-Sdk.packages', 'gnome_sdk', resolve_deps=True) +add_packages('data/f27-live.packages', 'live', only_if_exists=True) +add_packages('data/f26-flatpak-runtime.packages', 'rf26', only_if_exists=True) + +add_package_files('out/freedesktop-Platform.matched', 'freedesktop_platform') +add_package_files('out/freedesktop-Sdk.matched', 'freedesktop_sdk') +add_package_files('out/gnome-Platform.matched', 'gnome_platform') +add_package_files('out/gnome-Sdk.matched', 'gnome_sdk') + +source_packages = {} +for package in packages.values(): + source_package = source_packages.get(package.source_package, None) + if source_package is None: + source_package = SourcePackage(package.source_package) + source_packages[source_package.name] = source_package + source_package.packages.append(package) + +letters_map = dict() +for k, v in source_packages.items(): + v.packages.sort(key=lambda p: locale.strxfrm(p.name)) + l = v.name[0].upper() + letter = letters_map.get(l, None) + if letter is None: + letter = Letter(l) + letters_map[l] = letter + letter.packages.append(v) + +letters = [] +for k in sorted(letters_map.keys()): + letter = letters_map[k] + letter.packages.sort(key=lambda p: locale.strxfrm(p.name)) + letters.append(letter) + +start("Loading package to module map") +package_to_module = dict() + +output = fedmod_output(['list-rpms', '--list-modules']) +for l in output.split('\n'): + fields = l.strip().split() + if len(fields) != 2: + continue + package_to_module[fields[0]] = fields[1][1:-1] +done() + +start("Loading package notes") +comment_re = re.compile(r'\s*#.*') +flag_re = re.compile(r'[A-Z?]+$') +package_re = re.compile(r'\S+') + +with open("package-notes.txt") as f: + for line in f: + line = comment_re.sub('', line) + line = line.strip() + if line == '': + continue + parts = line.split(":", 2) + name = parts[0].strip() + if not re.match(package_re, name): + warn("Can't parse package note: {}".format(line)) + continue + if len(parts) == 1: + flag = note = None + elif len(parts) == 2: + x = parts[1].strip() + if flag_re.match(x): + flag = x + note = None + else: + note = x + flag = None + elif len(parts) == 3: + x = parts[1].strip() + if flag_re.match(x): + flag = x + note = parts[2].strip() + else: + flag = None + note = parts[1] + ':' + parts[2] + + pkg = packages.get(name, None) + if pkg is None: + warn("Package note for missing package: {}".format(name)) + continue + + if flag is not None: + pkg.flag = flag + if note is not None: + pkg._note = note +done() + +# +# Get summary information for unmatched files +# + +def count_lines(fname): + with open(fname) as f: + return len(list(f)) + +unmatched_counts = { + 'freedesktop_platform': count_lines('out/freedesktop-Platform.unmatched'), + 'gnome_platform': count_lines('out/gnome-Platform.unmatched'), + 'freedesktop_sdk': count_lines('out/freedesktop-Sdk.unmatched'), + 'gnome_sdk': count_lines('out/gnome-Sdk.unmatched'), +} + +# +# Generate the profiles +# +def generate_profile(outfile, which): + with open(outfile, 'w') as f: + for letter in letters: + for src in letter.packages: + for pkg in src.packages: + if getattr(pkg, which) != 0: + print(pkg.name, file=f) + +generate_profile('out/runtime-base.profile', 'freedesktop_platform') +generate_profile('out/sdk-base.profile', 'freedesktop_sdk') +generate_profile('out/runtime.profile', 'gnome_platform') +generate_profile('out/sdk.profile', 'gnome_sdk') + +# +# Generate the report +# + +env = Environment( + loader=FileSystemLoader('.'), + autoescape=select_autoescape(['html', 'xml']), + trim_blocks=True, + lstrip_blocks=True +) + +template = env.get_template('report-template.html') + +with open('report.html', 'w') as f: + f.write(template.render(letters=letters, unmatched=unmatched_counts, package_to_module=package_to_module)) diff --git a/tools/list-files.py b/tools/list-files.py new file mode 100755 index 0000000..3e95058 --- /dev/null +++ b/tools/list-files.py @@ -0,0 +1,45 @@ +#!/usr/bin/python3 + +import os +import re +import sys + +sdk = len(sys.argv) > 1 and sys.argv[1] == '--sdk' + +def output_dir(d): + for f in sorted(os.listdir(d)): + full = os.path.join(d, f) + if not os.path.isdir(full): + print(os.path.join(d, f)) + +def output_dir_recurse(d): + for dirName, subdirs, files in os.walk(d): + for f in sorted(files): + print(os.path.join(dirName, f)) + +output_dir('/usr/bin') + +for f in os.listdir('/usr/lib'): + full = os.path.join('/usr/lib', f) + if (re.match(r'^.*\.so\.\d+$', f) is not None or + re.match(r'^.*\.so$', f) is not None and not os.path.islink(full)): + print(full) + +output_dir_recurse('/usr/share/fonts') + +if sdk: + output_dir_recurse('/usr/include') + output_dir('/usr/lib/pkgconfig') + output_dir('/usr/share/pkgconfig') + +# import pkgutil +# for f in pkgutil.iter_modules(): +# try: +# path = f[0].path +# if path.find('site-packages') < 0: +# continue +# except AttributeError: +# continue +# if not(f[1].startswith('_')): +# print(f, 'python3dist({})'.format(f[1])) + diff --git a/tools/resolve-files.py b/tools/resolve-files.py new file mode 100755 index 0000000..de5631f --- /dev/null +++ b/tools/resolve-files.py @@ -0,0 +1,531 @@ +#!/usr/bin/python3 + +from functools import cmp_to_key +import gzip +import hashlib +import os +import pickle +import re +import rpm +import sys +import xml.etree.ElementTree as ET +import xml.sax + +XDG_CACHE_HOME = os.environ.get("XDG_CACHE_HOME") or os.path.expanduser("~/.cache") + +# This needs to be in sync with fedmod +REPOS = [ + "f28-packages" +] + +ignore = set() +rename = dict() + +bin_ignore = [ + # A bunch of binaries built as part of nss. A few of these are + # in /usr/lib64/nss/unsupported-tools/ as part of nss-tools, the rest are not considered + # worth installing at all (test utilities, etc.) + 'addbuiltin', 'atob', 'baddbdir', 'bltest', 'btoa', 'certcgi', 'chktest', 'conflict', + 'crmftest', 'dbtest', 'derdump', 'dertimetest', 'digest', 'ecperf', 'encodeinttest', + 'fipstest', 'httpserv', 'listsuites', 'makepqg', 'mangle', 'multinit', 'nonspr10', + 'ocspclnt', 'ocspresp', 'oidcalc', 'p7content', 'p7env', 'p7sign', 'p7verify', + 'pk11gcmtest', 'pk11mode', 'pk1sign', 'pkix-errcodes', 'pp', 'pwdecrypt', 'remtest', + 'rsaperf', 'sdrtest', 'secmodtest', 'selfserv', 'shlibsign', 'signtool', 'strsclnt', + 'symkeyutil', 'tstclnt', 'vfychain', 'vfyserv', + + # Script added into nss by openembedded + 'signlibs.sh', + + # /usr/share/doc/aspell/aspell-import in Fedora + 'aspell-import', + + # Removed in perl-5.27 + 'c2ph', + + # Removed - https://lists.fedorahosted.org/archives/list/elfutils-devel@lists.fedorahosted.org/thread/22LIIMXI6EDGCOIO6QFSBUO2KHEXIGSJ/ + 'eu-ld', + + # compatibility perl script in zenity for something quite old, not packaged in fedora + 'gdialog', + + # An openembedded thing + # "Tool that installs the GNU config.guess / config.sub into a directory tree" + 'gnu-configize', + + # GPG test program (https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=tree;f=tests) + 'gpgscm', + + # An implementation of tar for cross-platform compatibility, disabled in gnupg2.spec + 'gpgtar', + + # Removed from gtk-doc + # https://git.gnome.org/browse/gtk-doc/commit/?id=46df4354abed5724697fd5e39630c5bbc6637cc4 + 'gtkdoc-mktmpl', + + # Versioned python-3.5 binaries + 'idle3.5', 'pydoc3.5', 'python3.5', 'python3.5-config', 'python3.5m', 'python3.5m-config', '2to3-3.5', + + # installed in openembedded with a coreutils suffix along with the more normal version + 'kill.coreutils', 'uptime.coreutils', + + # nettle utilities not currently packaged in fedora + # (https://src.fedoraproject.org/rpms/nettle/c/2ec204e2de17006b566c9ff7d90ec65ca1680ed5?branch=master) + 'nettle-hash', 'nettle-lfib-stream', 'nettle-pbkdf2', 'pkcs1-conv', 'sexp-conv', + + # Not built by default as of util-linux-2.29 + '/usr/bin/pg', + + # These are installed as -64 in Fedora, we just ignore them because they will be + # pulled in by the corresponding library + 'gdk-pixbuf-query-loaders', 'gtk-query-immodules-2.0', + 'gio-querymodules', 'gtk-query-immodules-3.0', + + # Removed in krb5-1.13 (https://web.mit.edu/kerberos/krb5-1.13/README-1.13.5.txt) + 'krb5-send-pr', + + # Removed in util-linux-2.30' + 'tailf', + + # OpenEmbedded uses Debian's ca-certificates, Fedora is different + 'update-ca-certificates', + + ######################################################################### + # In the freedesktop runtime for some reason, doesn't seem useful + 'bsdcat', + + # Same as 'openssl rehash', but as a perl script (openssl-perl) + 'c_rehash', + + # From pulseaudio, wrapper script to start a pulseaudio server as if it was ESD (pulseaudio-esound-compat) + 'esdcompat', + + # Just need the library (gcab) + 'gcab', + + # Probably not useful in the runtime or the SDK (gstreamer-plugins-base-tools) + 'gst-device-monitor-1.0', 'gst-discoverer-1.0', 'gst-play-1.0', + + # Python utilities (python2-tools) + 'idle', 'smtpd.py', + + # Python3 utilities (python3-tools) + 'idle3', '2to3', + + # A binary from cups, we just need the libraries (cups-libs) + 'ipptool', + + # Minimal profiler (glibc-utils) + 'pcprofiledump', + + # (pcre-tools) + 'pcre2grep', 'pcre2test', + + # Random test program from libproxy (libproxy-bin) + 'proxy', + + # Tools from libvpx (libvpx-utils) + 'vpxdec', 'vpxenc', +] +ignore.update('/usr/bin/' + x for x in bin_ignore) + +bin_rename = { + # lcms2 compiled with --program-suffix=2 in Fedora, even though there are no actual + # conflicts between lcms and lcms2 - jpegicc was renamed to jpgicc, etc. + 'jpgicc': 'jpgicc2', + 'linkicc': 'linkicc2', + 'psicc': 'psicc2', + 'tificc': 'tificc2', + 'transicc': 'transicc2', +} +rename.update({ '/usr/bin/' + k: '/usr/bin/' + v for k, v in bin_rename.items() }) + +lib_ignore = [ + # Symlink created in freedesktop.org flatpak runtime, not standard + 'libEGL_indirect.so.0', + + # Removed in gpgme-1.9.0 + 'libgpgme-pthread.so.11', + + # Not enabled in fedora (consider fixing) + 'libharfbuzz-gobject.so.0', + + # Part of glibc + 'libssp.so.0', +] +ignore.update('/usr/lib64/' + x for x in lib_ignore) + +fonts_ignore = { + # Added in 2.36 + 'dejavu/DejaVuMathTeXGyre.ttf', +} +ignore.update('/usr/share/fonts/' + x for x in fonts_ignore) + +lib_rename = { + # Newer in Fedora + 'libhunspell-1.3.so.0': 'libhunspell-1.5.so.0', + 'libwebp.so.6': 'libwebp.so.7', + 'libwebpmux.so.2': 'libwebpmux.so.3', + 'libpcre2-posix.so.1': 'libpcre2-posix.so.2', + 'libvpx.so.3': 'libvpx.so.4', + 'libkadm5clnt_mit.so.9': 'libkadm5clnt_mit.so.11', + 'libkadm5srv_mit.so.9': 'libkadm5srv_mit.so.11', + + # Newer in Flatpak runtime + 'libprocps.so.6': 'libprocps.so.4', # procps-3.10 vs. procps-3.12 + 'libgif.so.7': 'libgif.so.4', # giflib 4 vs giflib-5 - https://bugzilla.redhat.com/show_bug.cgi?id=822844 + + # Fedora arch-handling + 'ld-linux.so.2': 'ld-linux-x86-64.so.2', +} +rename.update({ '/usr/lib64/' + k: '/usr/lib64/' + v for k, v in lib_rename.items() }) + +include_ignore = { + # https://git.gnome.org/browse/at-spi2-core/commit/?id=1eb223bb48464d707290ef540581e9763b0ceee8 + 'at-spi-2.0/atspi/atspi-gmain.c', + + # Removed in 7.55 https://github.com/curl/curl/commit/73a2fcea0b4adea6ba342cd7ed1149782c214ae3 + 'curl/curlbuild-64.h', 'curl/curlbuild.h', 'curl/curlrules.h', + + # Not enabled on Fedora + 'harfbuzz/hb-gobject-enums.h', + 'harfbuzz/hb-gobject-structs.h', + 'harfbuzz/hb-gobject.h', + + # https://github.com/hunspell/hunspell/commit/99675e791d123cbe1be914b1a49dd83062134301 + 'hunspell/affentry.hxx', 'hunspell/affixmgr.hxx', 'hunspell/baseaffix.hxx', 'hunspell/dictmgr.hxx', + 'hunspell/filemgr.hxx','hunspell/hashmgr.hxx','hunspell/hunzip.hxx','hunspell/langnum.hxx', + 'hunspell/phonet.hxx','hunspell/replist.hxx','hunspell/suggestmgr.hxx', + + # Removed in openssl-1.1 + 'openssl/des_old.h', 'openssl/dso.h', 'openssl/krb5_asn.h', 'openssl/kssl.h', 'openssl/pqueue.h', + 'openssl/ssl23.h', 'openssl/ui_compat.h', +} +ignore.update('/usr/include/' + x for x in include_ignore) + +include_rename = { + 'assuan.h': 'libassuan2/assuan.h', + 'nss3/nssck.api': 'nss3/templates/nssck.api', +} +rename.update({ '/usr/include/' + k: '/usr/include/' + v for k, v in include_rename.items() }) + +nspr_include = [ + 'nspr.h', 'plarena.h', 'plarenas.h', 'plbase64.h', 'plerror.h', 'plgetopt.h', 'plhash.h', + 'plstr.h', 'pratom.h', 'prbit.h', 'prclist.h', 'prcmon.h', 'prcountr.h', 'prcpucfg.h', + 'prcvar.h', 'prdtoa.h', 'prenv.h', 'prerr.h', 'prerror.h', 'prinet.h', 'prinit.h', + 'prinrval.h', 'prio.h', 'pripcsem.h', 'private/pprio.h', 'private/pprthred.h', 'private/prpriv.h', + 'prlink.h', 'prlock.h', 'prlog.h', 'prlong.h', 'prmem.h', 'prmon.h', 'prmwait.h', 'prnetdb.h', + 'prolock.h', 'prpdce.h', 'prprf.h', 'prproces.h', 'prrng.h', 'prrwlock.h', 'prshm.h', 'prshma.h', + 'prsystem.h', 'prthread.h', 'prtime.h', 'prtpool.h', 'prtrace.h', 'prtypes.h', 'prvrsion.h', + 'prwin16.h', 'stropts.h', 'obsolete/pralarm.h', 'obsolete/probslet.h', 'obsolete/protypes.h', 'obsolete/prsem.h' +] +rename.update({ '/usr/include/' + x: '/usr/include/nspr4/' + x for x in nspr_include }) + +pc_ignore = { + # Not enabled on Fedora + 'harfbuzz-gobject.pc', + + # https://github.com/ostroproject/ostro-os/blob/master/meta/recipes-support/libassuan/libassuan/libassuan-add-pkgconfig-support.patch + 'libassuan.pc', + + # http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-support/libgpg-error/libgpg-error/pkgconfig.patch + 'gpg-error.pc', + + # http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-support/libgcrypt/files/0001-Add-and-use-pkg-config-for-libgcrypt-instead-of-conf.patch + 'libgcrypt.pc', +} +ignore.update('/usr/lib64/pkgconfig/' + x for x in pc_ignore) + +pc_rename = { + 'python-3.5.pc': 'python-3.6.pc', + 'python-3.5m.pc': 'python-3.6m.pc', +} +rename.update({ '/usr/lib64/pkgconfig/' + k: '/usr/lib64/pkgconfig/' + v for k, v in pc_rename.items() }) +rename.update({ '/usr/share/pkgconfig/' + k: '/usr/share/pkgconfig/' + v for k, v in pc_rename.items() }) + +ignore_patterns = [ + # Flatpak runtime has a versioned gawk-4.1.3 + r'/usr/bin/gawk-.*', + + # Architecture specific aliases for gcc, binutils, etc + r'^/usr/bin/x86_64-unknown-linux-.*', + + # From NSPR, intentionally not installed on Fedora + r'/usr/include/md/.*', + + # .install files litter the include directories of openembedded + r'.*/\.install$' +] +ignore_compiled = [re.compile(x) for x in ignore_patterns] + +rename_patterns = [ + (r'^/usr/include/c\+\+/6.2.0/(.*)', r'/usr/include/c++/7/\1'), + (r'^/usr/include/c\+\+/7/x86_64-unknown-linux/(.*)', r'/usr/include/c++/7/x86_64-redhat-linux/\1'), + (r'^/usr/include/python3.5m/(.*)', r'/usr/include/python3.6m/\1'), + (r'^/usr/lib64/pkgconfig/(.*proto.pc)', r'/usr/share/pkgconfig/\1'), + (r'^/usr/share/fonts/liberation-fonts/(.*)', r'/usr/share/fonts/liberation/\1'), +] +rename_compiled = [(re.compile(a), b) for a, b in rename_patterns] + +platform_package_ignore_patterns = [ + "^.*-devel$", + "^libappstream-glib-builder$", # may not need in the sdk either + "^gtk-doc$", + "^icu$", # may not need in the sdk either + '^llvm$', + '^sqlite$', +] +platform_package_ignore_compiled = [re.compile(p) for p in platform_package_ignore_patterns] + + +# We need to look up a lot of file dependencies. dnf/libsolv is not fast at doing +# this (at least when we look up files one-by-one) so we create a hash table that +# maps from *all* files in the distribution to the "best" package that provides +# the file. To further speed this up, we pickle the result and store it, and only +# recreate it when the DNF metadata changes. We gzip the pickle to save space +# (70M instead of 700M), this slows things down by about 2 seconds. +# + +def package_cmp(p1, p2): + n1, e1, v1, r1, a1 = p1 + n2, e2, v2, r2, a2 = p2 + + if a1 == 'i686' and a2 != 'i686': + return 1 + if a1 != 'i686' and a2 == 'i686': + return -1 + + if n1.startswith('compat-') and not n2.startswith('compat-'): + return 1 + elif n2.startswith('compat-') and not n1.startswith('compat-'): + return -1 + + if n1 < n2: + return -1 + elif n1 > n2: + return 1 + + if e1 is None: + e1 = '0' + if e2 is None: + e2 = '0' + + return - rpm.labelCompare((e1, v1, r1), (e2, v2, r2)) + +class FilesMapHandler(xml.sax.handler.ContentHandler): + def __init__(self, files_map): + self.files_map = files_map + self.name = None + self.arch = None + self.epoch = None + self.version = None + self.release = None + self.file = None + + def startElement(self, name, attrs): + if name == 'package': + self.name = attrs['name'] + self.arch = attrs['arch'] + elif name == 'version': + if self.name is not None: + self.epoch = attrs['epoch'] + self.version = attrs['ver'] + self.release = attrs['rel'] + elif name == 'file': + self.file = '' + + def endElement(self, name): + if name == 'package': + self.name = None + elif name == 'file': + package = (self.name, self.epoch, self.version, self.release, self.arch) + old = self.files_map.get(self.file) + if old is None or package_cmp(package, old) < 0: + self.files_map[self.file] = package + + self.file = None + + def characters(self, content): + if self.file is not None: + self.file += content + +def scan_filelists(filelists_path, files_map): + handler = FilesMapHandler(files_map) + with gzip.open(filelists_path, 'rb') as f: + xml.sax.parse(f, handler) + + +def make_files_map(repo_info): + files_map = {} + + for repo in REPOS: + start("Scanning files for {}".format(repo)) + repo_dir, repomd_contents = repo_info[repo] + root = ET.fromstring(repomd_contents) + + ns = {'repo': 'http://linux.duke.edu/metadata/repo'} + filelists_location = root.find("./repo:data[@type='filelists']/repo:location", ns).attrib['href'] + filelists_path = os.path.join(repo_dir, filelists_location) + if os.path.commonprefix([filelists_path, repo_dir]) != repo_dir: + done() + error("{}: filelists directory is outside of repository".format(repo_dir)) + + scan_filelists(filelists_path, files_map) + done() + + start("Finalizing files map") + for k in files_map: + files_map[k] = files_map[k][0] + done() + + return files_map + + +def get_files_map(): + hash_text = '' + repos_dir = os.path.join(XDG_CACHE_HOME, "fedmod/repos") + repo_info = {} + for repo in REPOS: + repo_dir = os.path.join(repos_dir, repo, 'x86_64') + repomd_path = os.path.join(repo_dir, 'repodata/repomd.xml') + try: + with open(repomd_path, 'rb') as f: + repomd_contents = f.read() + except (OSError, IOError): + print("Cannot read {}, try 'fedmod fetch-metadata'".format(repomd_path), file=sys.stderr) + sys.exit(1) + + repo_info[repo] = (repo_dir, repomd_contents) + hash_text += '{}|{}\n'.format(repo, hashlib.sha256(repomd_contents).hexdigest()) + + repo_hash = hashlib.sha256(hash_text.encode("UTF-8")).hexdigest() + + files_map_path = os.path.join(XDG_CACHE_HOME, "fedmod/flatpak-runtime-files-map.gz") + + try: + with gzip.open(files_map_path, 'rb') as f: + old_repo_hash = f.read(64).decode('utf-8') + if old_repo_hash == repo_hash: + start("Reading cached file map") + files_map = pickle.load(f) + done() + + return files_map + except FileNotFoundError: + pass + + files_map = make_files_map(repo_info) + + start("Writing file map to cache") + with gzip.open(files_map_path, 'wb') as f: + f.write(repo_hash.encode('utf-8')) + pickle.dump(files_map, f) + done() + + return files_map + +if len(sys.argv) != 2: + print("Usage: resolve-files.py INFILE", file=sys.stderr) + sys.exit(1) + +inpath = sys.argv[1] +if not inpath.endswith('.files'): + print("INFILE must have .files suffix", file=sys.stderr) + sys.exit(1) + +base_path = inpath[:-len('.files')] +is_platform = "-Platform" in base_path +is_sdk = "-Sdk" in base_path + +def warn(msg): + print("{}: \033[31m{}\033[39m".format(inpath, msg), file=sys.stderr) + +def error(msg): + print("{}: \033[31m{}\033[39m".format(inpath, msg), file=sys.stderr) + sys.exit(1) + +def start(msg): + print("{}: \033[90m{} ... \033[39m".format(inpath, msg), file=sys.stderr, end="") + sys.stderr.flush() + +def done(): + print("\033[90mdone\033[39m", file=sys.stderr) + +start("Reading file list") + +to_resolve = [] +with open(inpath) as f: + for l in f: + r = l.rstrip() + if r.startswith('/usr/lib/'): + r = '/usr/lib64/' + r[len('/usr/lib/'):] + to_resolve.append(r) + +to_resolve.sort() + +done() + +files_map = get_files_map() +found_packages = set() + +start("Resolving files to packages") + +matched_file = open(base_path + '.matched', 'w') +unmatched_file = open(base_path + '.unmatched', 'w') +unmatched_count = 0 + +for r in to_resolve: + if r in ignore: + continue + + skip = False + for p in ignore_compiled: + if p.match(r) is not None: + skip = True + if skip: + continue + + if r in rename: + r = rename[r] + + for p, replacement in rename_compiled: + if p.match(r) is not None: + r = p.sub(replacement, r) + + if r.startswith('/usr/lib64/'): + search = [r, '/lib64/' + os.path.basename(r)] + elif r.startswith('/usr/bin/'): + search = [r, '/bin/' + os.path.basename(r), '/usr/sbin/' + os.path.basename(r), '/sbin/' + os.path.basename(r)] + else: + search = [r] + + if r.startswith('/usr/lib64/libLLVM'): + # freedesktop SDK builds "split" LLVM libraries + found_packages.add('llvm-libs') + continue + + for s in search: + providing = files_map.get(s, None) + if providing is not None: + break + + if providing is None: + print(r, file=unmatched_file) + unmatched_count += 1 + else: + if is_platform and any(p.match(providing) is not None for p in platform_package_ignore_compiled): + continue + + found_packages.add(providing) + print("{}: {}".format(r, providing), file=matched_file) + +unmatched_file.close() +matched_file.close() + +with open(base_path + '.packages', 'w') as f: + for p in sorted(found_packages): + print(p, file=f) + +done() + +if unmatched_count > 0: + warn("{} unmatched files, see {}".format(unmatched_count, base_path + ".unmatched")) diff --git a/tools/yaml_utils.py b/tools/yaml_utils.py new file mode 100644 index 0000000..1272836 --- /dev/null +++ b/tools/yaml_utils.py @@ -0,0 +1,25 @@ +import yaml +# https://stackoverflow.com/questions/5121931/in-python-how-can-you-load-yaml-mappings-as-ordereddicts + +from collections import OrderedDict + +def ordered_load(stream, Loader=yaml.Loader, object_pairs_hook=OrderedDict): + class OrderedLoader(Loader): + pass + def construct_mapping(loader, node): + loader.flatten_mapping(node) + return object_pairs_hook(loader.construct_pairs(node)) + OrderedLoader.add_constructor( + yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, + construct_mapping) + return yaml.load(stream, OrderedLoader) + +def ordered_dump(data, stream=None, Dumper=yaml.SafeDumper, **kwds): + class OrderedDumper(Dumper): + pass + def _dict_representer(dumper, data): + return dumper.represent_mapping( + yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, + data.items()) + OrderedDumper.add_representer(OrderedDict, _dict_representer) + return yaml.dump(data, stream, OrderedDumper, **kwds) diff --git a/yaml_utils.py b/yaml_utils.py deleted file mode 100644 index 1272836..0000000 --- a/yaml_utils.py +++ /dev/null @@ -1,25 +0,0 @@ -import yaml -# https://stackoverflow.com/questions/5121931/in-python-how-can-you-load-yaml-mappings-as-ordereddicts - -from collections import OrderedDict - -def ordered_load(stream, Loader=yaml.Loader, object_pairs_hook=OrderedDict): - class OrderedLoader(Loader): - pass - def construct_mapping(loader, node): - loader.flatten_mapping(node) - return object_pairs_hook(loader.construct_pairs(node)) - OrderedLoader.add_constructor( - yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, - construct_mapping) - return yaml.load(stream, OrderedLoader) - -def ordered_dump(data, stream=None, Dumper=yaml.SafeDumper, **kwds): - class OrderedDumper(Dumper): - pass - def _dict_representer(dumper, data): - return dumper.represent_mapping( - yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, - data.items()) - OrderedDumper.add_representer(OrderedDict, _dict_representer) - return yaml.dump(data, stream, OrderedDumper, **kwds)