Difference between revisions of "Update contribs"

From SME Server
Jump to: navigation, search
m (Add category)
(Reduce page to a single script / save original script(s) on the talk page.)
Line 14: Line 14:
 
Yum doesn't do this job in one command but small scripts must be used for this purpose.
 
Yum doesn't do this job in one command but small scripts must be used for this purpose.
  
===Scripts===
+
===yumcheck.sh===
3 scripts are available at this time:
 
 
 
====yumcheck.sh====
 
  
 
yumcheck.sh can be used to check for and optionally install updates to packages that were originally installed from a 3rd party repository.
 
yumcheck.sh can be used to check for and optionally install updates to packages that were originally installed from a 3rd party repository.
Line 47: Line 44:
 
* Since this command starts from the output of <tt>/sbin/e-smith/audittools/newrpms</tt>, it is possible to get errors.  That is, if you configure a repository, install a package from it, then remove the configuration, this script will error.
 
* Since this command starts from the output of <tt>/sbin/e-smith/audittools/newrpms</tt>, it is possible to get errors.  That is, if you configure a repository, install a package from it, then remove the configuration, this script will error.
 
* Arguments starting with "@" are stripped out and handled separately.  If *all* arguments start with "@", the default "check-update -q" will be passed to yum.
 
* Arguments starting with "@" are stripped out and handled separately.  If *all* arguments start with "@", the default "check-update -q" will be passed to yum.
 
====script 1====
 
 
#!/bin/bash
 
 
echo "List of available repos beside SME:";
 
#list the disabled repos
 
for repo in $(yum repolist disabled |awk  '$1 !~ /id|Modules|repolist:/ {print $1}'); do
 
 
      echo $repo;
 
 
done
 
echo "";
 
 
# repo selection
 
index=0;
 
repos="";
 
proceed="proceed";
 
 
until [ "$repos" == "$proceed" ]; do
 
 
        repos[$index]=$repos;
 
        ((index=index+1));
 
        read -p 'Enter 1x repo name for selection or "proceed" to start the updating: ' repos;
 
 
done
 
 
# remove the repo "proceed"
 
repos=("${repos[@]:1}");
 
 
 
for repo in "${repos[@]}"; do
 
        echo "";
 
        echo "======================================";
 
        echo -e "\tUPDATE from repo: "$repo;
 
        echo "======================================";
 
 
        # generate the list of rpm installed from the repo
 
        for rpm in $(/sbin/e-smith/audittools/newrpms |awk -v repo_awk=@$repo 'repo_awk==$3 {print $1}'); do
 
 
                rpms=$rpm' '$rpms
 
 
        done
 
 
# updating
 
        yum --enablerepo=$repo update $rpms;
 
 
done
 
 
exit 0
 
 
Using this script is very easy:
 
* you get the list of all available repositories
 
* enter 1 by 1 the name of the repo you want to update from
 
* enter 'proceed' after the last repo
 
* for each repo, yum show the list of rpms that could be updated and ask (Y/N) before starting
 
 
eg.:
 
List of available repos beside SME:
 
centosplus
 
contrib
 
epel
 
extras
 
fasttrack
 
fws
 
remi
 
smecontribs
 
smedev
 
smetest
 
smeupdates-testing
 
sogo3
 
 
Enter 1x repo name for selection or "proceed" to start the updating: epel
 
Enter 1x repo name for selection or "proceed" to start the updating: fws
 
Enter 1x repo name for selection or "proceed" to start the updating: proceed
 
 
====script 2====
 
This script is much shorter, runs faster and doesn't require to enter the name of the several repos:
 
 
#!/bin/bash
 
 
for repo in $(/sbin/e-smith/audittools/newrpms |grep \@ |awk ' {print $3}' |sort -u |sed s/@//); do
 
 
        # generate the list of rpm installed from the repo
 
        for rpm in $(/sbin/e-smith/audittools/newrpms |awk -v repo_awk=@$repo 'repo_awk==$3 {print $1}'); do
 
                rpms=$rpm' '$rpms
 
        done
 
 
        echo -e "\n\n===";
 
        echo -e "Repo: "$repo;
 
        echo -e "\nIncludePkgs: "$rpms;
 
        echo "===";
 
        # updating
 
        yum --enablerepo=$repo --setopt="$repo.includepkgs='$rpms'" update
 
 
done
 
 
exit 0
 
 
The script
 
* runs 'newrpms' to get all repos that have been used to install non-standard packages
 
* creates a list of rpms for each such repo
 
* uses "--setopts" to specify "includepkgs" for each repo during update
 
* asks for Y/N and runs the update
 
  
  
 
===Related Information===
 
===Related Information===
 +
====Alternative Scripts====
 +
: [https://wiki.contribs.org/Talk:Update_contribs Original scripts]
 
====Forum====
 
====Forum====
 
:[https://forums.contribs.org/index.php/topic,52795.0.htm How to update completely and properly a SME?]
 
:[https://forums.contribs.org/index.php/topic,52795.0.htm How to update completely and properly a SME?]

Revision as of 12:28, 7 April 2017

Is this article helpful to you?
Please consider donating or volunteering
Thank you!

Update contribs

Background

Important.png Note:
These scripts depend on a yum feature introduced in Centos 6 / SME 9, and will not work on earlier versions

Due to dependencies, the installation of contribs requires very often the installation of rpms coming from 3rd party (non-SME) repositories.

Enabling 3rd party repositories during a general yum update can pull in packages that are incompatible with SME server such as newer versions of PHP, mysql, samba, etc.

Updating the installed contribs needs sometimes to update the dependencies or sometimes only the dependencies get updated.

In order to avoid serious problems of compatibility, it is very important that all the rpms get updated only from the repository they are installed from, instead of only taking the most recent release existing in all the repositories that are available.

Yum doesn't do this job in one command but small scripts must be used for this purpose.

yumcheck.sh

yumcheck.sh can be used to check for and optionally install updates to packages that were originally installed from a 3rd party repository.

yumcheck.sh is an attachment to bugzilla:10158

Install at the sme server shell using:

curl -s https://bugs.contribs.org/attachment.cgi?id=5837 |sed -e 's/\r//' >/usr/local/bin/yumcheck.sh
chmod +x /usr/local/bin/yumcheck.sh

Usage:

yumcheck.sh
Check for updates for all packages installed from non-standard repos. Output only info for packages that need updates
Indicate before exit if any packages were installed using yum localinstall
Indicate before exit if the server requires signal-event post-upgrade; signal-event reboot
yumcheck.sh update
Run in verbose mode, do the updates, prompt the user after checking each repo if updates are pending
yumcheck.sh update -q -y
Show only those items to be updated, do the updates, and answer 'yes' to each suggested update.
yumcheck.sh @/
List all rpms that have been installed using yum localinstall
yumcheck.sh @smecontribs @sogo @/
Check for updates from "smecontribs", "sogo3", and any locally installed rpms
Note that "@sogo" will be expanded to "sogo3" at runtime. Likewise, "@sme" would expand to "smecontribs"

Notes:

  • Using the default settings will list updates from the enabled repositories multiple times (once for each disabled repo with installed packages)
  • Since this command starts from the output of /sbin/e-smith/audittools/newrpms, it is possible to get errors. That is, if you configure a repository, install a package from it, then remove the configuration, this script will error.
  • Arguments starting with "@" are stripped out and handled separately. If *all* arguments start with "@", the default "check-update -q" will be passed to yum.


Related Information

Alternative Scripts

Original scripts

Forum

How to update completely and properly a SME?

Bugzilla

IDProductComponentSummary
10158SME Server FutureNew Feature RequestNFR Improve support for 3rd party repositories