Alltägliche DevOps: Erstellen von gcc 9.3.1 für CentOS 8

Severstal hat groĂźe Unternehmenssysteme wie SAP oder QMET implementiert, aber es gibt auch viele verschiedene Aufgaben, die unsere eigene Entwicklung abdeckt, und die Aufgaben dieser Entwicklung sind selten einfach. Dies bedeutet, dass die Anforderungen an Entwicklungswerkzeuge sehr spezifisch sind. Was ist, wenn Ihre Entwickler gcc-9 unter CentOS benötigen und es sich nicht in den öffentlichen Repositorys befindet? Krempeln Sie die Ă„rmel hoch und stellen Sie natĂĽrlich die gewĂĽnschten Taschen her. Diese Aufgabe sieht aber nur auf den ersten Blick einfach aus. 





Wenn Sie sich fragen, welche Rechen auf dem Weg zum Ersetzen des System-Compilers ausgelegt sind und wie wir damit umgegangen sind, sind Sie bei cat willkommen. 





Stufe 1. Die eigentliche Montage von gcc 

Hier scheint alles einfach zu sein: Nehmen Sie gcc.spec aus dem Paket gcc-8.3.1, ändern Sie 8 in 9, fĂĽhren Sie rpmbuild –bb aus, wie lange warten wir? Ja aber nein. Zunächst mĂĽssen Sie alle Patches ĂĽberarbeiten und korrigieren und gleichzeitig binutils frischer installieren, da dies nicht schwierig ist. Dann ändern wir nicht nur den Compiler, sondern geben uns weitere nvptx-Tools. Wenn der Build beendet ist und der Test beginnt, hängen die Tests in libgomp, die mit dem Entladen des Codes verbunden sind, hängen und bleiben hängen verschiedene seltsame Positionen ... 





Hier kann es zwei Lösungen geben: 





  1. Konservativ: Sagen Sie den Entwicklern "Entschuldigung, ich konnte es nicht tun" und deaktivieren Sie nvptx-tools. 





  1. : ,  nvptx  ,  rpmbuild, .  tests failed  , . 





Stage 2. Package libgcc.i686 has inferior architecture 

,      gcc-9.3.1-3.el8.x86_64.rpm, gcc-offload-nvptx-9.3.1-3.el8.x86_64.rpm  ..  ..   ,  ,   /etc/yum.repos.d,  dnf update â€¦ , ,  ? . , 64-  Debian  RedHat   x86 32- ( ,  multilib),   multilib    32- , (libgcc.i686, libgfortran.i686, libgomp.i686, libquadmath.i686  libstdc++.i686) . , : 





  1. :  mock      i686, (nvptx, , ). 





  1. : , 32- 64-,      .  gcc.spec  ,  .  gcc.spec  libgcc-i686.spec, %build, %install  : 





%install 

rm -rf %{buildroot} 

mkdir -p %{buildroot} 

tar cf - -C %{_buildrootdir}/%{name}-%{version}-%{release}.x86_64 usr | tar xf - -C %{buildroot} 

 

FULLPATH=%{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major} 

FULLEPATH=%{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major} 

 

# fix some things 

mkdir -p %{buildroot}/%{_lib} 

mv -f %{buildroot}%{_prefix}/%{_lib}/libgcc_s.so.1 %{buildroot}/%{_lib}/libgcc_s-%{gcc_major}-%{DATE}.so.1 

chmod 755 %{buildroot}/%{_lib}/libgcc_s-%{gcc_major}-%{DATE}.so.1 

ln -sf libgcc_s-%{gcc_major}-%{DATE}.so.1 %{buildroot}/%{_lib}/libgcc_s.so.1 

 

mkdir -p %{buildroot}%{_datadir}/gdb/auto-load/%{_prefix}/%{_lib} 

mv -f %{buildroot}%{_prefix}/%{_lib}/libstdc++*gdb.py* \ 

      %{buildroot}%{_datadir}/gdb/auto-load/%{_prefix}/%{_lib}/ 

pushd %{name}-%{version}-%{DATE}/libstdc++-v3/python 

 

for i in `find . -name \*.py`; do 

  touch -r $i %{buildroot}%{_prefix}/share/gcc-%{gcc_major}/python/$i 

done 

touch -r hook.in %{buildroot}%{_datadir}/gdb/auto-load/%{_prefix}/%{_lib}/libstdc++*gdb.py 

popd 

 

for f in `find %{buildroot}%{_prefix}/share/gcc-%{gcc_major}/python/ \ 

       %{buildroot}%{_datadir}/gdb/auto-load/%{_prefix}/%{_lib}/ -name \*.py`; do 

  r=${f/$RPM_BUILD_ROOT/} 

  %{__python3} -c 'import py_compile; py_compile.compile("'$f'", dfile="'$r'")' 

  %{__python3} -O -c 'import py_compile; py_compile.compile("'$f'", dfile="'$r'")' 

done 

 

rm -rf %{buildroot}%{_prefix}/%{_lib}/%{name} 
      
      



 rpmbuild â€“bb libgcc-i686.spec - ,  gcc   torture,  ,  32- ( , $RPM_BUILD_ROOT/RPMS/i686).  , ,  dnf makecache â€“repo gcc-9 && dnf update â€¦ , . 





Stage 3. Annobin  libtool 

,    RHEL  CentOS, ,  gcc   annobin.  , .  annobin.spec  , , : ,  gcc 8.3.1,   gcc,  gcc < %{gcc_next}   gcc <= %{gcc_next}, ,  gcc,  ,  gcc < %{gcc_next}    %undefine _annotated_build â€“ . ,  _annotated_build  , (  ) . 





 libtool.   gcc,  , ,  libtool   gcc,   gcc   gcc-9. 





, . , , , ( dnf downgrade gcc),  . 





-, ? 








All Articles