Замена LibreOffice4 из p7 на статичные сборки с оф. сайта
class libre-stable {
$librelatest = 'curl -s ftp://server.firma/libreoffice/latest'
$librelatestshort = 'curl -s ftp://server.firma/libreoffice/latest|cut -c -3'
$loginstall = '/var/log/firma-install.log'
$logremove = '/var/log/firma-remove.log'
exec { 'libre-remove' :
path => '/usr/bin:/usr/sbin:/bin:/sbin',
provider => shell,
command => "latest=`$librelatestshort`; old=`rpm -qa --qf '%{version}\n' libreoffice[0-9].[0-9]|sed \"/^\$latest/ d; s|^\\(.\\{2\\}.\\).*|libreoffice\\1\\* |g\"|awk '! a[\$0]++'|tr -d '\n'`; apt-get -y remove \$old LibreOffice4-{common,mimetypes} >>$logremove 2>&1",
onlyif => "[ $(rpm -qa libreoffice`$librelatestshort`*|wc -l) -gt 0 ] && [ $(rpm -qa libreoffice* LibreOffice4*|egrep -v `$librelatestshort`|wc -l) -gt 0 ] && [ $(ps -A|grep soffice.bin|wc -l) -eq 0 ]",
require => Exec['libre-install'],
}
exec { 'libre-install' :
path => '/usr/bin:/usr/sbin:/bin:/sbin',
provider => shell,
command => "latest=`$librelatest`; short=`$librelatestshort`; mkdir /tmp/\$latest; wget -qO /tmp/\$latest/rpms.tar.gz ftp://server.firma/libreoffice/\$latest/`arch`/rpms.tar.gz; tar -xzf /tmp/\$latest/rpms.tar.gz -C /tmp/\$latest/; rpm -Uvh /tmp/\$latest/*.rpm >>$loginstall 2>&1; rm -rf /tmp/\$latest/",
onlyif => "[ $(rpm -qa libreoffice`$librelatestshort`*|wc -l) -eq 0 ] || [ $(rpm -q --qf '%{version}' libreoffice`$librelatestshort`) != $($librelatest) ]",
}
}
Манифест может работать только с двумя установленными версиями LO, например, libreoffice4.4 и libreoffice5.0, если в системе, по какой-то причине, будет установлено более двух версии LO, команда будет выполняться некорректно. Чтобы это исправить, нужно дорабатывать наполнение переменной $old:
old=`rpm -qa --qf '%{version},' libreoffice[0-9].[0-9]|sed \"s|\,*\$latest[^\,]*\,*||g\"|cut -c -3|sed 's|\([0-9]\.[0-9]\)|libreoffice\1\*|'`
чтобы в неё попадали все установленные версии LO кроме latest.
Поправил.
Манифест выполняется в следующем порядке:
- устанавливается latest-версия LO (с локального ftp);
- удаляются старые установленные версии LO.