WSL üzerinde çalışan ubuntu veya diğer ürünlerin versionunu görüntülemek için aşağıdaki komut kullanılır.
wsl -l -v
NAME STATE VERSION
docker-desktop-data Stopped 2
Ubuntu-20.04 Running 1
docker-desktop Stopped 2
Ubuntu versionunu 2 yapmak için kullanılacak komut, kurulu olan ubuntu versiyonuna göre aşağıdaki şekilde yapılmaktadır. Örnekteki 20.04 sürümü kurulumunuza göre değişebilir.
wsl --set-version Ubuntu-20.04 2
Conversion in progress, this may take a few minutes…
For information on key differences with WSL 2 please visit https://aka.ms/wsl2
Conversion complete.
İşlem tamamlandıktan sonra yeni version listesi aşağıdaki gibi olacaktır.
wsl -l -v
NAME STATE VERSION
docker-desktop-data Stopped 2
Ubuntu-20.04 Running 2
docker-desktop Stopped 2
Docker container teknolojisi, Linux işletim sisteminin çekirdeğine 2008 yılında eklenen Linux Containers (LXC) özelliği ile birlikte doğmuş bir fikirdir. LXC, Linux işletim sistemindeki control groups (cgroups) ve namespaces özellikleri kullanılarak uygulandı ve herhangi bir patch gerektirmeden tek bir Linux çekirdeği üzerinden çalıştırıldı.
Namespaces özelliği, işletim sistemi üzerinde birden fazla process yada uygulama birbirinden izole bir şekilde uygulanbilirliği sağlar. Örneğin Network, Mount, User, Control Group gibi birden fazla namespace bulunabilmektedir.
Control Groups (cgroups) özelliği ise google mühendisleri tarafından linux işletim sistemine eklenmiş bir özelliktir. Bu özellik sayesinde namespace ile izole edilen process’lere ya da uygulamalara CPU, I/O, memory, network gibi kaynak sınırlaması getirilebilmektedir.
Bu gelişmeler ile birlikte Linux işletim sisteminde çalışan iki farklı A ve B uygulamlarını Linux namespaces özelliği ile izeole edip, control groups özelliği ile de A uygulamasına 4Gb Ram, 2 CPU ve B uygulamasına da 2Gb Ram, 1CPU kullanım sınırlaması gibi yapılandırmalar sağlanabilir hale geldi.
Uygulamaların izolasyonu sayesinde her uygulama için bir sanal makine açmak yerine, bir LXC açarak daha ölçeklenebilir bir mimari tasarlanmıştır. Çünkü her uygulama için açılan sanal makinede kullanılamayan atıl kapasiteler meydana gelmektedir. Container yapısı sayesinde atıl kapasiteler daha uygun bir biçimde bölüştürülerek daha fazla uygulamaya hizmet verebilecek hale gelmiştir.
Linux Container ile uygulamaların izolasyonu için ayarlamaların yapılması, paket halinde sunulmuş bir çözüm değildi. Bu nedenle uygulamalarını izole etmek isteyen developer’lar için LXC kullanmak biraz zahmetliydi. Bunun çözümünü 2013 yılında San Francisco’da dotClud firması, Docker isimli açık kaynak kodlu biz çözüm geliştirerek kullanıcılara sunmuştur. Bu gelişme ile birlikte developer ve mühendisler, Docker teknolojisi ile çalışarak, uygulama izolasyonunu kolay bir şekilde sağlayabilmiş ve bu nedenle Docker teknolojisi çok hızlı bir biçimde yaygınlaşmıştır.
Docker her ne kadar açık kaynak ve ücretsiz olsa da, 2014 yıllarında Docker firması şirketlerin ihtiyaçlarını karşılayacak ürünler geliştirerek Docker Enterprise versiyonunu da piyasaya sunmuştur.
Docker nasıl çalışır?
Docker’ın çalışabilmesi için öncelikle siteme bir docker engine kurulmalıdır. Docker engine, aşağıdaki üç temel bileşeni kullanarak uygulamaları geliştirmenize, birleştirmenize, göndermenize ve çalıştırmanıza imkan sağlar. (https://www.docker.com üzerinden indirilerek kurulum yapılabilir.)
Docker Engine REST API: Docker daemon servisine dışarıdan CLI veya uygulamalar tarafından Rest API aracılığı ile erişerek komutlar verebilmeyi sağlayan bileşendir.
Docker CLI: Docker daemon ile iletişim kurmayı sağlayan komut satırı ya da konsol arayüz bileşenidir.
Docker sayesinde tek bir işletim sistemi üzerinde birden fazla uygulama birbirinden izole bir şekilde çalışabilmektedir.
Windows Üzerinde Docker Kullanımı
Docker kurulabilmesi için Windows’un sanallaştırma özelliğinin açılması istenir. Docker mimarisi Linux üzerinde inşa edildiğinden dolayı Windows işletim sisteminde de kurulan Docker desktop uygulaması, Windows işletim sistemi üzerinde bir Linux sanal makine oluşturmaktadır. Bu sanal makine üzerine docker kurulmaktadır.
Docker Mimarisi
Docker mimarisi, client-server modelini kullanır ve Docker Client, Docker Host, Network, Storage ve Docker Registery/Hub bileşenlerinden oluşur.
Docker Mimarisi
Docker Client
Kullanıcıların Docker Daemon ile iletişim kurabilmesini sağlar. Bir client aynı hostta bulunan Daemon ile veya uzaktaki bir hostta bulunan Daemon ile bağlantı kurabilir. Docker client, kullanıcılara sunduğu komut satırı arabirimi (CLI) ile daemon üzerinde build, run, stop gibi komutlar ile işlemler yapabilmeyi sağlar. Temel amacı, imajların regestry kaynağından çekilerek host’ta çalışmasını sağlamaktır. Genel client komutları:
docker build
docker pull
docker run
Docker Host
Uygulamaları çalıştırmak ve yürütmek için sunulan ortamdır. Host bileşenleri; Docker Daemon, Imaj, Container, Nerwork ve Storage şeklindedir. Docker daemon bütün komutları CLI üzerinden Rest API aracılığı ile alır. Gerektiğinde hizmetlerini yürütebilmek için diğer daemon’lar ile iletişim kurabilir. Daemon, client tarafından istenen container imajlarını çeker ve build eder. Client tarafından istenen imajı çektikten sonra build file(Dockerfile) olarak adlandırılan dosyadaki talimatları uygulayarak container için çalışan bir model oluşturur. Dockerfile içerisinde, container çalıştırılmadan önce Daemon tarafından yüklenmesi gereken bileşenlere ait yönergeler veya container çalıştırıldıktan sonra komut satırından çalıştırılacak talimat ve komutlar bulunmaktadır.
Docker Objects
Uygulamanın container üzerinde ayağa kaldırılması sırasında birçok obje kullanılır. Bunlar:
Image
Container
Network
Storage
Image
Image nesnesi, container oluşturmak için kullanılan salt okunur bir binary şablondur. Container ihtiyaçlarını ve yeteneklerini açıklayan meta veriler içerir. Temel olarak uygulamaları depolamak ve taşımak için kullanılır. Örneğin bir asp.net uygulaması yazdığınızda, bu uygulama için oluşturulan container image nesnesi, uygulamanın bütün bağımlılıklarını ve runtime ortamını içeren bir paket şablon oluşturulur. Bu imajlar, şirket içerisinde özel olarak veya dış dünya ile genel olarak Docker Hub gibi genel kayıt alanlarına aktarılarak paylaşılabilir.
Container
Imaj ile planlanmış ve hazırlanmış uygulamanın çalışan haline container denir. Bir imajdan container oluşturulurken network ve storage gibi ek sınırlamalar belirlenebilir. Container çalıştırıldıktan sonra, çalışan container’a bağlanarak içerisinde konfigurasyon ayarları yapmak ta mümkündür. Ancak bu pek önerilen bir işlem değildir. Bunun yerine imaj içerisinde gerekli düzenlemeler yaparak yeniden bir container oluşturmak daha iyi bir yöntemdir. Çünkü container’lar kullan at mantığında çalıştırılan objeler olduğu için, container içerisinde bir problemin çözülmesi durumunda o anlık çözüm oluşturulmuş olur. Container yeniden oluşturulduğunda aynı problem ile ayağa kalkacaktır.
Bir imajdan bir container oluşturulurken ek erişim belirtilmedikçe container sadece imajda belirlenen kaynaklara erişebilir. Container’lar sanal makinelerden çok daha küçük boyutta olduğundan dolayı saniyeler içinde ayağa kalkabilirler. Aynı imajdan birden fazla container oluşturmak da mümkündür.
Network
Docker uygulama odaklı bir biçimde ağ oluşturmayı sağlar ve geliştiricilere ağ ayarlarını belirleme imkanı sunar. Temel olarak Default Doceker Network ve User Defined Network olmak üzere iki türlü ağ kullanılabilmektedir. Varsayılan olarak Default kurulumunda None, Bridge ve Host olmak üzere üç farklı ağ tanımlıdır. None ve Host ağları Docker’daki ağ yığınının bir parçasıdır. Bridge ise otomatik olarak bir gateway ve IP subnet oluşturur ve bu ağa dahil tüm container’lar IP adresleme yoluyla birbirleri ile konuşabilirler. Ancak default bridge network iyi ölçeklenemediği ve ağ kullanılabilirliği açısından kısıtlamaları olduğu için pek tercih edilmez.
Dİğer bir tür ise user-defined ağlardır. Yöneticiler, birden çok kullanıcı tanımlı ağı yapılandırabilir. Bunlar:
Bridge Network: Default bridge network ile benzer şekilde çalışır ancak farklı olarak ağ içindeki konteynerlerin birbirleriyle iletişim kurmaları için port yönlendirmeye gerek yoktur. Diğer fark, otomatik ağ keşfi için tam desteğe sahip olmasıdır.
Overlay Network: Container’ların farklı host’larda barındırıldığı durumda overlay network (yerel paylaşım ağı) kullanılır. Burada dikkat edilmesi gereken şey, Docker engine’lerin swarm modunun cluster için etkinleştirilmesi gerekir.
Macvlan Network: Bridge ve Overlay ağlarını kullanırken, container ile host arasında bir köprü bulunur. Bir Macvlan ağı bu köprüyü kaldırarak, port yönlendirme ile uğraşmadan container kaynaklarını harici ağlara gösterme imkanı sağlar. Bu işlem, IP adresleri yerine MAC adresleri kullanılarak gerçekleştirilir.
Storage
Container içerisinde veri saklayabilmek için bir writable layer bulunur. Container silindiğinde bu writable-layer da silineceğinden dolayı veri kaybı yaşanır. Örneğin bir postgresql container oluşturulup içerisine veriler kaydedildikten sonra container silinirse veritabanına kaydedilen bütün bilgiler de silinmiş olur. Kalıcı veri depolaması için Docker dört seçenek sunar.
Data Volumes: Kalıcı bir depolama birimi oluşturma, birim ismini değiştirme, birimleri listeleme ve ayrıca birim ile ilişkili container’ları listelemeyi sağlar. Depolama birimi(volume) host dosya sistemi üzerinde oluşturulur. Veriler container dışına aktarıldığı için container silindiğinde kaybolmaz. Yeni oluşturulan container için aynı dosya yolu berlilendiğinde yeni container da aynı yere yazabilir.
Data Volume Container: Özel bir container üzerine bir depolama birimi oluşturularak diğer container’ların da buraya yazması sağlanabilir. Bu sayede volume container ile application container birbirinden bağımsız olur ve bu sayade birden fazla container ile paylaşılabilir.
Directory Mounts: Host’ta bulunan bir dizinin bir container’a monte edilmesidir. Önceki bahsedilen durumlarda depolama birimlerin(Volume) Docker birimleri klasörü içinde olması gerekirken, directory mout söz konusu olduğunda, host’taki herhangi bir dizin birim için kaynak olarak kullanılabilir.
Storage Plugins: Harici depolama platformlarına bağlanma yeteneği sağlar. Bu eklentiler, depolamayı ana bilgisayardan bir depolama dizisi veya bir cihaz gibi harici bir kaynağa eşler. Docker’ın Eklenti sayfasında bir depolama eklentisi listesi bulunabilir.
HPE 3PAR
EMC (ScaleIO, XtremIO, VMAX, Isilon)
NetApp
Azure File Storage
Google Compute Platform
Docker Registries
Imajları depolayabileceğiniz ve indirebileceğiniz konumlar sağlayan hizmetlerdir. Başka bir deyişle, bir Docker registry, bir veya daha fazla Docker imajını barındıran Docker depolarını içerir. Public regitery’ler Docker Hub ve Docker Cloud ortamlarıdır. Genel registery komutları:
Linux distribution yani Linux dağıtımları, işletim sistemi çekirdeği üzerine yazılmış uygulamalar ve bu uygulamaları kullanmayı sağlayan grafik (GUI) veya komut (CLI) kullanıcı arayüzler ile paketlenmiş ürünlere Linux distribution denir. Bunun yanında, mevcut bir dağıtımı temel alarak da yeni dağıtımlar üretilebilmektedir. Örnek Linux dağıtımları;
Debian
Ubuntu
Red Hat
Fedora
Mint
Alphine
Tüm linux dağıtımları çekirdek olarak aynıdır. Ancak kullanıcı arayüzleri ve programları ile farklılık gösterirler. Bazı linux dağıtımlarında kullanıcı dostu arayüzler sağlanırken bazı dağıtımlarda gereksiz olan her şey çıkartılarak iş odaklı ve light weight ürünler sunulmaktadır.
Linux dağıtımları, bilgisayarın diski üzerine kurulabildiği gibi, hiç kurulum yapmadan flash disk veya cd üzerinden de kullanılabilmektedir.
İsteyen herkes kendi Linux dağıtımını geliştirip sunabilir. Bu durum linux dünyasının özgür yazılım ilkesine uygundur.
Ülkemizde geliştirilen Linux dağıtımları aşağıdaki gibidir.
Günümüzde binlerce Linux dağıtımı piyasaya sürülmüş durumdadır. Bu sürümlerden bazıları geniş bütçeli şirketler tarafından desteklenerek finanse edilmektedir. Her ne kadar özgür bir dünya sunulsa da bazı Linux dağıtımları için sunulan destek ve ürünler firmalar tarafından ücretli bir şekilde sunulmaktadır.
Linux dosya türlerini tanıdıktan sonra anlaşılması gereken diğer konu dosya sistemidir. Linux veya Unix işletim sistemlerinde tek bir kök dizin (root directory) bulunur. Windows işletim sisteminde partition sayısına bağlı olarak C, D, E gibi birden fazla kök dizin bulunabilmektedir. Ancak Linux ve Unix işletim sisteminde tüm dosya ve dizinler tek bir kök dizin altında hiyerarşik olarak bulunurlar. Kök dizin “/” karakteri ile temsil edilmektedir. Sürücü bölümleri, kök dizinin altındaki dizinlere monte edilir.
/
/bin
/boot
/dev
/home
/lib
/media
/mnt
/opt
/proc
/proc
/root
/sbin
/srv
/sys
/tmp
/usr
/var
/lib64
/bin (Temel kullanıcı komutları)
Linux işletim sisteminin bir parçası olan ve tüm kullanıcılar tarafından yürütülebilir programları içerir. Cat, cp, ls, more ve tar gibi birçok Linux komutu bu dizinde bulunur.
/boot (Sabit önyükleme dosyaları)
Kernel ve bootloader dosyalarını içerir.
/dev (Aygıt dosyaları)
Aygıt dosyalarını içerir.
/etc (Konfigürasyon noktaları)
İşletim sistemine özel konfigürasyon dosyalarını içerir.
/home (Kullanıcı ana dizinleri)
Kullanıcılara ait ana dizindir. Örneğin kullanıcı adı “bayram” olan bir kullanıcı için sistemde /home/bayram şeklinde bir dizin mevcuttur.
/lib (Temel paylaşılan kütüphaneler)
32 bit sistemler için kernel modülleri ve paylaşılan program kütüphanelerini içerir.
/media (Takılıp çıkarılabilir medya)
Bilgisayara takılıp çıkarılabilir medya aygıtlarının bağlandığı alt dizinleri içerir. Örneğin, Linux sisteminize bir CD yerleştirdiğinizde, /media dizininde otomatik olarak bir dizin oluşturulur ve bu dizinin üzerinden CD’nin içeriğine erişebilirsiniz.
/mnt (Geçici bağlanma noktaları)
Boş bir dizindir. Geçici olarak monte (mount) edilen dosya sistemleri için kullanılan bir dizindir. Montaj, bir dosya sistemini sistem tarafından kullanılabilir hale getirme işlemidir. Standart bağlama noktaları /mnt/cdrom ve /mnt/floppy şeklindedir.
/opt (İsteğe bağlı paketler)
İsteğe bağlı yazılım paketleri için alt dizinler içerir. Genellikle derlediğiniz yazılımların bulunduğu yerdir. Uygulamalar /opt/bin dizininde ve /opt/lib dizinindeki kitaplıklarda bulunur.
/proc (Kernel ve işlem dosyaları)
Sistem durumu ve işlemlerin durumlarını içerir. /dev gibi sanal bir dizindir. Bilgisayarınız hakkında, CPU’nuz ve Linux sisteminizin çalıştırdığı çekirdek gibi bilgiler içerir.
/root (Kök giriş dizini)
Bu dizin, superuser olan ve administrator olarak bilinen root kullanıcısına ait ana dizindir. root kullanıcısının dosyaları /home yerine burada bulunur.
/sbin (Sistem yönetim dosyaları)
Sistem binary komutlarını içerir. Superuser kullanıcısının çalıştırabileceyi uygulamaları içerir. Bu uygulamaları sudo komutu ile kullanabilirsiniz.
/srv (Servis verisi)
Sistem tarafından sunulan hizmetler (HTTP, FTP vb.) İçin veri içerir. Linux kutunuzdan bir web sunucusu çalıştırıyorsanız, siteleriniz için HTML dosyalarınız /srv/http (veya /srv/www) içine gider. Bir FTP sunucusu çalıştırıyorsanız, dosyalarınız /srv/ftp‘ye gider.
/sys
Linux çekirdeği tarafından görüldüğü gibi, aygıtlar hakkında bilgi içeren özel bir dizin.
/tmp (Geçici dosyalar)
Uygulamalar geçici dosyaları /tmp dizininde depolar. Bu dosyalar genellikle sisteminiz her yeniden başlatıldığında silinir ve tmpwatch gibi yardımcı programlar tarafından herhangi bir zamanda silinebilir.
/usr (Kullanıcı dosyaları ve salt okunur Veriler)
Sistem tarafından kullanılan uygulamaların ve dosyaların aksine, kullanıcılar tarafından kullanılan uygulamaları ve dosyaları içerir. Örneğin, temel olmayan uygulamalar /bin dizini yerine /usr/bin dizininde bulunur ve temel olmayan sistem yönetim ikili dosyaları /sbin dizini yerine /usr/sbin dizininde bulunur.
/var (Değişken veri dosyaları)
Zaman, sayı ve boyut olarak zamanla değişme eğilimi olan log, mail dizinleri, yazdırma kuyruğu biriktirme gibi çeşitli sistem dosyalarını içerir.
/lib64
64 bit sistemler için kernel modülleri ve paylaşılan program kütüphanelerini içerir.
Linux ve Unix öğrenirken bilinmesi gereken önemli konulardan biri dosya sistemidir.
Anlamamız gereken ilk şey, Linux ve Unix’in genel olarak, donanım birimleri de dahil her şeye bir dosya olarak davranacak şekilde tasarlanmış olmasıdır. Linux işletim sistemi çalışırken, gerekli olan dosyayı açar okur veya yazar ardından da kapatır. Her şeye dosya olarak bakıldığından dolayı dosya sistemine ait standartlar oluşturulmuştur.
Regular (Normal)
Normal dosyalar genel olarak html, text, word veya çalıştırılabilir dosyalardır.
Directory (Dizin)
Linux işletim sisteminde dizin, diğer dosya türlerini tutmak veya işaret etmek için özel olarak tasarlanmış bir dosya türüdür.
Link (Bağlantı)
Linux / UNIX sistemlerinde iki tür link (bağlantı) vardır.
Soft/Symbolic Link: Bir dosya veya dizinin dolaylı bir göstergesidir. Sabit bağlantının aksine, sembolik bağlantı farklı bir dosya sistemindeki veya bölümdeki bir dosyayı veya dizini işaret edebilir. Windows işletim sistemindeki bir kısayol gibidir.
Hard Link: Sabit bir bağlantıyı mevcut bir dosya için ek bir ad olarak düşünebilirsiniz. Sabit bağlantılar iki veya daha fazla dosya adını aynı inode ile ilişkilendirir. Çok fazla tercih edilmez.
Special (Aygıtlara özel)
Character File: Tek karakterlik girişi kabul edereler. Klavye Giriş/Çıkış işlemleri, yazıcı, teyp sürücüsü veya terminal gibi gerçek bir fiziksel aygıtı temsil etmek için kullanılır.
Block File: Sabit disk gibi depolama aygıtlarını gösterir.
Pipe File: Uygulamalar arasında bilgi göndermeye izin verir. Bir uygulama, başka bir uygulamaya bilgi gönderecekse pipe file kullanır.
Socket File: Pipe file gibi çalışır. Ancak bilgi alışverişinin ağ ortamında yapıldığında devreye girer.
Linux işletim sistemin nasıl çalıştığını anlamak için, Linux temel bileşenlerini bilmek gerekmektedir.
Kernel (Çekirdek)
Bir işletim sisteminin çekirdeği ve en temel birimidir. Her işletim sisteminde sadece bir tane Kernel bulunur. Ağırlıklı olarak C programlama dili ile geliştirilmiş programlardan meydana gelmiştir. Kernel, bilgisayar donanımı ile doğrudan iletişim kurar. Kernel’in işletim sistemindeki bazı temel görevleri:
Kullanıcının yetkili bir kullanıcı olup olmadığını kontrol etmek.
Çalıştırılan programları izlemek ve her programa belirli bir zaman ayırmak..
Sistemdeki dosyalar için depolama alanı atamak.
Shell programlarını çalıştırmak.
Bilgisayarlar ve terminaller arasında bilgi aktarımı yapmak.
Shell (Kabuk)
Linux işletim sistemi, komutları klavyeden bilgisayara aktarmak için shell bileşenini kullanır. Shell de C programlama dili ile yazılmış bir programdır. Kullanıcı programları ve kernel arasında tercüman görevi görür. Kullanıcı komutlarını eyleme dönüştürür. Shell, komutları alan ve uygun programı yürüten ya da çekirdeğin anladığı yönergelere çeviren bir programdır.
Shell kullanıcılarla etkileşime girerken, kernel makinenin donanımıyla etkileşime girer.
Örneğin shell, klavyeden girdiğimiz “ls” komutunu kernel tarafından anlaşılabilecek bir formata dönüştürür.
Linux’ta varsayılan shell bash’tir.
User Programs (Kullanıcı Programları)
Linux işletim sisteminde bir takım araçlar vardır. Bu araçlar, işletim sisteminin kullanımını kolaylaştırmak amacıyla üçüncü şahıslar veya firmalar tarafından yazılmış kullanıcı programlarıdır. Bu araçlar, programlama, iş uygulamaları ve Office, vi gibi kelime işleme uygulamaları şeklinde gruplandırılabilir.
PostgreSQL veritabanı, Linux gibi tamamen ücretsizdir ve açık kaynak kodludur. Bu yazıda Linux Ubuntu 18.04 dağıtımı üzerine PostgreSQL kurulumu anlatılmaktadır.
Ubuntu 18.04 dağıtımı üzerine Postgresql 12 kurulumu yapmak için öncelikle repository paket versiyonunu kontrol etmek gerekmektedir. Repository paket kontrolünün nasıl yapıldığına bir önceki yazıdan ulaşabilirsiniz.
PostgreSQL Kurulumu
Ubuntu sürümünüzde bulunan PostgreSQL sürüm istediğiniz sürüm değilse, güncellemek için PostgreSQL Apt Repository kullanılabilir. Bunun için öncelikle yapılması gereken:
/etc/apt/sources.list.d/pgdg.list
dosyası oluşturmaktır. Bu dosyanın içerisine aşağıdaki satır eklenmelidir.
deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main
Daha sonra depo imzalama anahtarını (signing key) içe aktarılmalı ve paket listeleri güncellenmelidir.
sudo apt-get update
Artık ortam postgresql 12 yüklemesi için hazır durumdadır. Yükleme komutu:
Yükleme tamamlandığında, postgresql servisini başlatmak için gerekli komut:
sudo systemctl start postgresql
artık servis durumu kontrol edilebilir.
sudo systemctl status postgresql
PostgreSQL Bağlantısı
PostgreSQL kurulumu sonrasında Ubuntu kullanıcılarına postgres adında bir sistem kullanıcısı otomatik olarak oluşturulur. Başlangıçta, diğer kullanıcılar oluşturulana kadar bu kullanıcısı ile PostgreSQL’e bağlanmanız gerekir.
sudo su postgres
komutu ile postgres kullanıcısına geçilerek psql komutu çalıştırıldığında artık veritabanı komutlarını kullanabilirsiniz.
\l
komutu ile veritabanları listelenebilir.
\c postgres
komutu ile postgres veri tabanına bağlanabilirsiniz. (Kurulum sırasında postgres veritabanı otomatik olarak oluşturulur.)
Postgresql veritabanını konsol ortamından yönetmek biraz kullanışsızdır. Bunun yerine pgAdmin, Datagrip gibi araçlar tercih edilmelidir.
PostgreSQL Remote Ayarları
Postgresql sunucusu dışından bağlantı yapabilmek için uzak bağlantı ayarlarını yapmak gerekmektedir. Bu ayarlar aşağıdaki dosyada bulunmaktadır.
/etc/postgresql/12/main/postgresql.conf
Bu dosya vim editörü ile açılarak
listen_addresses = '*'
satırı açık konuma getirilmelidir.
Daha sonra,
etc/postgresql/12/main/pg_hba.conf
dosyasında ip tanımlaması yapılmalıdır. (hba: host based authentication)
“host all all 212.0.103.8/32 md5″ şeklinde ayarlama yaparsanız istediğiniz tek bir adresten erişim sağlayabilirsiniz. Bu ip dışından bağlantı sağlanamaz.
“host all all 0.0.0.0/0 md5″ şeklinde ayarlama yaparsanız herhangi bir ip üzerinden sunucuya bağlanabilirsiniz. Burada password authentication kimlik doğrulama yöntemi ve md5 algoritması kullanılmıştır. (Postgresql veri tabanında ayrıca trust, ident, peer, GSSAPI, LDAP kimlik doğrulama yöntemleri de mevcuttur.)
(Postgre
Bu ayarların yapıldıktan sonra aktif olabilmesi için postgresql servisinin yeniden başlatılması gerekmektedir.
Window gibi işletim sistemlerinde, kullanmak istediğimiz programlar exe, msi gibi paketler halinde dağıtılırken, Ubuntu gibi sistemlerde, ihtiyacınız olan programlar ve kitaplıklar .deb dosyalarında paketlenir ve dağıtılır. Bu dosyalar indirilebilir veya CD ortamında size gelebilir.
Ubuntu gibi sistemlerde “repository” diye adlandırılan paket depoları mahiyetinde kullanılan sunucular bulunmaktadır. Bu depolarda bulunan paketlere genellikle Synaptic gibi araçlarla erişirsiniz. Bu araçlar, sisteminizde yüklü olan paketleri ve depoda yüklemeye hazır durumda bulunan paketlerin listeler.
Ubuntu kurulduğunda mevcut Synaptic repository listesinde, kullanıcılara gerekli olan programların o güne kadar güncellenmiş sürümleri bulunmaktadır. Ancak programlar işletim sistemlerinden daha hızlı gelişim gösterebilmektedirler. Ubuntu ortamına kurulmak istenen bir program “apt-get install” komutu ile yüklenirse, listedeki son sürümü indirip yüklenir. Bu nedenle, bir programı yüklemeden önce versiyon kontrolü yapmak faydalı olabilir. Örneğin postgresql versiyon kontrolü için kullanılacak komut şu şekildedir:
apt-cache policy postgresql
Bu komut çalıştırıldığında, sistemdeki postgresql durumunu listeler.
Listede 3 farklı sürümden bahseder. Bunlar; 10.13-1.pgdg18.04, 10.12-0ubuntu0.18.04.1 ve 10.3-1. Ayrıca hangi depolardan geldiklerini de gösterir.
Installed (none) bilgisi bize sistemde yüklü bir postgresql kurulumu olmadığını gösterir.
Candidate bilgisi, şu anda apt-get install komutu çalıştırıldığında yüklenecek sürüm bilgisini verir.
Ubuntu ortamında kullanılan “sudo” komutu, “super user do” anlamına gelmektedir. Yani sudo komutunu kullanmak için yönetici yetkilerine sahip olmak gerekmektedir. Bir kullanıcının super user olması için “sudo” grubuna dahil olması gerekmektedir. Öncelikle bir kullanıcı oluşturulması gerekmektedir.
1. Giriş
sudo yetkili kullanıcıların oluşturulabilmesi için öncelikle root kullanıcısı ile ya da root yetkili bir kullanıcı ile giriş yapmak gerekmektedir.
ssh root@server_ip_address
2. Kullanıcı hesabı oluştur
Yeni kullanıcı oluşturmak için adduser ve useradd komutları kullanılır.
useradd ve adduser komutları arasında ne fark var?
useradd , aslında sistemle derlenmiş yerel bir binary dosyadır. adduser ise arka tarafta useradd binary dosyasını kullanan bir perl script’tir.
2.1 adduser komutu ile kullanıcı ekle
Yeni kullanıcı oluşturma işlemi adduser komutu ile yapılmaktadır. Örneğin bucuncuadında bir kullanıcı oluşturmak için gerekli komut aşağıdaki şekildedir.
adduser bucuncu
Komut çalıştırıldığında aşağıdaki işlemler gerçekleştirilerek kullanıcı hesabı ve dosyaları oluşturulur.
root@localhost:~# adduser bucuncuAdding user `bucuncu’ …
Adding new group `bucuncu’ (1001) …
Adding new user `bucuncu’ (1001) with group `bucuncu’ …
Creating home directory `/home/bucuncu’ …
Copying files from `/etc/skel’ …
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for bucuncu
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
Parolayı girdikten sonra, kullanıcı için otomatik olarak bir giriş dizini oluşturur, giriş dizinindeki birkaç yapılandırma dosyasını kopyalar ve yeni kullanıcının bilgilerini ayarlamanız istenir. Tüm bu bilgileri boş bırakmak istiyorsanız, varsayılanları kabul etmek için ENTER tuşuna basmanız yeterlidir..
adduser komutu, kullanıcı hesabının otomatik bir şekilde oluşturan, kullanıcı dostu bir komuttur.
2.2 useradd komutu ile kullanıcı ekleme
useradd komutu, parametreler kullanarak kullanıcı oluşturma işlemi için kullanılan komuttur.
Bu komut ile kullanıcı oluşturulurken, kullanıcı için gerekli olan tüm parametreler elle girilmelidir.
-m parametresi: –create-home anlamına gelir ve eğer daha önce oluşturulmamış ise home/bucuncu dizinini oluşturur.
-s parametresi: –shell anlamına gelir. Kullanıcının shell de oturum açması için gereklidir. Bu paramtreyi kullanmadan bir kullanıcı oluşturursanız, /etc/passwd içerisinde kullanıcıyı bucuncu:x:1000:1000::/home/bucuncu:/bin/sh şeklinde bulunur. Bu şekilde oturum açtığınızda terminalde yalnızca $: şeklinde bir terim görürsünüz. Eğer bu parametreyi kullanırsanız, /etc/passwd içerisinde kullanıcıyı bucuncu:x:1000:1000::/home/bucuncu:/bin/bash şeklinde görebilirsiniz. Bu şekilde oturum açtığınızda terminalde komut satırını bucuncu@localhost:~# şeklinde görebilirsiniz.
-g parametresi: –gid anlamınag elir. Yani grup id olarak adlandırılabilir.
-G parametresi: –groups anlamına gelir. Kullanıcıyı birden çok gruba eklemek için gereklidir.
useradd komutu için gerekli bütün parametrelere buradan ulaşabilirsiniz.
3. Kullanıcıyı sudo grubuna ekle
Ubuntu sistemlerinde varsayılan olarak, sudo grubunun üyelerine sudo erişim yetkisi verilir. sudo grubunda olmayan kullanıcılar sudo komutunu kullanamazlar. Çünkü sudo komutu yönetici yetkilerine sahip işlemler için gereklidir.Oluşturulan kullanıcıyı sudo grubuna eklemek için usermod komutu kullanılır.
usermod -aG sudo bucuncu
4. Yeni kullanıcı ile giriş yap
Oluşturulan yeni kullanıcı ile giriş yapmak için gerekli komut aşağıdaki şekildedir.
ssh bucuncu@localhost
5. Kullanıcı şifresini değiştir
Kullanıcı şifresini değiştirmek için:
sudo passwd bucuncu
komutu kullanılabilir. Komut çalıştığında iki defa yeni şifre girmeniz istenir.
Sonuç
Sudo yetkilerine sahip bir kullanıcı oluşturmayı görmüş olduk. Bu işlemi gerçekleştirirken useradd ve adduser komutlarının kullanılabileceğini ve bu komutlar arasındaki farkları öğrenmiş olduk. Artık bu kullanıcı hesabıyla Ubuntu sunucunuza giriş yapabilir ve yönetici komutlarını çalıştırmak için sudo komutunu kullanabilirsiniz.
Linux işletim sisteminin temelini atan Linus Torvalds, bunu 28 yıl önce mütevazi bir e-posta ile “comp.os.minix” kullanıcı grubuna duyurdu.
Diğer programcılara bir e-posta göndererek ve yardımlarını istedi. O zamanlar, Linux’u GNU gibi büyük veya profesyonel olmayacak bir hobi projesi olarak tanımladı. Orijinal mail buradan ulaşarak okuyabilirsiniz.
Basit bir proje olarak başlatılan Linux projesi, bugün bilişim dünyasını çok önemli noktalara taşımıştır.