Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ipp-usb for openSUSE:Factory checked in at 2026-05-30 22:56:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ipp-usb (Old) and /work/SRC/openSUSE:Factory/.ipp-usb.new.1937 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ipp-usb" Sat May 30 22:56:40 2026 rev:5 rq:1355951 version:0.9.33 Changes: -------- --- /work/SRC/openSUSE:Factory/ipp-usb/ipp-usb.changes 2026-04-15 16:14:36.943774492 +0200 +++ /work/SRC/openSUSE:Factory/.ipp-usb.new.1937/ipp-usb.changes 2026-05-30 22:58:47.945907132 +0200 @@ -1,0 +2,10 @@ +Fri May 29 19:13:17 UTC 2026 - Richard Rahl <[email protected]> + +- Update to version 0.9.33: + + Added quirks for HP LaserJet M406 + + Changed priority order of IPP attributes for obtaining DNS-SD name +- Update to version 0.9.32: + + Use ctags instead of the gotags + + Workaround for "Pantum BP5100DN series" initialization failure + +------------------------------------------------------------------- Old: ---- ipp-usb-0.9.31.obscpio New: ---- ipp-usb-0.9.33.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ipp-usb.spec ++++++ --- /var/tmp/diff_new_pack.Xq4cky/_old 2026-05-30 22:58:49.849985257 +0200 +++ /var/tmp/diff_new_pack.Xq4cky/_new 2026-05-30 22:58:49.849985257 +0200 @@ -18,7 +18,7 @@ %define import_path github.com/OpenPrinting/ipp-usb Name: ipp-usb -Version: 0.9.31 +Version: 0.9.33 Release: 0 Summary: HTTP reverse proxy, backed by IPP-over-USB connection to device License: BSD-2-Clause ++++++ _service ++++++ --- /var/tmp/diff_new_pack.Xq4cky/_old 2026-05-30 22:58:49.885986734 +0200 +++ /var/tmp/diff_new_pack.Xq4cky/_new 2026-05-30 22:58:49.889986898 +0200 @@ -3,7 +3,7 @@ <service name="obs_scm" mode="manual"> <param name="url">https://github.com/OpenPrinting/ipp-usb.git</param> <param name="scm">git</param> - <param name="revision">refs/tags/0.9.31</param> + <param name="revision">refs/tags/0.9.33</param> <param name="versionformat">@PARENT_TAG@</param> </service> <service name="tar" mode="buildtime" /> ++++++ ipp-usb-0.9.31.obscpio -> ipp-usb-0.9.33.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipp-usb-0.9.31/Makefile new/ipp-usb-0.9.33/Makefile --- old/ipp-usb-0.9.31/Makefile 2026-02-12 17:00:23.000000000 +0100 +++ new/ipp-usb-0.9.33/Makefile 2026-05-06 21:26:59.000000000 +0200 @@ -9,7 +9,7 @@ endif all: - -gotags -R . > tags + -ctags -R go build -ldflags "-s -w" -tags nethttpomithttp2 -mod=vendor man: $(MANPAGE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipp-usb-0.9.31/README.md new/ipp-usb-0.9.33/README.md --- old/ipp-usb-0.9.31/README.md 2026-02-12 17:00:23.000000000 +0100 +++ new/ipp-usb-0.9.33/README.md 2026-05-06 21:26:59.000000000 +0200 @@ -235,37 +235,37 @@ sudo snap install docker ``` -#### **Running the `ipp-usb` Container with Persistent Storage** +#### **Running the `ipp-usb` Container with Persistent Storage** -To run the `ipp-usb` container while ensuring that its state persists across restarts, follow these steps. +To run the `ipp-usb` container while ensuring that its state persists across restarts, follow these steps. -#### **1. Pull the `ipp-usb` Docker Image** -The latest image is available on the GitHub Container Registry. Pull it using: +#### **1. Pull the `ipp-usb` Docker Image** +The latest image is available on the GitHub Container Registry. Pull it using: ```sh sudo docker pull ghcr.io/openprinting/ipp-usb:latest ``` -#### **2. Create Persistent Storage Volumes** -To ensure that configuration settings and printer state persist across container restarts, create two Docker volumes: +#### **2. Create Persistent Storage Volumes** +To ensure that configuration settings and printer state persist across container restarts, create two Docker volumes: ```sh sudo docker volume create ipp-usb-state sudo docker volume create ipp-usb-conf -``` - -These volumes store: +``` -- **`ipp-usb-state` (`/var/ipp-usb/`)** - - Device state files (`/var/ipp-usb/dev/`) – Ensures stable TCP port allocation and DNS-SD name resolution. - - Lock files (`/var/ipp-usb/lock/`) – Prevents multiple instances from running simultaneously. - - Log files (`/var/log/ipp-usb/`) – Can be optionally mounted if needed for debugging. +These volumes store: -- **`ipp-usb-conf` (`/etc/ipp-usb/`)** - - Configuration file (`/etc/ipp-usb/ipp-usb.conf`) – Stores user-defined settings. - - Quirks files (`/etc/ipp-usb/quirks/`) – Contains printer-specific workarounds. +- **`ipp-usb-state` (`/var/ipp-usb/`)** + - Device state files (`/var/ipp-usb/dev/`) – Ensures stable TCP port allocation and DNS-SD name resolution. + - Lock files (`/var/ipp-usb/lock/`) – Prevents multiple instances from running simultaneously. + - Log files (`/var/log/ipp-usb/`) – Can be optionally mounted if needed for debugging. + +- **`ipp-usb-conf` (`/etc/ipp-usb/`)** + - Configuration file (`/etc/ipp-usb/ipp-usb.conf`) – Stores user-defined settings. + - Quirks files (`/etc/ipp-usb/quirks/`) – Contains printer-specific workarounds. -#### **3. Run the Container with Required Mounts** -Start the container with appropriate options: +#### **3. Run the Container with Required Mounts** +Start the container with appropriate options: ```sh sudo docker run -d --network host \ @@ -277,11 +277,11 @@ ghcr.io/openprinting/ipp-usb:latest ``` -- **`--network host`** → Uses the host’s network to enable proper IPP-over-USB and Avahi service discovery. -- **`-v /dev/bus/usb:/dev/bus/usb:ro`** → Grants read-only access to USB devices for printer detection. -- **`-v ipp-usb-state:/var/ipp-usb`** → Mounts the persistent storage volume for printer state, lock files, and logs. -- **`-v ipp-usb-conf:/etc/ipp-usb`** → Ensures configuration and quirks files persist across reboots. -- **`--device-cgroup-rule='c 189:* rmw'`** → Grants read, write, and management permissions for USB printers inside the container. +- **`--network host`** → Uses the host’s network to enable proper IPP-over-USB and Avahi service discovery. +- **`-v /dev/bus/usb:/dev/bus/usb:ro`** → Grants read-only access to USB devices for printer detection. +- **`-v ipp-usb-state:/var/ipp-usb`** → Mounts the persistent storage volume for printer state, lock files, and logs. +- **`-v ipp-usb-conf:/etc/ipp-usb`** → Ensures configuration and quirks files persist across reboots. +- **`--device-cgroup-rule='c 189:* rmw'`** → Grants read, write, and management permissions for USB printers inside the container. ### Building and Running `ipp-usb` Locally @@ -298,43 +298,43 @@ sudo snap install rockcraft --classic ``` -**To Build and Run the `ipp-usb` Rock Image Locally, follow these steps** +**To Build and Run the `ipp-usb` Rock Image Locally, follow these steps** -#### **1. Build the `ipp-usb` Rock Image** -The first step is to build the Rock image from the `rockcraft.yaml` configuration file. This image will include all required dependencies and configurations for `ipp-usb`. +#### **1. Build the `ipp-usb` Rock Image** +The first step is to build the Rock image from the `rockcraft.yaml` configuration file. This image will include all required dependencies and configurations for `ipp-usb`. -Navigate to the directory containing `rockcraft.yaml` and run: +Navigate to the directory containing `rockcraft.yaml` and run: ```sh rockcraft pack -v -``` +``` -#### **2. Convert the Rock Image to a Docker Image** -Once the `.rock` file is built, convert it into a Docker image using: +#### **2. Convert the Rock Image to a Docker Image** +Once the `.rock` file is built, convert it into a Docker image using: ```sh sudo rockcraft.skopeo --insecure-policy copy oci-archive:<rock_image> docker-daemon:ipp-usb:latest -``` +``` -#### **3. Create Persistent Storage Volumes** -To ensure that configuration settings and printer state persist across container restarts, create two Docker volumes: +#### **3. Create Persistent Storage Volumes** +To ensure that configuration settings and printer state persist across container restarts, create two Docker volumes: ```sh sudo docker volume create ipp-usb-state sudo docker volume create ipp-usb-conf -``` - -These volumes store: +``` -- **`ipp-usb-state` (`/var/ipp-usb/`)** - - Device state files (`/var/ipp-usb/dev/`) – Ensures stable TCP port allocation and DNS-SD name resolution. - - Lock files (`/var/ipp-usb/lock/`) – Prevents multiple instances from running simultaneously. - - Log files (`/var/log/ipp-usb/`) – Can be optionally mounted if needed for debugging. +These volumes store: -- **`ipp-usb-conf` (`/etc/ipp-usb/`)** - - Configuration file (`/etc/ipp-usb/ipp-usb.conf`) – Stores user-defined settings. - - Quirks files (`/etc/ipp-usb/quirks/`) – Contains printer-specific workarounds. +- **`ipp-usb-state` (`/var/ipp-usb/`)** + - Device state files (`/var/ipp-usb/dev/`) – Ensures stable TCP port allocation and DNS-SD name resolution. + - Lock files (`/var/ipp-usb/lock/`) – Prevents multiple instances from running simultaneously. + - Log files (`/var/log/ipp-usb/`) – Can be optionally mounted if needed for debugging. + +- **`ipp-usb-conf` (`/etc/ipp-usb/`)** + - Configuration file (`/etc/ipp-usb/ipp-usb.conf`) – Stores user-defined settings. + - Quirks files (`/etc/ipp-usb/quirks/`) – Contains printer-specific workarounds. -#### **4. Run the Container with Required Mounts** -Start the container with appropriate options: +#### **4. Run the Container with Required Mounts** +Start the container with appropriate options: ```sh sudo docker run -d --network host \ @@ -346,11 +346,11 @@ ipp-usb:latest ``` -- **`--network host`** → Uses the host’s network to enable proper IPP-over-USB and Avahi service discovery. -- **`-v /dev/bus/usb:/dev/bus/usb:ro`** → Grants read-only access to USB devices for printer detection. -- **`-v ipp-usb-state:/var/ipp-usb`** → Mounts the persistent storage volume for printer state, lock files, and logs. -- **`-v ipp-usb-conf:/etc/ipp-usb`** → Ensures configuration and quirks files persist across reboots. -- **`--device-cgroup-rule='c 189:* rmw'`** → Grants read, write, and management permissions for USB printers inside the container. +- **`--network host`** → Uses the host’s network to enable proper IPP-over-USB and Avahi service discovery. +- **`-v /dev/bus/usb:/dev/bus/usb:ro`** → Grants read-only access to USB devices for printer detection. +- **`-v ipp-usb-state:/var/ipp-usb`** → Mounts the persistent storage volume for printer state, lock files, and logs. +- **`-v ipp-usb-conf:/etc/ipp-usb`** → Ensures configuration and quirks files persist across reboots. +- **`--device-cgroup-rule='c 189:* rmw'`** → Grants read, write, and management permissions for USB printers inside the container. ### Accessing the Container Shell @@ -360,103 +360,103 @@ ``` This allows you to inspect logs, debug issues, or manually run commands inside the container. -### Configuration +### Configuration -The `ipp-usb` container uses a configuration file located at: +The `ipp-usb` container uses a configuration file located at: ```sh /etc/ipp-usb/ipp-usb.conf ``` -By default, the container uses the built-in configuration, which can be modified from inside the container. +By default, the container uses the built-in configuration, which can be modified from inside the container. -**Modifying the Configuration File Inside the Container** +**Modifying the Configuration File Inside the Container** -#### **1. Enter the Running Container** -Use the following command to access the container’s shell: +#### **1. Enter the Running Container** +Use the following command to access the container’s shell: ```sh sudo docker exec -it ipp-usb bash ``` -#### **2. Open the Configuration File in Nano** -Once inside the container, open the configuration file using `nano`: +#### **2. Open the Configuration File in Nano** +Once inside the container, open the configuration file using `nano`: ```sh nano /etc/ipp-usb/ipp-usb.conf ``` -#### **3. Edit and Save the File** -- Make the necessary changes to the file. -- Press `CTRL + X`, then `Y`, and hit `Enter` to save the changes. +#### **3. Edit and Save the File** +- Make the necessary changes to the file. +- Press `CTRL + X`, then `Y`, and hit `Enter` to save the changes. -#### **4. Restart the Container to Apply Changes** -Exit the container and restart it to apply the updated configuration: +#### **4. Restart the Container to Apply Changes** +Exit the container and restart it to apply the updated configuration: ```sh sudo docker restart ipp-usb ``` -### **Viewing Logs in the `ipp-usb` Container** +### **Viewing Logs in the `ipp-usb` Container** -The `ipp-usb` container logs important events and errors to `/var/log/ipp-usb/`. Logs are categorized into: +The `ipp-usb` container logs important events and errors to `/var/log/ipp-usb/`. Logs are categorized into: -- **Main log file:** `/var/log/ipp-usb/main.log` → Captures overall service activity, including errors and general events. -- **Per-device logs:** `/var/log/ipp-usb/<DEVICE>.log` → Individual log files for each detected printer, helpful for troubleshooting device-specific issues. +- **Main log file:** `/var/log/ipp-usb/main.log` → Captures overall service activity, including errors and general events. +- **Per-device logs:** `/var/log/ipp-usb/<DEVICE>.log` → Individual log files for each detected printer, helpful for troubleshooting device-specific issues. -#### **1. Using Docker Logs** +#### **1. Using Docker Logs** -To view real-time logs from the running container, use: +To view real-time logs from the running container, use: ```sh sudo docker logs -f ipp-usb -``` -- The `-f` flag follows the logs in real-time. -- Replace `ipp-usb` with your actual container name if different. +``` +- The `-f` flag follows the logs in real-time. +- Replace `ipp-usb` with your actual container name if different. -#### **2. Viewing Logs Inside the Container** +#### **2. Viewing Logs Inside the Container** -If you need to inspect logs manually, first enter the container shell: +If you need to inspect logs manually, first enter the container shell: ```sh sudo docker exec -it ipp-usb bash -``` +``` -Once inside the container, you can use the following commands: +Once inside the container, you can use the following commands: -#### **2.1 Monitor Logs in Real-Time** +#### **2.1 Monitor Logs in Real-Time** -- **Main log file:** +- **Main log file:** ```sh tail -f /var/log/ipp-usb/main.log - ``` - This continuously displays new log entries for the entire service. + ``` + This continuously displays new log entries for the entire service. -- **Per-device log file (Replace `<DEVICE>` with your printer's identifier):** +- **Per-device log file (Replace `<DEVICE>` with your printer's identifier):** ```sh tail -f /var/log/ipp-usb/<DEVICE>.log - ``` + ``` -#### **2.2 Display Full Log Files** +#### **2.2 Display Full Log Files** -- **Show full contents of the main log file:** +- **Show full contents of the main log file:** ```sh cat /var/log/ipp-usb/main.log - ``` + ``` -- **Show logs for a specific device:** +- **Show logs for a specific device:** ```sh cat /var/log/ipp-usb/<DEVICE>.log - ``` + ``` -#### **2.3 List Available Device Logs** +#### **2.3 List Available Device Logs** -To see all available per-device log files, run: +To see all available per-device log files, run: ```sh ls /var/log/ipp-usb/ -``` +``` -#### **3. Persisting Logs Across Container Restarts** +#### **3. Persisting Logs Across Container Restarts** -If you want logs to persist across container restarts, you should mount the log directory using a Docker volume or a host directory. +If you want logs to persist across container restarts, you should mount the log directory using a Docker volume or a host directory. -**Required Docker Flags for Log Persistence:** -- `-v <volume-name>:/var/log/ipp-usb` → Mounts a Docker volume for log persistence. -- **or** -- `-v <host-directory>:/var/log/ipp-usb` → Mounts a host directory to retain logs outside the container. +**Required Docker Flags for Log Persistence:** +- `-v <volume-name>:/var/log/ipp-usb` → Mounts a Docker volume for log persistence. +- **or** +- `-v <host-directory>:/var/log/ipp-usb` → Mounts a host directory to retain logs outside the container. These options ensure that logs remain available even after the container stops or is recreated, allowing for easier troubleshooting and auditing. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipp-usb-0.9.31/ipp-usb-quirks/HP.conf new/ipp-usb-0.9.33/ipp-usb-quirks/HP.conf --- old/ipp-usb-0.9.31/ipp-usb-quirks/HP.conf 2026-02-12 17:00:23.000000000 +0100 +++ new/ipp-usb-0.9.33/ipp-usb-quirks/HP.conf 2026-05-06 21:26:59.000000000 +0200 @@ -58,3 +58,10 @@ [*HP Color LaserJet Flow X677*] usb-send-delay-threshold = 2048 usb-send-delay = 0.2ms + +# HP LaserJet M406 fails to initialize immediately after device +# reboot and requires a lot of time to warm up. +# +# init-retry-partial helps +[HP LaserJet M406] + init-retry-partial = true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipp-usb-0.9.31/ipp.go new/ipp-usb-0.9.33/ipp.go --- old/ipp-usb-0.9.31/ipp.go 2026-02-12 17:00:23.000000000 +0100 +++ new/ipp-usb-0.9.33/ipp.go 2026-05-06 21:26:59.000000000 +0200 @@ -290,10 +290,10 @@ // Obtain DNSSdName ippinfo.DNSSdName = attrs.strSingle("printer-dns-sd-name") if ippinfo.DNSSdName == "" { - ippinfo.DNSSdName = attrs.strSingle("printer-info") + ippinfo.DNSSdName = attrs.strSingle("printer-make-and-model") } if ippinfo.DNSSdName == "" { - ippinfo.DNSSdName = attrs.strSingle("printer-make-and-model") + ippinfo.DNSSdName = attrs.strSingle("printer-info") } if ippinfo.DNSSdName == "" { ippinfo.DNSSdName = usbinfo.MakeAndModel() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ipp-usb-0.9.31/usbio_libusb.go new/ipp-usb-0.9.33/usbio_libusb.go --- old/ipp-usb-0.9.31/usbio_libusb.go 2026-02-12 17:00:23.000000000 +0100 +++ new/ipp-usb-0.9.33/usbio_libusb.go 2026-05-06 21:26:59.000000000 +0200 @@ -611,15 +611,27 @@ } for _, s := range strings { - rc := C.libusb_get_string_descriptor_ascii( - (*C.libusb_device_handle)(devhandle), - s.idx, - (*C.uchar)(unsafe.Pointer(&buf[0])), - C.int(len(buf)), - ) + // Some devices (notably the "Pantum BP5100DN series") may + // fail to return a string descriptor on the first attempt. + // + // Investigation revealed that the request for language IDs, + // implicitly performed by libusb_get_string_descriptor_ascii, + // returns a malformed packet. This causes libusb to fail + // with LIBUSB_ERROR_IO. + // + // As a workaround, we retry several times before giving up. + for i := 0; i < 3; i++ { + rc := C.libusb_get_string_descriptor_ascii( + (*C.libusb_device_handle)(devhandle), + s.idx, + (*C.uchar)(unsafe.Pointer(&buf[0])), + C.int(len(buf)), + ) - if rc > 0 { - *s.str = string(buf[:rc]) + if rc > 0 { + *s.str = string(buf[:rc]) + break + } } } ++++++ ipp-usb.obsinfo ++++++ --- /var/tmp/diff_new_pack.Xq4cky/_old 2026-05-30 22:58:50.149997567 +0200 +++ /var/tmp/diff_new_pack.Xq4cky/_new 2026-05-30 22:58:50.153997731 +0200 @@ -1,5 +1,5 @@ name: ipp-usb -version: 0.9.31 -mtime: 1770912023 -commit: 88a532841e1f95f50663f39bc9213144dba815c8 +version: 0.9.33 +mtime: 1778095619 +commit: 3301f87daa369f28a848f16d542e87bb9bb84d16
