سؤال

I have a question to building an rpm package. I will bild an rpm package, which should copy some files on the computer. If no openssl is on the Pc I will also install it. At last I want to start some java programm to verify the succesfull installation.

Why is it not possible to just call a java class datei from the %post section. What did I do wrong? Is ist even possible to call one from inside rpm?

Also the $HOME Variable is not resolved in the %post section. How can I write to the coresponding file?

I am also open to idea of improvement. This is my first rpm package.

Thank you very much for your help

This ist the coresponding SPEC file.

### PI JDBC Driver Spec-File

Summary: Installs the PIJDBC Driver

Name: pijdbcdriver_installer
Version: 1.0
Release: 1
License: Probably not
Source: PI-JDBC_2012-x86-x64_.tar.gz
Source1: openssl-0.9.8k-3.4_3.8.1.x86_64.delta.rpm
Source2: lib
Source3: openssl-1.0.0k-34.20.1.x86_64.rpm
Source4: test.sh



%description
pijdbcdriver_installer installs

%prep

rm -rf Build/*

%setup -c pijdbcdriver_installer-1.0
cp -p %SOURCE1 .
cp -pr %SOURCE2 .
cp -pr %SOURCE3 .
cp -p %SOURCE4 .

%build


%install

rm -rf $RPM_BUILD_ROOT

mkdir -p $RPM_BUILD_ROOT/opt
mkdir -p $RPM_BUILD_ROOT/etc
mkdir -p $RPM_BUILD_ROOT/usr
mkdir -p $RPM_BUILD_ROOT/tmp
mkdir -p $RPM_BUILD_ROOT/usr/lib

cp -r $RPM_BUILD_DIR/pijdbcdriver_installer-1.0/pipc $RPM_BUILD_ROOT/opt/pipc
cp -r $RPM_BUILD_DIR/pijdbcdriver_installer-1.0/openssl-0.9.8k-3.4_3.8.1.x86_64.delta.rpm $RPM_BUILD_ROOT/tmp/openssl-0.9.8k-3.4_3.8.1.x86_64.delta.rpm
cp -r $RPM_BUILD_DIR/pijdbcdriver_installer-1.0/openssl-1.0.0k-34.20.1.x86_64.rpm $RPM_BUILD_ROOT/tmp/openssl-1.0.0k-34.20.1.x86_64.rpm
cp -pr $RPM_BUILD_DIR/pijdbcdriver_installer-1.0/lib/* $RPM_BUILD_ROOT/usr/lib
cp $RPM_BUILD_DIR/pijdbcdriver_installer-1.0/test.sh $RPM_BUILD_ROOT

versionsnummerVonOpenSSL=`openssl version -v`
openssslVersionIs_1_0=`echo $versionsnummerVonOpenSSL | awk '{print      index($versionsnummerVonOpenSSL, 1.0)}'`
openssslVersionIs_0_9_8=`echo $versionsnummerVonOpenSSL | awk '{print index($versionsnummerVonOpenSSL, 0.9.8)}'`
openssslVersion_Exists=`echo $versionsnummerVonOpenSSL | awk '{print length($versionsnummerVonOpenSSL)}'`


if [ openssslVersionIs_1_0 > 0 ]
then

  rm $RPM_BUILD_ROOT/opt/pipc/jdbc/lib/libRdsaWrapper-1.3.0a.so
  rm $RPM_BUILD_ROOT/opt/pipc/jdbc/lib/libRdsaWrapper64-1.3.0a.so

elif [ openssslVersionIs_0_9_8 > 0 ]
then


  rm $RPM_BUILD_ROOT/opt/jdbc/lib/libRdsaWrapper-1.3.0b.so
  rm $RPM_BUILD_ROOT/opt/pipc/jdbc/lib/libRdsaWrapper64-1.3.0b.so

elif  [ openssslVersion_Exists = 0 ]
then

  sudo rpm -i tmp/openssl-1.0.0k-34.20.1.x86_64.rpm

  rm $RPM_BUILD_ROOT/opt/pipc/jdbc/lib/libRdsaWrapper-1.3.0a.so
  rm $RPM_BUILD_ROOT/opt/pipc/jdbc/lib/libRdsaWrapper64-1.3.0a.so

else


fi


export DISPLAY=:0
cd /opt/pipc/jdbc/Samples/getSnap/bin
java getSnap koernersnb FRADEV-T6-PI1 sin%


%post

rm -r tmp/openssl-0.9.8k-3.4_3.8.1.x86_64.delta.rpm
rm -r tmp/openssl-1.0.0k-34.20.1.x86_64.rpm



sudo sed -i '/PIJDBCDriver/d' /etc/profile
sudo sed -i '/PI_RDSA_LIB/d' /etc/profile


if [ openssslVersionIs_1_0 > 0 ]
then

  echo "export PI_RDSA_LIB=/opt/pipc/jdbc/lib/libRdsaWrapper-1.3.0b.so" >> etc/profile
  echo "export PI_RDSA_LIB64=/opt/pipc/jdbc/lib/libRdsaWrapper64-1.3.0b.so" >> /etc/profile
  echo "export PI_RDSA_LIB=/opt/pipc/jdbc/lib/libRdsaWrapper-1.3.0b.so" >> $HOME/.bashrc
  echo "export PI_RDSA_LIB64=/opt/pipc/jdbc/lib/libRdsaWrapper64-1.3.0b.so" >> $HOME/.bashrc

elif [ openssslVersionIs_0_9_8 > 0 ]
then
  echo "export PI_RDSA_LIB=/opt/pipc/jdbc/lib/libRdsaWrapper-1.3.0a.so" >> /etc/profile
  echo "export PI_RDSA_LIB64=/opt/pipc/jdbc/lib/libRdsaWrapper64-1.3.0a.so" >> /etc/profile
  echo "export PI_RDSA_LIB=/opt/pipc/jdbc/lib/libRdsaWrapper-1.3.0a.so" >> **$HOME**/.bashrc
  echo "export PI_RDSA_LIB64=/opt/pipc/jdbc/lib/libRdsaWrapper64-1.3.0a.so" >> **$HOME**/.bashrc

    else
  echo "export PI_RDSA_LIB=/opt/pipc/jdbc/lib/libRdsaWrapper-1.3.0b.so" >> /etc/profile
  echo "export PI_RDSA_LIB64=/opt/pipc/jdbc/lib/libRdsaWrapper64-1.3.0b.so" >> /etc/profile
  echo "export PI_RDSA_LIB=/opt/pipc/jdbc/lib/libRdsaWrapper-1.3.0b.so" >> $HOME/.bashrc
  echo "export PI_RDSA_LIB64=/opt/pipc/jdbc/lib/libRdsaWrapper64-1.3.0b.so" >>      $HOME/.bashrc

fi

echo "export CLASSPATH=$CLASSPATH:/opt/pipc/jdbc/PIJDBCDriver.jar:." >> /etc/profile



**%files**

/opt/pipc
/tmp/openssl-0.9.8k-3.4_3.8.1.x86_64.delta.rpm
/tmp/openssl-1.0.0k-34.20.1.x86_64.rpm
/usr/lib
/test.sh
هل كانت مفيدة؟

المحلول

  1. No, you cannot call rpm from within an RPM.
  2. If you require OpenSSL, you tag the RPM as requiring it - I know I sure don't want your version of it installed on my machine; I want the vendor's.
  3. All the stuff in %install checking the versions of OpenSSL is being done on the build machine, not your target machine.
  4. Don't put stuff in people's .bashrc or /etc/profile - that's what /etc/profile.d/ and others are for; you drop a file there, and then when uninstalled you remove it.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top