diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1de3677 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/usbmuxd-1.1.0.tar.bz2 diff --git a/.usbmuxd.metadata b/.usbmuxd.metadata new file mode 100644 index 0000000..36d6e8c --- /dev/null +++ b/.usbmuxd.metadata @@ -0,0 +1 @@ +a8f5d44b3014d57a6ae40960b56cc6f497876097 SOURCES/usbmuxd-1.1.0.tar.bz2 diff --git a/SOURCES/0001-udev-Work-around-systemd-bug-related-to-bind-events.patch b/SOURCES/0001-udev-Work-around-systemd-bug-related-to-bind-events.patch new file mode 100644 index 0000000..c102122 --- /dev/null +++ b/SOURCES/0001-udev-Work-around-systemd-bug-related-to-bind-events.patch @@ -0,0 +1,30 @@ +From a4c34c493e5d40395b55871b52b75f33550b9590 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Wed, 18 Apr 2018 15:00:25 +0200 +Subject: [PATCH] udev: Work around systemd bug related to bind events + +Make sure that udev doesn't lose our properties when bind events come +in, as implemented in kernels 4.12+. + +See https://github.com/systemd/systemd/issues/8221 +and https://github.com/systemd/systemd/issues/7109 +--- + udev/39-usbmuxd.rules.in | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/udev/39-usbmuxd.rules.in b/udev/39-usbmuxd.rules.in +index 140869e..4e84755 100644 +--- a/udev/39-usbmuxd.rules.in ++++ b/udev/39-usbmuxd.rules.in +@@ -6,5 +6,8 @@ SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/ + # Initialize iOS devices into "deactivated" USB configuration state and activate usbmuxd + SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", ACTION=="add", ENV{USBMUX_SUPPORTED}="1", ATTR{bConfigurationValue}="0", OWNER="usbmux", @udev_activation_rule@ + ++# Make sure properties don't get lost when bind action is called ++SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", ACTION=="bind", ENV{USBMUX_SUPPORTED}="1", OWNER="usbmux", @udev_activation_rule@ ++ + # Exit usbmuxd when the last device is removed + SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", ACTION=="remove", RUN+="@sbindir@/usbmuxd -x" +-- +2.17.0 + diff --git a/SOURCES/0001-udev-ensure-that-all-events-relating-to-device-are-t.patch b/SOURCES/0001-udev-ensure-that-all-events-relating-to-device-are-t.patch new file mode 100644 index 0000000..064ef68 --- /dev/null +++ b/SOURCES/0001-udev-ensure-that-all-events-relating-to-device-are-t.patch @@ -0,0 +1,48 @@ +From 7f54d304149f405dc70ac924471df0d5e3e5ea09 Mon Sep 17 00:00:00 2001 +From: Gavin Li +Date: Sun, 14 Jan 2018 02:10:18 -0800 +Subject: [PATCH 1/2] udev: ensure that all events relating to device are + tagged systemd + +systemd will not restart the usbmuxd service the after the first time it +is plugged in if it does not receive the "remove" events, which also +happen to lack the idVendor and idProduct attributes, so use +ENV{PRODUCT} instead. +--- + configure.ac | 2 +- + udev/39-usbmuxd.rules.in | 7 +++++-- + 2 files changed, 6 insertions(+), 3 deletions(-) + +diff --git a/configure.ac b/configure.ac +index b836f45..1ce46d8 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -74,7 +74,7 @@ fi + AM_CONDITIONAL(WANT_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno -a "x$with_systemd" = "xyes" ]) + + if test "x$with_systemd" = xyes; then +- udev_activation_rule="TAG+=\"systemd\", ENV{SYSTEMD_WANTS}=\"usbmuxd.service\"" ++ udev_activation_rule="ENV{SYSTEMD_WANTS}=\"usbmuxd.service\"" + else + udev_activation_rule="RUN+=\"@sbindir@/usbmuxd --user usbmux --udev\"" + fi +diff --git a/udev/39-usbmuxd.rules.in b/udev/39-usbmuxd.rules.in +index 91b14db..7d14d22 100644 +--- a/udev/39-usbmuxd.rules.in ++++ b/udev/39-usbmuxd.rules.in +@@ -1,7 +1,10 @@ + # usbmuxd (Apple Mobile Device Muxer listening on /var/run/usbmuxd) + ++# systemd should receive all events relating to device ++SUBSYSTEM=="usb", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", TAG+="systemd" ++ + # Initialize iOS devices into "deactivated" USB configuration state and activate usbmuxd +-ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="05ac", ATTR{idProduct}=="12[9a][0-9a-f]", ENV{USBMUX_SUPPORTED}="1", ATTR{bConfigurationValue}="0", OWNER="usbmux", @udev_activation_rule@ ++SUBSYSTEM=="usb", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", ACTION=="add", ENV{USBMUX_SUPPORTED}="1", ATTR{bConfigurationValue}="0", OWNER="usbmux", @udev_activation_rule@ + + # Exit usbmuxd when the last device is removed +-ACTION=="remove", SUBSYSTEM=="usb", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", ENV{INTERFACE}=="255/*", RUN+="@sbindir@/usbmuxd -x" ++SUBSYSTEM=="usb", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", ACTION=="remove", RUN+="@sbindir@/usbmuxd -x" +-- +2.17.0 + diff --git a/SOURCES/0002-udev-Handle-all-events-only-once.patch b/SOURCES/0002-udev-Handle-all-events-only-once.patch new file mode 100644 index 0000000..1f2891a --- /dev/null +++ b/SOURCES/0002-udev-Handle-all-events-only-once.patch @@ -0,0 +1,33 @@ +From b888970f68fb16961a7cc3a526065fab7a5d96ca Mon Sep 17 00:00:00 2001 +From: Rudolf Tammekivi +Date: Wed, 31 Jan 2018 01:10:54 +0100 +Subject: [PATCH 2/2] udev: Handle all events only once + +This fixes spontaneous USB reconfiguration causing "remove" event to be sent to +the daemon, which causes it to close itself if it did not have enough time to +connect to phone. +--- + udev/39-usbmuxd.rules.in | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/udev/39-usbmuxd.rules.in b/udev/39-usbmuxd.rules.in +index 7d14d22..140869e 100644 +--- a/udev/39-usbmuxd.rules.in ++++ b/udev/39-usbmuxd.rules.in +@@ -1,10 +1,10 @@ + # usbmuxd (Apple Mobile Device Muxer listening on /var/run/usbmuxd) + + # systemd should receive all events relating to device +-SUBSYSTEM=="usb", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", TAG+="systemd" ++SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", TAG+="systemd" + + # Initialize iOS devices into "deactivated" USB configuration state and activate usbmuxd +-SUBSYSTEM=="usb", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", ACTION=="add", ENV{USBMUX_SUPPORTED}="1", ATTR{bConfigurationValue}="0", OWNER="usbmux", @udev_activation_rule@ ++SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", ACTION=="add", ENV{USBMUX_SUPPORTED}="1", ATTR{bConfigurationValue}="0", OWNER="usbmux", @udev_activation_rule@ + + # Exit usbmuxd when the last device is removed +-SUBSYSTEM=="usb", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", ACTION=="remove", RUN+="@sbindir@/usbmuxd -x" ++SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{PRODUCT}=="5ac/12[9a][0-9a-f]/*", ACTION=="remove", RUN+="@sbindir@/usbmuxd -x" +-- +2.17.0 + diff --git a/SPECS/usbmuxd.spec b/SPECS/usbmuxd.spec new file mode 100644 index 0000000..1d2c70b --- /dev/null +++ b/SPECS/usbmuxd.spec @@ -0,0 +1,237 @@ +Name: usbmuxd +Version: 1.1.0 +Release: 13%{?dist} +Summary: Daemon for communicating with Apple's iOS devices +# All code is dual licenses as GPLv3+ or GPLv2+, except libusbmuxd which is LGPLv2+. +License: GPLv3+ or GPLv2+ +URL: http://www.libimobiledevice.org/ +Source0: http://www.libimobiledevice.org/downloads/%{name}-%{version}.tar.bz2 + +BuildRequires: gcc +BuildRequires: libimobiledevice-devel +BuildRequires: libplist-devel +BuildRequires: libusbx-devel +BuildRequires: systemd + +Requires(pre): shadow-utils +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd + +BuildRequires: autoconf libtool automake +Patch0: 0001-udev-ensure-that-all-events-relating-to-device-are-t.patch +Patch1: 0002-udev-Handle-all-events-only-once.patch +Patch2: 0001-udev-Work-around-systemd-bug-related-to-bind-events.patch + +%description +usbmuxd is a daemon used for communicating with Apple's iPod Touch, iPhone, +iPad and Apple TV devices. It allows multiple services on the device to be +accessed simultaneously. + +%prep +%autosetup -p1 +autoreconf -f -i + +# Set the owner of the device node to be usbmuxd +sed -i.owner 's/OWNER="usbmux"/OWNER="usbmuxd"/' udev/39-usbmuxd.rules.in +sed -i.user 's/--user usbmux/--user usbmuxd/' systemd/usbmuxd.service.in + +%build +%configure + +make %{?_smp_mflags} V=1 + +%install +make install DESTDIR=$RPM_BUILD_ROOT + +%pre +getent group usbmuxd >/dev/null || groupadd -r usbmuxd -g 113 +getent passwd usbmuxd >/dev/null || \ +useradd -r -g usbmuxd -d / -s /sbin/nologin \ + -c "usbmuxd user" -u 113 usbmuxd +exit 0 + +%post +%systemd_post usbmuxd.service + +%preun +%systemd_preun usbmuxd.service + +%postun +%systemd_postun_with_restart usbmuxd.service + +%files +%license COPYING.GPLv2 COPYING.GPLv3 +%doc AUTHORS README +%{_unitdir}/usbmuxd.service +%{_udevrulesdir}/39-usbmuxd.rules +%{_sbindir}/usbmuxd +%{_datadir}/man/man1/usbmuxd.1.gz + +%changelog +* Wed Apr 18 2018 Bastien Nocera - 1.1.0-13 ++ usbmuxd-1.1.0-13 +- Fix usbmuxd not starting up a second time, and properties being lost + with kernel >= 4.12 + +* Fri Mar 9 2018 Peter Robinson 1.1.0-12 +- Add gcc BR + +* Fri Feb 09 2018 Fedora Release Engineering - 1.1.0-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Aug 03 2017 Fedora Release Engineering - 1.1.0-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 1.1.0-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue May 16 2017 Peter Robinson 1.1.0-8 +- Use _udevrulesdir macro + +* Sat Feb 11 2017 Fedora Release Engineering - 1.1.0-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Fri Feb 05 2016 Fedora Release Engineering - 1.1.0-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Jun 19 2015 Fedora Release Engineering - 1.1.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed Feb 11 2015 Peter Robinson 1.0.10-4 +- Rebuild (libimobiledevice) + +* Tue Feb 3 2015 Peter Robinson 1.0.10-3 +- Use %%license + +* Tue Oct 21 2014 Peter Robinson 1.0.10-2 +- (rebuild) + +* Fri Oct 17 2014 Peter Robinson 1.0.10-1 +- New stable 1.1.0 release + +* Fri Oct 17 2014 Peter Robinson 1.0.9-3 +- Bump for correct overrides + +* Fri Oct 17 2014 Peter Robinson 1.0.9-2 +- Refresh usbmuxd owner bits + +* Wed Oct 15 2014 Peter Robinson 1.0.9-1 +- New stable 1.0.9 release + +* Tue Sep 09 2014 Rex Dieter - 1.0.9-0.6.c24463e +- Obsoletes: usbmuxd < 1.0.9 (multilib upgrade path) +- move Obsoletes: usbmuxd-devel to libusbmuxd-devel + +* Mon Aug 18 2014 Fedora Release Engineering - 1.0.9-0.5.c24463e +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Wed Jul 30 2014 Peter Robinson 1.0.9-0.4.c24463e +- Add upstream patch for systemd support + +* Sun Jun 08 2014 Fedora Release Engineering - 1.0.9-0.3.c24463e +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Mon Apr 21 2014 Peter Robinson 1.0.9-0.2 +- Minor update + +* Mon Apr 21 2014 Peter Robinson 1.0.9-0.1 +- Initial 1.0.9 snapshot + +* Thu Oct 10 2013 Ralf Corsépius - 1.0.8-10 +- Add BR: systemd for systemd.macros (RHBZ #1017493). + +* Tue Oct 8 2013 Peter Robinson 1.0.8-9 +- Fix rpm scripts + +* Sun Aug 04 2013 Fedora Release Engineering - 1.0.8-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Fri Feb 15 2013 Fedora Release Engineering - 1.0.8-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Mon Nov 19 2012 Bastien Nocera 1.0.8-6 +- Fix source URL + +* Thu Oct 4 2012 Peter Robinson - 1.0.8-5 +- Make use of the new systemd macros +- Minor updates to spec + +* Sun Jul 22 2012 Fedora Release Engineering - 1.0.8-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Mon Jul 09 2012 Bastien Nocera 1.0.8-3 +- Use systemd to start usbmuxd instead of udev (#786853) + +* Sat Apr 28 2012 Bastien Nocera 1.0.8-2 +- Fix usbmuxd not starting under udev + +* Mon Apr 9 2012 Peter Robinson 1.0.8-1 +- New stable 1.0.8 release + +* Thu Feb 2 2012 Peter Robinson - 1.0.7-3 +- Add debian patch for CVE-2012-0065. Fixes RHBZ 783523 + +* Sat Jan 14 2012 Fedora Release Engineering - 1.0.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Mar 22 2011 Peter Robinson 1.0.7-1 +- New stable 1.0.7 release + +* Mon Feb 07 2011 Fedora Release Engineering - 1.0.6-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Sun Oct 24 2010 Peter Robinson 1.0.6-1 +- New stable 1.0.6 release + +* Fri Jul 23 2010 Peter Robinson 1.0.5-1 +- New stable 1.0.5 release + +* Fri May 28 2010 Bastien Nocera 1.0.4-3 +- Fix udev rule to use the usbmuxd user + +* Wed May 12 2010 Peter Robinson 1.0.4-2 +- Actually upload a source file + +* Tue May 11 2010 Peter Robinson 1.0.4-1 +- New stable 1.0.4 release + +* Mon Mar 22 2010 Peter Robinson 1.0.3-1 +- New stable 1.0.3 release + +* Thu Feb 11 2010 Peter Robinson 1.0.2-1 +- New stable 1.0.2 release + +* Tue Feb 09 2010 Bastien Nocera 1.0.0-3 +- Use the gid/uid reserved for usbmuxd in setup 2.8.15 and above + +* Fri Jan 29 2010 Peter Robinson 1.0.0-2 +- Run deamon under the usbmuxd user + +* Mon Dec 7 2009 Peter Robinson 1.0.0-1 +- New stable 1.0.0 release + +* Sat Oct 31 2009 Peter Robinson 1.0.0-0.1.rc2 +- New 1.0.0-rc2 test release + +* Thu Oct 29 2009 Peter Robinson 1.0.0-0.2.rc1 +- Add patch to fix install of 64 bit libs + +* Tue Oct 27 2009 Peter Robinson 1.0.0-0.1.rc1 +- New 1.0.0-rc1 test release + +* Fri Aug 14 2009 Bastien Nocera 0.1.4-2 +- Make usbmuxd autostart on newer kernels +- (Still doesn't exit properly though) + +* Mon Aug 10 2009 Peter Robinson 0.1.4-1 +- Update to 0.1.4 + +* Tue Aug 4 2009 Peter Robinson 0.1.3-1 +- Update to 0.1.3, review input + +* Mon Aug 3 2009 Peter Robinson 0.1.2-1 +- Update to 0.1.2 + +* Mon Aug 3 2009 Peter Robinson 0.1.1-1 +- Initial packaging