[devel] I: sysvinit vs systemd

Dmitry V. Levin ldv на altlinux.org
Сб Дек 25 16:35:56 MSK 2021


On Fri, Dec 24, 2021 at 09:04:11PM +0300, Dmitry V. Levin wrote:
> On Fri, Dec 24, 2021 at 08:50:18PM +0300, Alexey Shabalin wrote:
> [...]
> > > %pre -n systemd-modules-common
> > > src=/etc/modules
> > > dst=/etc/modules-load.d/modules.conf
> > > tmp=$dst.rpmmove
> > > rm -f $tmp
> > > if [ -L $dst -a -s $src -a ! -L $src ]; then
> > 
> > Убрал проверку -L $dst. Потому что может не быть такого симлинка
> > (напрмер на системах sysv).
> > На самом деле не важно, есть ли там сейчас симлинк, все равно в итоге
> > там должен оказаться файл с содержимым /etc/modules.
> > 
> > >         mkdir -p ${tmp%/*}
> > 
> > Убрал mkdir, т.к. все эти каталоги принадлежат пакету filesystem и
> > обязаны присутствовать в системе.
> > 
> > >         mv $src $tmp
> > 
> > Оказалось что нельзя делать mv. При отсутствии $src выдает ошибку rpm
> > про cpio archive.
> > Заменил на cp. Rpm сам успешно преобразует $src файл в симлинк и
> > дополнительную помощь не приветствует.
> 
> Если mv нельзя, то надо, видимо, делать cp -a.

При обновлении с не изменёнными /etc/sysctl.conf и /etc/modules получается:

'/etc/sysctl.conf' -> '/etc/sysctl.d/99-sysctl.conf.rpmmove'
systemd-sysctl-common-1:249.7-alt7.x86_64
renamed '/etc/sysctl.d/99-sysctl.conf' -> '/etc/sysctl.d/99-sysctl.conf.rpmsave'
renamed '/etc/sysctl.d/99-sysctl.conf.rpmmove' -> '/etc/sysctl.d/99-sysctl.conf'

'/etc/modules' -> '/etc/modules-load.d/modules.conf.rpmmove'
systemd-modules-common-1:249.7-alt7.noarch
renamed '/etc/modules-load.d/modules.conf' -> '/etc/modules-load.d/modules.conf.rpmsave'
renamed '/etc/modules-load.d/modules.conf.rpmmove' -> '/etc/modules-load.d/modules.conf'


При обновлении с изменёнными /etc/sysctl.conf и /etc/modules получается:

'/etc/sysctl.conf' -> '/etc/sysctl.d/99-sysctl.conf.rpmmove'
systemd-sysctl-common-1:249.7-alt7.x86_64
warning: /etc/sysctl.conf saved as /etc/sysctl.conf.rpmsave
renamed '/etc/sysctl.d/99-sysctl.conf' -> '/etc/sysctl.d/99-sysctl.conf.rpmsave'
renamed '/etc/sysctl.d/99-sysctl.conf.rpmmove' -> '/etc/sysctl.d/99-sysctl.conf'

'/etc/modules' -> '/etc/modules-load.d/modules.conf.rpmmove'
systemd-modules-common-1:249.7-alt7.noarch
warning: /etc/modules saved as /etc/modules.rpmsave
renamed '/etc/modules-load.d/modules.conf' -> '/etc/modules-load.d/modules.conf.rpmsave'
renamed '/etc/modules-load.d/modules.conf.rpmmove' -> '/etc/modules-load.d/modules.conf'


Я думаю, мы можем сделать лучше, если будем проверять .rpmsave,
которые создаёт rpm, например:

%pre modules-common
src=/etc/modules
dst=/etc/modules-load.d/modules.conf.rpmmove
rm -f $dst
if [ -s $src -a ! -L $src ]; then
	cp -a $src $dst
fi

%post modules-common
src=/etc/modules.rpmsave
dst=/etc/modules-load.d/modules.conf
tmp=$dst.rpmmove
new=$dst.rpmnew
if [ -f $tmp ]; then
	if cmp -s $src $tmp; then
		mv -v -f $dst $new
		mv -v $src $dst
	fi
	rm -f $tmp
fi


-- 
ldv


Подробная информация о списке рассылки Devel