Gentoo Archives: gentoo-dev

From: "Michał Górny" <mgorny@g.o>
To: gentoo-dev@l.g.o, Patrick Lauer <patrick@g.o>
Subject: Re: [gentoo-dev] Changing order of default virtual/udev provider
Date: Wed, 17 Feb 2016 10:23:45
Message-Id: 67D4B079-4C37-4E0E-A02B-C99677BDA4C6@gentoo.org
In Reply to: Re: [gentoo-dev] Changing order of default virtual/udev provider by Patrick Lauer
1 Dnia 17 lutego 2016 09:17:37 CET, Patrick Lauer <patrick@g.o> napisał(a):
2 >On 02/17/2016 07:37 AM, Michał Górny wrote:
3 >>
4 >>>>> * Both udev and eudev have pretty much feature parity, so there
5 >won't be
6 >>>>> any user-visible changes
7 >>>>>
8 >>>>> * udev upstream strongly discourages standalone udev (without
9 >systemd)
10 >>>>> since at least 2012
11 >>>>>
12 >>>>> (see for example:
13 >>>>>
14 >https://lists.freedesktop.org/archives/systemd-devel/2012-June/005516.html
15 >>>>> https://lkml.org/lkml/2012/10/3/618
16 >>>>> )
17 >>>>>
18 >>>>> So it'd be (1) following upstreams recommendations and (2)
19 >dogfooding
20 >>>>> our own tools. I don't see any downsides to this :)
21 >>>> I'm strongly against this, because:
22 >>>>
23 >>>> 1. It is a conflict-induced fork. As such, it will never be merged
24 >>>> upstream and it will never be supported upstream. In fact, it is
25 >>>> continually forces to follow upstream changes and adapt to them.
26 >eudev
27 >>>> is more likely to break because of the Gentoo developer(s) working
28 >hard
29 >>>> to merge upstream changes to their incompatible code.
30 >>> That was the entire point of the project. Upstream rejected any
31 >attempts
32 >>> to do things that we actually needed and broke things claiming the
33 >>> distributions were responsible for handling the breakage, so eudev
34 >was
35 >>> started on the basis that we needed a project that would ensure that
36 >>> changes in udev occur in a way that makes sense.
37 >> What things? Things like 'let's try to spawn this script third time
38 >in
39 >> case someone mounted something so that it happens to work this time'?
40 >> Yes, that old behavior really made sense.
41 >It did. Not having it made booting a lot more exciting, and exciting is
42 >bad.
43
44 So, to summarize. Random non-repeatable behavior is good. Having repeatable boots is bad and exciting. Because then you can't claim your bugs are not bugs, right?
45
46 >
47 >Now you need to boot before you boot (mount all relevant filesystems
48 >before starting PID1?), which is fragile and suddenly makes the
49 >initramfs complex enough to require, err, a dhcp client, different fsck
50 >implementations, and pretty much all that would have been in /bin or
51 >/sbin before the /usr movearounding started. And firmware and kernel
52 >modules, like this it's easy to go >150MB for a compressed initramfs if
53 >you need firmware and a dhcp client to bring up the NFS share with
54 >/boot
55 >(hey, with ceph it's even more exciting ...)
56 >
57 >"initramfs is the new rootfs" - yeah, that sounds like a good idea,
58 >until you figure out that the initramfs doesn't fit in /boot anymore
59 >(kernels are ~3-4MB each, so 25MB is plenty, eh?) and you need to
60 >either
61 >repartition or boot from USB.
62 >
63 >And since there was no visible failure mode for us before, of course
64 >some of us are very confused why a reasonable and effective feature got
65 >pruned without replacement. Just because somewhere else it didn't work
66 >100% - that's no reason to remove features for everyone!
67 >>
68 >>>> 2. Many of Gentoo users are programmers who appreciate the
69 >'vanilla'
70 >>>> API experience Gentoo often provides. Switching the defaults to a
71 >fork
72 >>>> that is known to intentionally diverge from upstream goes against
73 >that
74 >>>> principle. Programs written against eudev may not work correctly
75 >with
76 >>>> upstream udev.
77 >>> If upstream udev were stable, that would be one thing, but it
78 >>> intentionally diverges from itself continuously. The only experience
79 >>> that could be reliably provided with upstream udev is one of
80 >continual
81 >>> breakage.
82 >> This is FUD, without any proof.
83 >See your reply to (3) - you disagree with yourself!
84 >>>> 3. eudev has fallen behind systemd/udev more than once in the past,
85 >>>> and caused visible breakage to users this way.
86 >>> When?
87 >> Whenever we installed new systemd and udev versions, and needed to
88 >bump
89 >> the dependency in virtual, and eudev maintainers were nowhere to be
90 >> found.
91 >Which was only needed due to API changes and/or feature removal. Which
92 >is exactly what you claimed didn't happen, so go FUD yourself :)
93 >>
94 >>> Can we also consider all of the times udev broke the boot process
95 >>> because upstream just didn't care about doing changes in a sane way
96 >and
97 >>> the people interested in providing the upstream experience delivered
98 >on
99 >>> that goal?
100 >> Proof needed.
101 >"Persistent network naming" caused me at least three independent boot
102 >failures -
103 >
104 >(1) network device got renamed away from eth0 by default. That's
105 >horrible, why would you change the default like this?!
106 >(If it were an option that I had to consciously turn on it'd be great)
107 >
108 >(2) persistent naming only triggers when net link status is up. Thus if
109 >the switch takes more time than the server (which it did) the renaming
110 >did *not* happen, init script looks for en3p7 or whatever but now it's
111 >eth0 again. This means I can't automatically power on systems after
112 >power failure ...
113 >
114 >(3) race condition in persistent naming renames on average 2 out of 4
115 >of
116 >the interfaces on bnx2 / bnx2x quad ethernet cards. So you may have
117 >en3p0, eth1, eth2, en3p4 ... or eth0, en3p1, eth3, eth2.
118 >
119 >The only available fixes for this are *not* using the persistently
120 >buggy
121 >renamer thingy and instead use either MAC-based naming or pass
122 >'net.ifnames=0' on the kernel command line to keep the stable kernel
123 >names.
124 >
125 >At my current workplace we're stapling it to the MAC address - that way
126 >whenever a NIC fails we need to also change udev config, but at least
127 >we
128 >can guarantee which interface is which. Quite useful for server
129 >machines
130 >that have between two and six interfaces.
131 >
132 >And that's independent of the movearounding - see udev init script:
133 >
134 >bins="/sbin/udevd /lib/systemd/systemd-udevd
135 >/usr/lib/systemd/systemd-udevd"
136 >
137 >I'm not even going to ask why a binary is in /lib when it used to live
138 >in /sbin.
139 >
140 >(And I will not point out the wrongness of config in /lib, because
141 >apparently people get upset when the madness is pointed out ... )
142
143 The wrongness is relying on any particular location of a daemon. The init system setup needs to know where it is, and that should go along with a package that installs it. Of course, it falls apart if you split scripts apart, then force movearounding to suit your fancy love to the past.
144
145 >>
146 >>>> 4. eudev is underdocumented, and the maintainer admits that 'he
147 >sucks
148 >>>> at documenting'. In fact, did anyone even bother to note how far
149 >eudev
150 >>>> diverges from upstream udev to this point?
151 >>> The FreeBSD developers were complaining about how poorly documented
152 >udev
153 >>> was well before eudev existed. This is not a regression unless
154 >systemd's
155 >>> innovations in replacing documented things with undocumented things
156 >made
157 >>> them worse.
158 >> So... replacing thing that has some docs with a thing that has no
159 >docs
160 >> and links to docs of udev that aren't exact match for eudev is good?
161 >> Good to know.
162 >>
163 >Having tried to use the systemd 'documentation' -
164 >
165 >that's actually progress, having no documentation is better than a
166 >random pile of braindumps. "Read the source", as usual ...
167
168
169 --
170 Best regards,
171 Michał Górny (by phone)