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):
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 DoeGroup: 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 rpmDan 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.