Packages sources : http://www.perzl.org/aix/
Install / Update an RPM package (option i instead U for install only, it's better to use U in any case):
# rpm -Uhv httpd-2.2.15-1.aix5.1.ppc.rpm
force options: - -nodeps (ignore dependency) , - -ignoreos (to install a package build with an earlier version of AIX)
Downgrade a package
# rpm -Uvh --oldpackage [downloaded_lower_version_package]
List rpm packages installed:
# rpm -qa
List files into an RPM package installed:
# rpm -qlv zabbix-agent -rwxr-xr-x 1 root system 1457 Oct 19 15:44 /etc/rc.d/init.d/zabbix-agent lrwxrwxrwx 1 root system 22 Oct 19 15:44 /etc/rc.d/rc2.d/Kzabbix-agent -> ../init.d/zabbix-agent lrwxrwxrwx 1 root system 22 Oct 19 15:44 /etc/rc.d/rc2.d/Szabbix-agent -> ../init.d/zabbix-agent -rw-r--r-- 1 root system 15575 Oct 19 15:44 /etc/zabbix/zabbix_agentd.conf drwxr-xr-x 2 root system 0 Oct 19 15:44 /etc/zabbix/zabbix_agentd.d -rwxr-xr-x 1 root system 6341227 Oct 19 15:44 /opt/freeware/bin/zabbix_get -rwxr-xr-x 1 root system 7522635 Oct 19 15:44 /opt/freeware/bin/zabbix_sender -rw-r--r-- 1 root system 4901 Oct 19 15:44 /opt/freeware/man/man1/zabbix_get.1 -rw-r--r-- 1 root system 14962 Oct 19 15:44 /opt/freeware/man/man1/zabbix_sender.1 -rw-r--r-- 1 root system 3899 Oct 19 15:44 /opt/freeware/man/man8/zabbix_agentd.8 -rwxr-xr-x 1 root system 9719766 Oct 19 15:44 /opt/freeware/sbin/zabbix_agentd lrwxrwxrwx 1 root system 33 Oct 19 15:44 /usr/bin/zabbix_get -> ../../opt/freeware/bin/zabbix_get lrwxrwxrwx 1 root system 36 Oct 19 15:44 /usr/bin/zabbix_sender -> ../../opt/freeware/bin/zabbix_sender lrwxrwxrwx 1 root system 37 Oct 19 15:44 /usr/sbin/zabbix_agentd -> ../../opt/freeware/sbin/zabbix_agentd drwxr-xr-x 2 zabbix zabbix 0 Oct 19 15:44 /var/log/zabbix drwxr-xr-x 2 zabbix zabbix 0 Oct 19 15:44 /var/run/zabbix
List package from which the file depend:
# rpm -qf /usr/bin/mysql mysql-3.23.52-3
Uninstall an rpm package:
# rpm -e zip-3.0-1
To extract RPM files from a package ⇒ use CPIO from freeware
[root@aix01]/export/softs/zabbix/zabbix_agent_5.0.17-1# rpm2cpio zabbix-agent-5.0.17-1.aix7.2.ppc.rpm | /opt/freeware/bin/cpio -idmv ./etc/rc.d/init.d/zabbix-agent ./etc/rc.d/rc2.d/Kzabbix-agent ./etc/rc.d/rc2.d/Szabbix-agent ./etc/zabbix/zabbix_agentd.conf ./etc/zabbix/zabbix_agentd.d ...
Check rpm package checksum
# rpm -Kvv libqb-2.0.2-1.db2pcmk.el8.x86_64.rpm D: loading keyring from pubkeys in /var/lib/rpm/pubkeys/*.key D: couldn't find any keys in /var/lib/rpm/pubkeys/*.key D: loading keyring from rpmdb D: serialize failed, using private dbenv D: opening db environment /var/lib/rpm cdb:private:0x401 D: opening db index /var/lib/rpm/Packages 0x400 mode=0x0 D: locked db index /var/lib/rpm/Packages D: opening db index /var/lib/rpm/Name 0x400 mode=0x0 D: read h# 431 Header SHA1 digest: OK (7607620a7fc71d534fe59a60dece8de02703e63c) D: added key gpg-pubkey-d88e42b4-52371eca to keyring D: read h# 437 Header SHA1 digest: OK (22824a5fcbad49190bcc2dd45d06b4b53aad2447) D: added key gpg-pubkey-fd431d51-4ae0493b to keyring D: read h# 438 Header SHA1 digest: OK (2355c07f9978587c537d385c0bdd9353214f7032) D: added key gpg-pubkey-2fa658e0-45700c69 to keyring D: read h# 442 Header SHA1 digest: OK (dd737a402556b7653c2bc971f343532046e26384) D: added key gpg-pubkey-352c64e5-52ae6884 to keyring D: read h# 457 Header SHA1 digest: OK (a2d8377102268dd4cf467cd46d9413c29832e110) D: added key gpg-pubkey-a14fe591-578876fd to keyring D: read h# 835 Header SHA1 digest: OK (cd1fc24b8ab1b1eec4021a4e5828eddd4554adb0) D: added key gpg-pubkey-00f97f56-467e318a to keyring D: read h# 890 Header SHA1 digest: OK (6fd848e1a8354d69e3f3728c8717e4ecbf325def) D: added key gpg-pubkey-a663d36e-3cd9959a to keyring D: read h# 924 Header SHA1 digest: OK (f4c664d12065958014b7271dfa93fda80055d732) D: added key gpg-pubkey-06d62707-582074e8 to keyring D: Using legacy gpg-pubkey(s) from rpmdb D: Expected size: 118112 = lead(96)+sigs(4404)+pad(4)+data(113608) D: Actual size: 118112 libqb-2.0.2-1.db2pcmk.el8.x86_64.rpm: Header SHA1 digest: OK (6c728acd3bb8c2fa1f6aa63dd3b5f1c1f7e2c6c0) MD5 digest: OK (5dbaf4cdeeb948a011927e29ac62165f) D: closed db index /var/lib/rpm/Name D: closed db index /var/lib/rpm/Packages D: closed db environment /var/lib/rpm # rpm -K libqb-2.0.2-1.db2pcmk.el8.x86_64.rpm libqb-2.0.2-1.db2pcmk.el8.x86_64.rpm: sha1 md5 OK
List files into RPM package:
# rpm -qpl freetype2-2.3.11-1.aix5.1.ppc.rpm /opt/freeware/doc/freetype2-2.3.11 /opt/freeware/doc/freetype2-2.3.11/ChangeLog /opt/freeware/doc/freetype2-2.3.11/README /opt/freeware/lib/libfreetype.a /usr/lib/libfreetype.a
List RPM package description:
# rpm -qpi rpm2/freetype2-2.3.11-1.aix5.1.ppc.rpm Name : freetype2 Relocations: (not relocateable) Version : 2.3.11 Vendor: (none) Release : 1 Build Date: Tue Nov 17 11:26:18 GMT+01:00 2009 Install date: (not installed) Build Host: aix51.perzl.org Group : System Environment/Libraries Source RPM: freetype2-2.3.11-1.src.rpm Size : 1945384 License: BSD/GPL dual license URL : http://www.freetype.org Summary : A free and portable font rendering engine Description : The FreeType engine is a free and portable font rendering engine, developed to provide advanced font support for a variety of platforms and environments. FreeType is a library which can open and manages font files as well as efficiently load, hint and render individual glyphs. FreeType is not a font server or a complete text-rendering library. The library is available as 32-bit and 64-bit.
List requirements to install an RPM package:
# rpm --requires -qp freetype2-2.3.11-1.aix5.1.ppc.rpm zlib libc.a(shr.o) libz.a(libz.so.1)
Print the scripts (postinstall, preinstall, unistall) contained into an RPM package:
# rpm --scripts -qp httpd-2.2.15-1.aix5.1.ppc.rpm preinstall script (through /bin/sh): # add the "apache" group /usr/bin/mkgroup -A id=64500 apache 2> /dev/null || : # add the "apache" user /usr/bin/mkuser id=64500 pgrp='apache' gecos='Apache User' \ login='false' rlogin='false' apache 2> /dev/null || : preuninstall script (through /bin/sh): if [ $1 = 0 ]; then /etc/rc.d/init.d/httpd stop > /dev/null 2>&1 fi # remove "apache" user and group /usr/sbin/rmuser -p apache || : /usr/sbin/rmgroup apache || :
Compile your libraries and binaries and put them on the relative target path starting to /opt/freeware/src/packages/BUILD
Create a spec file with the files names
[root@labo]/opt/freeware/src/packages# cat SPECS/libssh2\-1.11.1.spec Name: libssh2 Version: 1.11.1 Release: 2 Summary: A library implementing the SSH2 protocol Group: System Environment/Libraries License: BSD URL: https://app-bldns01-h.oi.bdl.lu/doku.php?id=aix:libssh2_compile Source0: https://github.com/libssh2/libssh2.git BuildRequires: zlib-devel BuildRequires: pkg-config, make BuildRequires: libgcc >= 6.3.0-1 Requires: zlib Requires: libgcc >= 8.3.0-1 %description libssh2 is a library implementing the SSH2 protocol as defined by Internet Drafts: SECSH-TRANS(22), SECSH-USERAUTH(25), SECSH-CONNECTION(23), SECSH-ARCH(20), SECSH-FILEXFER(06)*, SECSH-DHGEX(04), and SECSH-NUMBERS(10). The library is available as 32-bit and 64-bit. %files /opt/freeware/lib/libssh2.a /opt/freeware/lib64/libssh2.a %changelog * Tue Jun 04 2024 - 1.11.1-1 - Build custom
Test package creation, and adapt the file location (depnding from RPM generation!)
[root@labo]/opt/freeware/src/packages# /usr/bin/rpmbuild -bb SPECS/libssh2-1.11.1.spec Processing files: libssh2-1.11.1-2.ppc error: File not found: /var/tmp/libssh2-1.11.1-2.ppc/opt/freeware/lib/libssh2.a error: File not found: /var/tmp/libssh2-1.11.1-2.ppc/opt/freeware/lib64/libssh2.a RPM build errors: File not found: /var/tmp/libssh2-1.11.1-2.ppc/opt/freeware/lib/libssh2.a File not found: /var/tmp/libssh2-1.11.1-2.ppc/opt/freeware/lib64/libssh2.a [root@labo]/opt/freeware/src/packages# mkdir -p /var/tmp/libssh2-1.11.1-2.ppc/opt/freeware/lib [root@labo]/opt/freeware/src/packages# mkdir -p /var/tmp/libssh2-1.11.1-2.ppc/opt/freeware/lib64/ [root@labo]/opt/freeware/src/packages# cp BUILD/opt/freeware/lib/libssh2.a /var/tmp/libssh2-1.11.1-2.ppc/opt/freeware/lib [root@labo]/opt/freeware/src/packages# cp BUILD/opt/freeware/lib64/libssh2.a /var/tmp/libssh2-1.11.1-2.ppc/opt/freeware/lib64
Now you are ready to build the RPM package
[root@systemh]/opt/freeware/src/packages# /usr/bin/rpmbuild -bb SPECS/libssh2\-1.11.1.spec Processing files: libssh2-1.11.1-2.ppc warning: Deprecated external dependency generator is used! Finding Provides: /usr/opt/rpm/lib/rpm/find-provides Finding Requires(interp): Finding Requires(rpmlib): Finding Requires(verify): Finding Requires(pre): Finding Requires(post): Finding Requires(preun): Finding Requires(postun): Finding Requires(pretrans): Finding Requires(posttrans): Finding Requires: /usr/opt/rpm/lib/rpm/find-requires Finding Conflicts: Finding Obsoletes: Finding Recommends: Finding Suggests: Finding Supplements: Finding Enhances: Provides: libssh2 = 1.11.1-2 libssh2.a(libssh2.so.1) Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires: libc.a(shr.o) libc.a(shr_64.o) libcrypto.a(libcrypto.so.3) libgcc_s.a(shr.o) Wrote: /opt/freeware/src/packages/RPMS/ppc/libssh2-1.11.1-2.aix7.2.ppc.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.DJB7ea + umask 022 + cd /opt/freeware/src/packages/BUILD + /bin/rm -rf /var/tmp/libssh2-1.11.1-2.ppc + RPM_EC=0 + jobs -p + exit 0 [root@systemh]/opt/freeware/src/packages# ll /opt/freeware/src/packages/RPMS/ppc/libssh2-1.11.1-2.aix7.2.ppc.rpm 684 -rw-r--r-- 1 root system 697152 Jun 4 17:23 /opt/freeware/src/packages/RPMS/ppc/libssh2-1.11.1-2.aix7.2.ppc.rpm [root@systemh]/opt/freeware/src/packages# rpm -qpl /opt/freeware/src/packages/RPMS/ppc/libssh2-1.11.1-2.aix7.2.ppc.rpm /opt/freeware/lib/libssh2.a /opt/freeware/lib64/libssh2.a
Another example of spec file
create a spec file .spec dans /opt/freeware/src/packages/SPECS
Ex : logrorate-3.5.9.spec
Summary : A utility for rotate log following different parmeters. Name : logrotate Version : 3.5.9 Release : 1 Copyright : Copyright (C) 1995-2001 Red Hat, Inc. Group : ? Source RPM : http://iain.cx/src/logrotate/logrotate AutoReqProv : no BuildRoot : /usr/src/packages/BUILD %description This may be freely redistributed under the terms of the GNU Public License Usage: logrotate [-m command] [-s statefile] [--usage] [OPTION...] <configfile> /etc/logrotate.conf %files /usr/bin/logrotate /opt/freeware/bin/logrotate /opt/freeware/man/man8/logrotate.8 /etc/logrotate.conf Puis copier les fichiers dans /opt/freeware/src/packages/BUILD, avec l’arborescence necessaire : usr opt etc … Les binaires doivent être compilés pour AIX. Sinon on peut utiliser la commande rpm-built qui compile et créé le package rpm. lancer rpm –bb /opt/freeware/src/packages/SPECS/logrorate-3.5.9.spec Un fichier /opt/freeware/src/packages/RPMS/ppc/logrotate-3.5.9-1.aix5.1.ppc.rpm est alors créé, et installable Vérification : rpm –qlpv /opt/freeware/src/packages/RPMS/ppc/logrotate-3.5.9-1.aix5.1.ppc.rpm rpm –qpi /opt/freeware/src/packages/RPMS/ppc/logrotate-3.5.9-1.aix5.1.ppc.rpm rpm --scripts –qp /opt/freeware/src/packages/RPMS/ppc/logrotate-3.5.9-1.aix5.1.ppc.rpm ATTENTION : On ne peut installer des rpm que de version d’AIX >= à celle de l’OS de compilation
Script to sort rpm package to find the latest version in a directory using ls -1v human sort (include in the coreutils package)
root@devsrv - /mnt/rpm # for i in $(rpm -qa | grep -v AIX-rpm | rev | cut -d'-' -f3- | rev | tac) do pkg=$(/opt/freeware/bin/ls -1v $i-[0-9]* | grep -v src | tail -1) rpm -Uhv $pkg done
Find the latest rpm (version) package available in a folder:
root@devsrv - /mnt/rpm # for rpm in $(ls | grep rpm | sed 's/\-[0-9]/\ /g' | awk '{print $1}' | sort -u) do echo $rpm latest="" latest=$(ls ${rpm}-[0-9]* | sed -e 's/\-/\ ;\ /g' -e 's/\./\ /g' | sort -n -k3 -k4 -k5 -k7 -k8 -k9 | tail -1 | sed -e 's/\ ;\ /\-/g' -e 's/\ /\./g') mv $latest latest done
After upgrading the rpm package db4, RPMDB is corrupt
root@devsrv - /mnt/rpm # rpm -Uhv db4-4.8.30-1.rpm Updating / installing... 1:db4-4.8.30-1 ################################# [ 50%] Cleaning up / removing... 2:db4-4.7.25-2 ################################# [100%]
root@devsrv - /mnt/rpm # rpm -qa error: db4 error(-30971) from dbenv->open: DB_VERSION_MISMATCH: Database environment version mismatch error: cannot open Packages index using db4 - (-30971) error: cannot open Packages database in /opt/freeware/packages
[root@aixnim] /root> lslpp -Lc | grep open error: incorrect format: unknown tag
Uninstall openssl AIX package and reinstall:
make a backup of /etc/ssh (new keys will be generated!)
cd /etc; tar cvf ssh.tar ssh Uninstall (will also uninstall openssh and sysmgt.cim) installp -ug openssl.base openssl.license openssl.man.en_US
Reinstall openssh and openssl (sysmgt.cim not necessary) restore the ssh keys cd /etc; tar xvf ssh.tar
Just remove the DB files into /var/lib/rpm
root@devsrv - /root # cd /var/lib/rpm root@devsrv - /var/lib/rpm # mkdir old_db_rpm_2017 root@devsrv - /var/lib/rpm # mv __db.001 __db.002 __db.003 __db.004 old_db_rpm_2017 root@devsrv - /var/lib/rpm # rpm -qa expect-5.42.1-3.ppc freetype2-2.5.5-1.ppc AIX-rpm-7.2.2.0-7.ppc db4-4.8.30-1.ppc ...
If the database is not refreshed, the use the command
rpm --rebuilddb
Change folder : /export/packages/RPMS/noarch
> rpm -Uhv bash-4.4-4.aix5.1.ppc.rpm > rpm -Uhv info-6.4-1.aix5.1.ppc.rpm gettext-0.10.40-8.aix5.2.ppc.rpm libiconv-1.15-1.aix5.1.ppc.rpm Preparing... ################################# [100%] Updating / installing... 1:gettext-0.10.40-8 ################################# [ 33%] 2:libiconv-1.15-1 ################################# [ 67%] 3:info-6.4-1 ################################# [100%] Please check that /etc/info-dir does exist. You might have to rename it from /etc/info-dir.rpmsave to /etc/info-dir. exec(): 0509-036 Cannot load program /usr/opt/freeware/bin/rpm because of the following errors: 0509-150 Dependent module /opt/freeware/lib/libintl.a(libintl.so.8) could not be loaded. 0509-152 Member libintl.so.8 is not found in archive rpm_share: 0645-007 ATTENTION: get_rpm_inst_root_list() returned an unexpected result. rpm_share: 0645-007 ATTENTION: update_inst_root() returned an unexpected result.
Problem with RPM Databse
root@nimprod /var/lib/rpm> rm /var/lib/rpm/__db.00*
You need to force the reinstallation of package rpm.rte
root@nimprod /export/lpp/aix7200/aix7200-01-02-lpp> installp -F -acYN -d ./ rpm.rte
The “simple” way is to just dump everything in a directory and run:
# rm $(repomanage --keep=2 --old /path/to/repo) # createrepo /path/to/repo
Install the right level of popt (as this include into rpm.rte is too old)
/aixtoolbox/RPMS> rpm -Uhv ppc/popt-1.16-3.aix6.1.ppc.rpm
root@nimprod /root> yum search logrotate Symbol resolution failed for /usr/opt/rpm/lib/librpm.so because: Symbol poptSaveInt (number 266) is not exported from dependent module /usr/lib/libpopt.so.
Please update git to 2.20.2-1 to resolve this issue. To avoid these kind of issues. we have recently taken the approach of hardcoding the library path of libiconv in the loader section of the applications which depends on libiconv library. So LIBPATH won't have any effect on the library search path of libiconv.
root@aix01 # dump -X64 -Hov /opt/freeware/bin/git ***Import File Strings*** INDEX PATH BASE MEMBER 0 /opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib 1 libc.a shr_64.o 2 libpthreads.a shr_xpg5_64.o 3 libintl.a libintl.so.8 4 /opt/freeware/lib libiconv.a libiconv.so.2 5 libz.a libz.so.1