JustinTimperio / pacback

Advanced Version Control for Arch Linux
MIT License
148 stars 4 forks source link

Pacback unable to find dhclient package (due to funky version string?) #35

Open Humandoodlebug opened 2 years ago

Humandoodlebug commented 2 years ago

Describe the Bug:\ Pacback can't find the package for dhclient-4.4.2.P1-4 in the cache when creating a full restore point. For context, this is an official archlinux package in the extra repository. I'm not familiar with the code, but I'd guess it's something to do with the P in the package version. I've included example invocations of pacback below first without, then with dhclient installed. Let me know if you need anything else :)

Output of Command

Package (2) New Version Net Change Download Size

core/run-parts 5.5-1 0.04 MiB 0.03 MiB extra/dhclient 4.4.2.P1-4 2.85 MiB 1.08 MiB

Total Download Size: 1.11 MiB Total Installed Size: 2.90 MiB

:: Proceed with installation? [Y/n] :: Retrieving packages... dhclient-4.4.2.P1-4-x86_64 downloading... run-parts-5.5-1-x86_64 downloading... checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing run-parts... installing dhclient... :: Running post-transaction hooks... (1/2) Reloading system manager configuration... Skipped: Current root is not booted. (2/2) Arming ConditionNeedsUpdate... [root@44ce9fbb04c7 pacback]# pacback -f -c 2 Building Full Restore Point 02...

====================================== The Following Packages Were NOT Found!

dhclient-4.4.2.P1-4

Do You Still Want to Continue? (y/n):n Aborting Creation! [root@44ce9fbb04c7 pacback]#

- Log output in /var/log/pacback.log

======================== 2022/02/24 ======================== [15:46:05.132052] session.lock(): Started Logging Session [15:46:05.132083] session.lock(): Passed Root Check [15:46:05.132107] session.lock(): Started Active Session [15:46:05.132351] create.restore_point(01): Started Restore Point Creation... [15:46:06.791128] utils.remove_id(rp01): Removal Complete [15:46:06.791195] create.restore_point(01): All Checks Passed! Handing Off to create.main() [15:46:06.791236] create.main(rp01): Building ID:01 As Full Restore Point [15:46:06.797770] utils.scan_caches(): Started Scaning Directories for Packages... [15:46:06.798506] utils.scan_caches(): Searched ALL Package Cache Locations [15:46:06.798545] utils.scan_caches(): Returned 159 Cached Packages [15:46:06.798576] utils.search_cache(159): Started Search for Matching Versions... [15:46:06.811879] utils.search_cache(159): Found 159 OUT OF 159 Packages [15:46:06.819559] create.main(rp01): HardLinked 159 Packages [15:46:06.826558] create.main(rp01): Generated Meta Data File [15:46:06.826712] create.main(rp01): Generated Meta Data Checksum [15:46:06.826742] create.main(rp01): Main Build Complete of ID:01 As Full Restore Point [15:46:06.826782] create.restore_point(01): Restore Point Creation Complete! [15:46:06.826829] session.unlock(): Ended Active Session [15:46:06.826857] session.unlock(): Ended Logging Session

======================== 2022/02/24 ======================== [15:46:32.966923] session.lock(): Started Logging Session [15:46:32.966955] session.lock(): Passed Root Check [15:46:32.966979] session.lock(): Started Active Session [15:46:32.967238] create.restore_point(02): Started Restore Point Creation... [15:46:32.967304] create.restore_point(02): All Checks Passed! Handing Off to create.main() [15:46:32.967350] create.main(rp02): Building ID:02 As Full Restore Point [15:46:32.974560] utils.scan_caches(): Started Scaning Directories for Packages... [15:46:32.975591] utils.scan_caches(): Searched ALL Package Cache Locations [15:46:32.976599] utils.scan_caches(): Returned 161 Unique Cache Packages [15:46:32.976650] utils.search_cache(161): Started Search for Matching Versions... [15:46:32.990439] utils.search_cache(161): Found 160 OUT OF 161 Packages [15:46:32.991069] create.main(rp02): Not All Packages Where Found! [15:46:39.972499] create.main(rp02): ABORT: User Aborted Due to Missing Pkgs [15:46:39.972614] session.unlock(): Ended Active Session [15:46:39.972668] session.unlock(): Ended Logging Session

- Config file in /etc/pacback.conf

Pacback Config File

Version 2.0.0

Mandatory Settings

Number Of Seconds Before The Snapshot Lock Expires

MUST be an INT

hook_cooldown = 300

Max Number Of Snapshots To Keep

MUST be an INT

max_ss = 25

Let The User Schedule a Reboot if Needed.

If False Pacback Will Only Notify You

MUST be True or False

reboot = True

Optional Settings

Number Of Minutes In Future To Schedule Reboot

Only Runs After The Kernel Has Changed

MUST be an INT

reboot_offset = 5

Number of Old Cached Versions To Keep

When Running a Pacback Cache Clean

MUST be an INT

keep_versions = 3

Number Of Days Before an RP is Flagged Old

MUST be an INT

old_rp = 180



**Machine (please fill in the following information):**
 - Kernel Version: 5.16.10-arch1-1
 - Python Version: Python 3.10.2
 - Python Rich Version: python-rich 11.2.0-1
 - Python Requests Version: python-requests 2.27.1-1
 - Pacback Version: 2.1.0
 - Install Type: pacback (non-git)

**To Reproduce**
Steps to reproduce the behavior:
1. Install dhclient (`# pacman -S dhclient`)
2. Attempt to create a full restore point (`# pacback -f -c 1`)
3. See warning `The Following Packages Were NOT Found!...`
JustinTimperio commented 2 years ago

Hi @Humandoodlebug,

I was wondering how long it would take for something like this to break. This has to do with the way the search works for the package versions, as a system contains multiple cached versions typically. There is a spec that all packages are meant to follow and this naming convention falls outside that I believe. I have dealt with this on AUR packages but never one in the standard repos.

I'll look into fixing this but I can't promise that it will get done quickly as i think this is a pretty rare naming edge case.

Humandoodlebug commented 2 years ago

Thanks @JustinTimperio, no rush! I'd poke the package maintainer, but by the looks of it they're deriving the version from upstream so might be reluctant to change it.