GNU/Linux >> Belajar Linux >  >> Cent OS

Menyatukan skrip khusus di seluruh sistem dengan rpm di Red Hat/CentOS

Tujuan

Tujuan kami adalah membuat paket rpm dengan konten khusus, menyatukan skrip di sejumlah sistem apa pun, termasuk pembuatan versi, penerapan, dan pelepasan.

Sistem Operasi dan Versi Perangkat Lunak

  • Sistem operasi: Red Hat Enterprise Linux 7.5
  • Perangkat Lunak: rpm-build 4.11.3+

Persyaratan

Akses istimewa ke sistem untuk penginstalan, akses normal untuk pembuatan.

Kesulitan

SEDANG

Konvensi

  • # – membutuhkan perintah linux yang diberikan untuk dieksekusi dengan hak akses root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
  • $ – perintah linux yang diberikan untuk dieksekusi sebagai pengguna biasa yang tidak memiliki hak istimewa

Pengantar

Salah satu fitur inti dari setiap sistem Linux adalah bahwa mereka dibangun untuk otomatisasi. Jika suatu tugas mungkin perlu dijalankan lebih dari satu kali – bahkan dengan beberapa bagian yang berubah saat dijalankan berikutnya – sysadmin dilengkapi dengan banyak alat untuk mengotomatiskannya, dari shell sederhana skrip dijalankan dengan tangan sesuai permintaan (sehingga menghilangkan kesalahan ketik, atau hanya menyimpan beberapa klik keyboard) ke sistem skrip kompleks tempat tugas dijalankan dari cron pada waktu tertentu, berinteraksi satu sama lain, bekerja dengan hasil skrip lain, mungkin dikendalikan oleh sistem manajemen pusat, dll.

Meskipun kebebasan dan perangkat yang kaya ini memang menambah produktivitas, ada satu hal yang menarik:sebagai sysadmin, Anda menulis skrip yang berguna pada suatu sistem, yang terbukti berguna di sistem lain, jadi Anda menyalin skrip tersebut. Pada sistem ketiga, skrip juga berguna, tetapi dengan sedikit modifikasi – mungkin fitur baru hanya berguna di sistem itu, dapat dicapai dengan parameter baru. Generalisasi dalam pikiran, Anda memperluas skrip untuk menyediakan fitur baru, dan menyelesaikan tugas yang ditulisnya juga. Sekarang Anda memiliki dua versi skrip, yang pertama ada di dua sistem pertama, yang kedua di sistem ketiga.

Anda memiliki 1024 komputer yang berjalan di pusat data, dan 256 di antaranya akan memerlukan beberapa fungsi yang disediakan oleh skrip itu. Pada waktunya Anda akan memiliki 64 versi skrip di mana-mana, setiap versi melakukan tugasnya. Pada penerapan sistem berikutnya, Anda memerlukan fitur yang Anda ingat telah dikodekan pada beberapa versi, tetapi yang mana? Dan di sistem mana mereka?

Pada sistem berbasis RPM, seperti rasa Red Hat, sysadmin dapat memanfaatkan pengelola paket untuk membuat pesanan dalam konten khusus, termasuk skrip shell sederhana yang mungkin tidak menyediakan selain alat yang ditulis admin untuk kenyamanan.

Dalam tutorial ini kita akan membuat rpm kustom untuk Red Hat Enterprise Linux 7.5 yang berisi dua bash skrip, parselogs.sh dan pullnews.sh untuk menyediakan cara agar semua sistem memiliki versi terbaru dari skrip ini di /usr/local/sbin direktori, dan dengan demikian pada jalur setiap pengguna yang masuk ke sistem.

Distribusi, versi mayor dan minor

Secara umum, versi minor dan mayor dari mesin build harus sama dengan sistem paket yang akan di-deploy, serta distribusi untuk memastikan kompatibilitas. Jika ada berbagai versi dari distribusi tertentu, atau bahkan distribusi yang berbeda dengan banyak versi di lingkungan Anda (oh, senang!), Anda harus menyiapkan mesin build untuk masing-masing versi. Untuk mempersingkat pekerjaan, Anda cukup menyiapkan lingkungan pembangunan untuk setiap distribusi dan setiap versi utama, dan memilikinya di versi minor terendah yang ada di lingkungan Anda untuk versi utama yang diberikan. Karena mereka tidak perlu menjadi mesin fisik, dan hanya perlu dijalankan pada waktu pembuatan, sehingga Anda dapat menggunakan mesin atau wadah virtual.

Dalam tutorial ini pekerjaan kita jauh lebih mudah, kita hanya men-deploy dua script yang tidak memiliki ketergantungan sama sekali (kecuali bash ), jadi kita akan membangun noarch paket yang berdiri untuk "tidak bergantung pada arsitektur", kami juga tidak akan menentukan distribusi paket yang dibuat. Dengan cara ini kita dapat menginstal dan memutakhirkannya pada distribusi apa pun yang menggunakan rpm , dan untuk versi apa pun – kita hanya perlu memastikan bahwa rpm-build mesin build paket ada di versi tertua di lingkungan.

Menyiapkan lingkungan bangunan

Untuk membangun paket rpm kustom, kita perlu menginstal rpm-build paket:

# yum install rpm-build

Mulai sekarang, kami tidak menggunakan root pengguna, dan untuk alasan yang baik. Membangun paket tidak memerlukan root hak istimewa, dan Anda tidak ingin merusak mesin bangunan Anda.

Membangun versi pertama dari paket

Mari buat struktur direktori yang diperlukan untuk membangun:

$ mkdir -p rpmbuild/SPECS

Paket kami disebut skrip-admin, versi 1.0. Kami membuat specfile yang menentukan metadata, konten, dan tugas yang dilakukan oleh paket. Ini adalah file teks sederhana yang dapat kita buat dengan editor teks favorit kita, seperti vi . rpmbuild yang diinstal sebelumnya package akan mengisi specfile kosong Anda dengan data template jika Anda menggunakan vi untuk membuat yang kosong, tetapi untuk tutorial ini perhatikan spesifikasi di bawah ini yang disebut admin-scripts-1.0.spec :

Name:           admin-scripts
Version:        1
Release:        0
Summary:        FooBar Inc. IT dept. admin scripts
Packager:       John Doe 
Group:          Application/Other
License:        GPL
URL:            www.foobar.com/admin-scripts
Source0:        %{name}-%{version}.tar.gz
BuildArch:      noarch

%description
Package installing latest version the admin scripts used by the IT dept.

%prep
%setup -q


%build

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/sbin
cp scripts/* $RPM_BUILD_ROOT/usr/local/sbin/

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%dir /usr/local/sbin
/usr/local/sbin/parselogs.sh
/usr/local/sbin/pullnews.sh

%doc

%changelog
* Wed Aug 1 2018 John Doe 
- release 1.0 - initial release

Tempatkan specfile di rpmbuild/SPEC direktori yang kita buat sebelumnya.

Kami membutuhkan sumber yang dirujuk di specfile – dalam hal ini dua skrip shell. Mari buat direktori untuk sumber (disebut sebagai nama paket yang ditambahkan dengan versi utama):

$ mkdir -p rpmbuild/SOURCES/admin-scripts-1/scripts

Dan salin/pindahkan skrip ke dalamnya:

$ ls rpmbuild/SOURCES/admin-scripts-1/scripts/
parselogs.sh  pullnews.sh

Karena tutorial ini bukan tentang skrip shell, konten skrip ini tidak relevan. Karena kita akan membuat versi baru dari paket, dan pullnews.sh adalah skrip yang akan kami tunjukkan, sumbernya di versi pertama adalah seperti di bawah ini:

#!/bin/bash
echo "news pulled"
exit 0

Jangan lupa untuk menambahkan hak yang sesuai ke file di sumber – dalam kasus kami, hak eksekusi:

chmod +x rpmbuild/SOURCES/admin-scripts-1/scripts/*.sh


Sekarang kita membuat tar.gz arsipkan dari sumber di direktori yang sama:

cd rpmbuild/SOURCES/ && tar -czf admin-scripts-1.tar.gz admin-scripts-1

Kami siap membuat paket:

rpmbuild --bb rpmbuild/SPECS/admin-scripts-1.0.spec

Kami akan mendapatkan beberapa output tentang build, dan jika ada yang tidak beres, kesalahan akan ditampilkan (misalnya, file atau jalur yang hilang). Jika semuanya berjalan dengan baik, paket baru kami akan muncul di direktori RPMS yang dihasilkan secara default di bawah rpmbuild direktori (diurutkan ke dalam subdirektori berdasarkan arsitektur):

$ ls rpmbuild/RPMS/noarch/
admin-scripts-1-0.noarch.rpm

Kami telah membuat paket rpm yang sederhana namun berfungsi penuh. Kami dapat menanyakannya untuk semua metadata yang kami berikan sebelumnya:

$ rpm -qpi rpmbuild/RPMS/noarch/admin-scripts-1-0.noarch.rpm 
Name        : admin-scripts
Version     : 1
Release     : 0
Architecture: noarch
Install Date: (not installed)
Group       : Application/Other
Size        : 78
License     : GPL
Signature   : (none)
Source RPM  : admin-scripts-1-0.src.rpm
Build Date  : 2018. aug.  1., Wed, 13.27.34 CEST
Build Host  : build01.foobar.com
Relocations : (not relocatable)
Packager    : John Doe 
URL         : www.foobar.com/admin-scripts
Summary     : FooBar Inc. IT dept. admin scripts
Description :
Package installing latest version the admin scripts used by the IT dept.


Dan karena itu kita dapat menginstalnya (dengan root hak istimewa):

Menginstal skrip khusus dengan rpm

Saat kami memasang skrip ke dalam direktori yang ada di $PATH setiap pengguna , Anda dapat menjalankannya sebagai pengguna mana pun di sistem, dari direktori mana pun:

$ pullnews.sh 
news pulled


Paket dapat didistribusikan sebagaimana adanya, dan dapat dimasukkan ke dalam repositori yang tersedia untuk sejumlah sistem. Untuk melakukannya di luar cakupan tutorial ini – namun, membangun versi lain dari paket tersebut tentu saja tidak.

Membangun versi lain dari paket

Paket kami dan skrip yang sangat berguna di dalamnya menjadi populer dalam waktu singkat, mengingat mereka dapat dijangkau di mana saja dengan yum install admin-scripts yang sederhana dalam lingkungan. Akan segera ada banyak permintaan untuk beberapa perbaikan – dalam contoh ini, banyak suara datang dari pengguna yang senang bahwa pullnews.sh harus mencetak baris lain saat dieksekusi, fitur ini akan menyelamatkan seluruh perusahaan. Kami perlu membuat versi lain dari paket, karena kami tidak ingin menginstal skrip lain, tetapi versi baru dengan nama dan jalur yang sama, karena sysadmin di organisasi kami sudah sangat bergantung padanya.

Pertama kita ubah source pullnews.sh di SOURCES ke sesuatu yang lebih kompleks:

#!/bin/bash
echo "news pulled"
echo "another line printed"
exit 0

Kita perlu membuat ulang tar.gz dengan konten sumber baru – kita dapat menggunakan nama file yang sama seperti yang pertama kali, karena kita tidak mengubah versi, hanya merilis (dan dengan demikian Source0 referensi akan tetap berlaku). Perhatikan bahwa kami menghapus arsip sebelumnya terlebih dahulu:

cd rpmbuild/SOURCES/ && rm -f admin-scripts-1.tar.gz && tar -czf admin-scripts-1.tar.gz admin-scripts-1

Sekarang kita membuat specfile lain dengan nomor rilis yang lebih tinggi:

cp rpmbuild/SPECS/admin-scripts-1.0.spec rpmbuild/SPECS/admin-scripts-1.1.spec

Kami tidak banyak mengubah paket itu sendiri, jadi kami hanya mengatur versi baru seperti yang ditunjukkan di bawah ini:

Name:           admin-scripts
Version:        1
Release:        1
Summary:        FooBar Inc. IT dept. admin scripts
Packager:       John Doe 
Group:          Application/Other
License:        GPL
URL:            www.foobar.com/admin-scripts
Source0:        %{name}-%{version}.tar.gz
BuildArch:      noarch

%description
Package installing latest version the admin scripts used by the IT dept.

%prep
%setup -q


%build

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/sbin
cp scripts/* $RPM_BUILD_ROOT/usr/local/sbin/

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%dir /usr/local/sbin
/usr/local/sbin/parselogs.sh
/usr/local/sbin/pullnews.sh

%doc

%changelog
* Wed Aug 22 2018 John Doe 
- release 1.1 - pullnews.sh v1.1 prints another line
* Wed Aug 1 2018 John Doe 
- release 1.0 - initial release

Setelah selesai, kita dapat membangun versi lain dari paket kita yang berisi skrip yang diperbarui. Perhatikan bahwa kami mereferensikan specfile dengan versi yang lebih tinggi sebagai sumber build:

rpmbuild --bb rpmbuild/SPECS/admin-scripts-1.1.spec

Jika pembangunan berhasil, kami sekarang memiliki dua versi paket di bawah direktori RPMS kami:

ls rpmbuild/RPMS/noarch/
admin-scripts-1-0.noarch.rpm  admin-scripts-1-1.noarch.rpm

Dan sekarang kita bisa menginstal script “advanced”, atau upgrade jika sudah terinstal.

Memutakhirkan skrip khusus dengan rpm

Dan sysadmin kami dapat melihat bahwa permintaan fitur mendarat di versi ini:

rpm -q --changelog admin-scripts
* Wed aug 22 2018 John Doe 
- release 1.1 - pullnews.sh v1.1 prints another line

* Wed aug 01 2018 John Doe 
- release 1.0 - initial release

Kesimpulan

Kami membungkus konten khusus kami ke dalam paket rpm berversi. Ini berarti tidak ada versi lama yang tersebar di seluruh sistem, semuanya ada di tempatnya, pada versi yang kami instal atau tingkatkan. RPM memberikan kemampuan untuk mengganti hal-hal lama yang dibutuhkan hanya di versi sebelumnya, dapat menambahkan dependensi khusus atau menyediakan beberapa alat atau layanan yang diandalkan oleh paket kami yang lain. Dengan susah payah, kami dapat mengemas hampir semua konten khusus kami ke dalam paket rpm, dan mendistribusikannya ke seluruh lingkungan kami, tidak hanya dengan mudah, tetapi dengan konsistensi.


Cent OS
  1. Cara Memantau Sistem dengan Sysstat di Centos

  2. Cara Mengatur Nama Antarmuka Kustom dengan NetworkManager di CentOS/RHEL 7

  3. Cara Mengintegrasikan sistem CentOS/RHEL ke dalam Domain AD dengan LDAP/Kerberos/SSSD

  1. Selamatkan sistem Anda dengan mode pengguna tunggal di CentOS 6 / RHEL 6

  2. Linux – Menjalankan Program Sebagai Root Dengan Kata Sandi Sendiri Di Scientific Linux/red Hat/fedora/centos?

  3. Postgresql 9.3 di Centos 7 dengan PGDATA khusus

  1. Cara Memeriksa Versi Linux Red Hat (RHEL) yang Terinstal di Sistem Anda

  2. Cara Mendaftar Paket yang Terinstal di CentOS dengan Yum atau RPM

  3. Tidak Dapat Memperpanjang Sistem File LVM dengan Snapshot Terkait di CentOS/RHEL