Etiket: ubuntu

  • PostgreSQL 10’u 12’ye güncelleme

    postgresql

    Notebook’umda kullandığım PostgreSQL 10 sürümü veritabanıdağıtımını sonunda 12 sürümüne çekme kararı verdim. Daha önce kullandığım işletim sistemi emrivaki yapıp 12 sürümünü yükledikten sonra güncellemeyi de kendin yap diyince, acil işim olduğundan kurulan 12 sürümünü pruge edip 10 sürümünden devam etmiştim. Ama artık Corona sağolsun evde tıkılı kaldığım şu zamanda sallamadığım güncelleme işine girişebilirim.

    Öncelikle purge ile kaldırdığım paketi yeniden kurarak işe başladım:

    # apt install postgresql-12

    Daha sonra postgres.conf ve pg_hba.conf ayarlarını 10’dan 12’ye aktarıyoruz. Bunun için iki sürümün dosyalarındaki farklara aşağıdaki gibi bakabilirsiniz:

    # diff /etc/postgresql/10/main/postgresql.conf /etc/postgresql/12/main/postgresql.conf
    # diff /etc/postgresql/10/main/pg_hba.conf /etc/postgresql/12/main/pg_hba.conf

    Ayarları aktarma işleminden sonra çalışan postgresql servisini durdurun

    # sudo systemctl stop postgresql.service

    Servisi durdurduktan sonra yükseltme işlemini “postgres” kullanıcısı ile yapmaya başlayacağız. Bunun için “postgres” kullanıcısına geçin:

    # sudo su postgress

    Yükseltme işlemine geçmeden önce son olarak cluster’ları kontrol edelim:

    # /usr/lib/postgresql/12/bin/pg_upgrade \
    --old-datadir=/var/lib/postgresql/10/main \
    --new-datadir=/var/lib/postgresql/12/main \
    --old-bindir=/usr/lib/postgresql/10/bin \
    --new-bindir=/usr/lib/postgresql/12/bin \
    --old-options '-c config_file=/etc/postgresql/10/main/postgresql.conf' \
    --new-options '-c config_file=/etc/postgresql/12/main/postgresql.conf' \
    --check

    Yukarıdaki komutun sonundaki “–check” anahtarı size yapılacak işlemi herhangi bir değişiklik yapmadan çalıştırıp (dry run) herhangi bir sorun olup olmayacağını gösterecektir. Eğer bir sorun görünmezse aynı komutu “–check” anahtarını silip tekrar çalıştıracağız:

    # /usr/lib/postgresql/12/bin/pg_upgrade \
    --old-datadir=/var/lib/postgresql/10/main \
    --new-datadir=/var/lib/postgresql/12/main \
    --old-bindir=/usr/lib/postgresql/10/bin \
    --new-bindir=/usr/lib/postgresql/12/bin \
    --old-options '-c config_file=/etc/postgresql/10/main/postgresql.conf' \
    --new-options '-c config_file=/etc/postgresql/12/main/postgresql.conf'

    Bu işlemin süresi, veri tabnaının barındığı medyanın hızı, veritabanı sayısı ve boyutuna göre değişiklik gösterecektir. HDD üzerindeki ~90GB boyutundaki veritabanını aktardığımda süre tutmadım ama en az 2 saat sürdüğünü söyleyebilirim. Yükseltme işlemi bittikten sonra “postgres” kullnıcısını terk edip yeni PostgreSQL sunucu ayarlarındaki portu olması gerekn port haline getiriyoruz. Tabi eski sunucunun port ayarını da değiştirmemiz gerekiyor:

    # sudo nano /etc/postgresql/12/main/postgresql.conf

    "port = 5433" satırını "port = 5432" olarak değiştirin.

    # sudo nano /etc/postgresql/10/main/postgresql.conf

    "port = 5432" satırını "port = 5433" olarak değiştirin.

    Ve PostgreSQL servisini yenidne başlatın:

    # sudo systemctl start postgresql.service

    Şu andan itibaren sürüm 10, 5433 portundan, sürüm 12 ise standart 5432 portundan yayın yapmaya başladı. unutmayın halen 10 sürümüne geri dönebilir durumdasınız. Sadece port numaralarını değiştirerek eskiv eri tabnına erişebilirsiniz. Ya da mevcut port üzerinden bir client ile erişilebilir. Öntanımlı portta çalışan veritabanı sunucu sürümünü öğrenmek için aşağdaki komutu girebilirsiniz:

    # sudo su postgres
    # psql -c "SELECT version();"

    Yeni veritabanı için bir takım optimizasyonlar yapmak maksadıyla aşağıdaki komutu çalıştıracağız.

    # ./analyze_new_cluster.sh
    # exit

    Tebrikler. Güncellenmiş PostgreSQL ve yükseltilmiş veritabnınız kullanıma hazır.

    Bu adımdan sonra yapılacaklar eski veritabanının ve sunucusunun sistemden kaldırılması adımlarıdır. Eğer birşeylerden emin değilseniz bu adımlara geçiş yapmayın!

    # apt list --installed | grep postgresql
    # sudo apt-get remove postgresql-10 postgresql-server-dev-10
    # sudo rm -rf /etc/postgresql/10/
    # sudo su postgres
    # ./delete_old_cluster.sh
  • Linux Mint’te ikincil wireless ile HotSpot oluşturmak

    Linux mint hotspot

    Linux Mint Mate desktop’ta system tray’deki network manager’dan “Edit Connections”a tıkla.

    Gelen pencerede “+”ya tıklayıp “Hardware” başlığı altından “WiFi” seçin ve “Create”e tıkla.

    Yeni pencerede:

    • General Sekmesinde: “auto connect this network when available” seçili olmalı
    • Wifi Sekmesinde
      SSID alanına oluşturacağınız HotSpot’un adını gir
      Mode’u HotSpot yapın
      Device kısmından ikincil Wifi adaptörünü seç
    • Wifi Security sekmesinde:
      Security kısmından güvenlik seviyesini belirle (Tercihen WPA & WPA2 Personal)
      Password kısmına wifi parolası gir.
    • IPV4 Sekmesinde “Method” kısmı “Shared to other computers” olmalı

    Pencerenin en üstündeki “Connection Name”i de istersen değiştirip daha belirgin bir bağlantı adı verebilirsin.

    “Save” tuşuna tıkladığında otomatik olarak HotSpot alanı oluşacaktır.
    Başka bir cihaz ile bu bağlantıyı kullanabilirsin.

  • Ubuntu linux sunucu fan kontrolü

    Ubuntu sunucu sisteminizde kafa şişiren, gereksiz hızlı dönen fanlarınızı kontrol altına mı almak istiyorsunuz? Belki de ortam sıcaklığı arttığı halde pısırık bir fanınızı var ve işini yapmıyor mu? Sisteminiz üzerinde omlet yapmadan ve kafanız daha fazla şişmeden önce bu duruma müdahale etmek ve fan kontrolü için depodan “fancontrol” paketini kuruyoruz

    # apt-get install fancontrol

    Kurulumdan sonra “pwmconfig” komutu ile “/etc/fancontrol” konfigürasyon dosyasını canlı olarak yapılandırmaya başlıyoruz.

    # pwmconfig
    # pwmconfig revision 6166 (2013-05-01)
    This program will search your sensors for pulse width modulation (pwm)
    controls, and test each one to see if it controls a fan on
    your motherboard. Note that many motherboards do not have pwm
    circuitry installed, even if your sensor chip supports pwm.

    We will attempt to briefly stop each fan using the pwm controls.
    The program will attempt to restore each fan to full speed
    after testing. However, it is ** very important ** that you
    physically verify that the fans have been to full speed
    after the program has completed.

    Found the following devices:
    hwmon0/device is coretemp
    hwmon1/device is w83627thf

    Found the following PWM controls:
    hwmon1/device/pwm1 current value: 240
    hwmon1/device/pwm2 current value: 240
    hwmon1/device/pwm3 current value: 240

    Giving the fans some time to reach full speed…
    Found the following fan sensors:
    hwmon1/device/fan1_input current speed: 2343 RPM
    hwmon1/device/fan2_input current speed: 0 … skipping!
    hwmon1/device/fan3_input current speed: 0 … skipping!

    Warning!!! This program will stop your fans, one at a time,
    for approximately 5 seconds each!!!
    This may cause your processor temperature to rise!!!
    If you do not want to do this hit control-C now!!!
    Hit return to continue:

    Fan kontrol programı kısa bir testpitten sonra bulduğu aygıtları, PWM kontrolcülerini ve Fan kontrol sensörlerini listeliyor. Listeden hemen sonra program ayar sırasında her bir fanı 5 saniyeliğine durduracağını söylüyor. Bu durum çok yük binen bazı sistemlerde krize yol açabilir. O yüzden, sisteminizin fanların durdurulması sırasındaki stresi kaldırıp kaldıramayacağından emin değilseniz bundan sonraki adımlara geçmeyiniz. Biz sıradan ev kullanıcıları için çok da dert olmasa gerek 🙂

    Enter tuşuna basıp devam ettiğinizde, hangi fanın hangi voltaj kontrolörü tarafından kontrol edildiği tespiti otomatik olarak yapılıyor ve sonrasında detaylı korelasyon ayarlarını çıkartmak isteyip istemediğinizi soruyor. Bu işlem PWM kontrolcüsüne ne emredilirse Fan kaç RPM’de dönecek bilgisini toplamaya yarıyor.

    Testing pwm control hwmon1/device/pwm1 …
    hwmon1/device/fan1_input … speed was 2343 now 1028
    It appears that fan hwmon1/device/fan1_input
    is controlled by pwm hwmon1/device/pwm1
    Would you like to generate a detailed correlation (y)?

    Evet dediğinizde fanınız değişen (düşürülen) PWM değerleri ile birlikte yavaşlamaya başlıyor:

    PWM 255 FAN 2343
    PWM 240 FAN 2220
    PWM 225 FAN 2343
    PWM 210 FAN 2109
    PWM 195 FAN 2008
    PWM 180 FAN 1757
    PWM 165 FAN 1622
    PWM 150 FAN 1360
    PWM 135 FAN 1081
    PWM 120 FAN 1004
    PWM 105 FAN 1004
    PWM 90 FAN 1004
    PWM 75 FAN 981
    PWM 60 FAN 1004
    PWM 45 FAN 1004
    PWM 30 FAN 1004
    PWM 28 FAN 1004
    PWM 26 FAN 1004
    PWM 24 FAN 1004
    PWM 22 FAN 1004
    PWM 20 FAN 1004
    PWM 18 FAN 1028
    PWM 16 FAN 1004
    PWM 14 FAN 1004
    PWM 12 FAN 1004
    PWM 10 FAN 1004
    PWM 8 FAN 1004
    PWM 6 FAN 1004
    PWM 4 FAN 1028
    PWM 2 FAN 1028
    PWM 0 FAN 1004

    Testing pwm control hwmon1/device/pwm2 …
    hwmon1/device/fan1_input … speed was 2343 now 2343
    no correlation

    No correlations were detected.
    There is either no fan connected to the output of hwmon1/device/pwm2,
    or the connected fan has no rpm-signal connected to one of
    the tested fan sensors. (Note: not all motherboards have
    the pwm outputs connected to the fan connectors,
    check out the hardware database on http://www.almico.com/forumindex.php)

    Did you see/hear a fan stopping during the above test (n)?

    Fan kontrol programı benim sunucuda nedense korelasyon bulamadığını düşünüyor. Muhtemelen donanım uyumsuzluğu söz konusu. Bu yüzden bana yukarıdaki test sırasında Fanın durup durmadığını soruyor. Ben bu soruya kulaklarıma güvenerek evet diyorum.

    Bu adımdan sonra fan kontrol programı testini tamamlandığını ve ayarları kaydetmek isteyip istemediğinizi soracak. Gerekli cevapları verip fan kontrol programının işini bitirmesini sağlıyoruz:

    Testing is complete.
    Please verify that all fans have returned to their normal speed.

    The fancontrol script can automatically respond to temperature changes
    of your system by changing fanspeeds.
    Do you want to set up its configuration file now (y)? y
    What should be the path to your fancontrol config file (/etc/fancontrol)?
    Loading configuration from /etc/fancontrol …

    Select fan output to configure, or other action:
    1) hwmon1/device/pwm1 3) Just quit 5) Show configuration
    2) Change INTERVAL 4) Save and quit
    select (1-n): 4

    Saving configuration to /etc/fancontrol…
    Configuration saved

    Ayarını yaptığımız için artık “fancontrol” servisini başlatabilir ve fanların huşû içinde dönmelerine tanık olabiliriz.

    # service fancontrol start
    * Starting fan speed regulator fancontrol [ OK ]

    Artık fanlarınızın normalde kedi gibi mırıldandığı, ancak sıcak arttıkça canavarlaşacağı bir dünyaya adım atmış bulunuyorsunuz. Sisteminize zeval gelmesin.

     

  • Reinstalling a deb package with its dependencies

    For example; I broke my linux mint, mintinstaller package. And I try to reinstall it with its dependencies to fix it:

    # apt-get install –reinstall mintinstall `apt-cache depends mintinstall | awk ‘/Depends:/{print$2}’`

    “apt-cache depends” command provides dependency packages of the mintinstall package to apt-get install command.

  • Gereksiz dosyaların git deposuna eklenmesini engellemek

    Bunun için proje köküne “.gitignore” adında bir dosya oluşturup örnekteki içeriği ekleyebilirsiniz. Aşağıdaki örnek içerikte bulunan uzantılar ve dosyaların haricinde depoya gitmesini istemediğiniz dosyalar ve ya dosya türleri varsa bu listeye ekleyebilirsiniz. Aynı zamanda bu dosyayı git deposuna eklemenizi proje ortaklarınız içinde faydalı olacaktır. Böylelikle bütük kullanıcılarda aynı dosyalar bir kerede engellenmiş olur.

    (daha&helliip;)

  • Uzak sunucudaki git deposunu yerele çekmek

    Uzak sunucudaki git deposunu yerele çekmek diğer anlamıyla, remote repo’yu clone’lamak için aşağıdaki adımları takip edeceğiz.
    Yerel makinede projenin klonlanacağı klasöre geçiyoruz. Örnekte “~/dev/” klasörünü kullancağım

    veli@veli-GA-990XA-UD3:~/dev/git clone [email protected]:project.git

    Cloning into ‘project’…
    Enter passphrase for key ‘/home/veli/.ssh/id_rsa’:
    warning: You appear to have cloned an empty repository.
    Checking connectivity… done.

    Yukarıda daha önceki yazımda “gitolite” aracılığı ile ilklendirmiş olduğumuz boş depoyu yerelimize klonlamış olduk. Bundan sonra yapılacak olan iş proje klsörü içine proje dosyalarını koymak ve bunları depoya göndermek. Dosyaları ekledikten sonra depoya göndermek için şunları yapıyoruz: (daha&helliip;)

  • Gitolite ile Git’e kullanıcı eklemek

    Eklenecek kullanıcının public_key’i alınır. Bunun için kullanıcın bilgisayarında, geliştirme için kullanılan kullanıcı hesabı ile login olunur ve aşağıdaki komut çalıştırılır.

    ali@ali-GA-990XA-UD3:~/ ssh-keygen -t rsa -C “ali@ali-GA-990XA-UD3

    bu komut ile kullanıcın home klasöründe bulunan .ssh klasörü altında “[email protected]” isimli bir public key oluşur. Bu public key dosyası gitolite yönetici olan kullanıcıya iletilir. gitolite yöneticisi olan kullanıcı, bu public key dosyasını “gitolite-admin/keys” klasörüne yerleştirir ve gitolite deposuna ekler

    veli@veli-GA-990XA-UD3:~/gitolite-admin/git add keydir/[email protected]

    Sonrasında eklenecek kullanıcı için git kullanıcısı oluşturulur: (daha&helliip;)

  • Kendi Git deponuzu kurun ve Gitolite ile yönetin

    Bu doküman ile Ubuntu sistemlerde git sürüm yönetim sistemini kolaylıkla kurup rahat bir şekilde yönetebilirisiniz. Öncelikle ubuntu sistemlerinde git sürüm yönetim sistemi nasıl kurulur onu inceleyelim

    • Git sürüm yönetim sistemi kurulumu:

    veli@veli-GA-990XA-UD3:~/ sudo apt-get install git-core

    Hepsi bu 🙂

    • Gitolite ile Git yönetimi:

    Git sürüm yönetim sisteminin komut dilini ezberlemek ve her seferinde hatırlamaya çalışmak biraz sıkıntılı, özellikle de yeni depo kurmanız ve kullanıcı ve dahi haklarını yönetmeniz gerekiyorsa…

    Gitolite bu işleri basitleştirmek amacıyla, daha önceden var olan az daha sorunlu, sıkıntılı ve artık geliştirilmesi bırakılmış olan Gitosis yerine oluşturulmuş bir projedir. Amaç depo ve kullanıcı yönetimini basitleştirmek, sistem yöneticilerinin kendilerine daha fazla zaman ayırabilmelerini sağlamaktır :p

    Ubuntu sisteminde gitolite kurmak ve sürüm yönetim sistemini bunun üzerine taşımak için git sürüm yönetim sistemini kurduktan sonra aynı yöntem ile gitolite’ı sisteme kuracağız. Ancak bunu yaparken uzak sunucu kullanmak isteyeceğinizi varsayarak sistemi yapılandıracağız. Bunun için uzak sunucuya ssh ile giriş yaptıktan sonra süper kullanıcı konumuna geçmeniz gerekli. (daha&helliip;)

  • Amazon S3 buketini Linux’a mount etmek

    Eğer Amazon S3 servisindeki buketinizin içindeki dosyaların bilgisayarınızdaki kopyalarında değişiklik yaptıktan sonra illaki Firefox s3 organizer gibi bir eklenti ya da s3cmd gibi bir linux konsol komutu üzerinden buketteki dosyayı güncellemekten sıkıldıysanız, fuse tabanlı s3fs ile buketlerinizi yerel makinenize mount ederek dosya sisteminin bir parçası gibi kullanabilirsiniz.

     

     

    Malesef şimdilik Ubunut paket deposunda bulunmamakta ancak kaynaktan kurulum düşündüğünüz kadar zor değil. Sadece kaynağı derlerken gerekli olan bağımlılıkların sisteminizde kurulu olması gerekmekte. Kuruluma hazırlık için öncelikle bu bağımlılıkları kurmanız gerekmekte:

    # sudo apt-get update

    # sudo apt-get install build-essential gcc libfuse-dev fuse-utils libcurl4-openssl-dev libxml2-dev mime-support build-essential libcurl4-openssl-dev

    Bağımlılıkları kurduktan sonra s3fs kaynak dosyasını indirebilirsiniz. Ben s3fs’i derleyip kurduğumda son sürüm olarak 1.71 bulunmaktaydı. Eğer daha güncel bir sürüm varsa bunu kullanmayı deneybilirsiniz. Ancak bağımlılıklardan dolayı sorun yaşama ihtimaliniz durumunda çözümünü araştırmanız gerekecek. Şimdi güncel kaynak dosyasını indirelim:

    # wget http://s3fs.googlecode.com/files/s3fs-1.71.tar.gz

    İndirdiğimiz kaynak dosyasını açalım;

    # tar -xvzf s3fs-1.71.tar.gz

    Derleme ver kurulum işlemlerini yapalım:

    # cd s3fs-1.71

    # ./configure

    # make

    # sudo make install

    s3fs kurulumu bu kadar. Şimdi dosyanın nereye kurulduğuna şu komut ile bakabiliriz:

    # which s3fs
    /usr/local/bin/s3fs

    Bundan sonra s3fs için bir password dosyası oluşturup buketlerimizin Access ve Secret keylerini içine yazmak olacak. Oluşturacağımız dosyanın lokasyonu ve adı aşağıdaki gibi olmak zorundadır:

    # nano /etc/passwd-s3fs

    access_key:secret_key

    ctrl+x

    # chmod 640 /etc/passwd-s3fs

    Böylece bağlayacağımız buketi mount ederken s3fs’in okuması gereken access ve secret keylerin bulunduğu dosyayı da oluştumuş olduk.

    Bundan sonra işimiz sadece bir klasör oluşturup buketi o klasöre bağlamaya kalıyor.

    # sudo mkdir /mnt/herhangi_bir_klasör_ismi

    # sudo s3fs benim.buketimim.adı /mnt/herhangi_bir_klasör_ismi

    tabi bu işlem sonucunda doğal olarak o klasöre sadece root ya da sudo kullanıcısı ulaşabilecek demektir. izinleri ayarlamak için gerekli işlemleri araştırmadığım için buraya yazmıyorum, bu da sizin ödeviniz olsun.

  • Yarım kalan recovery ve kullanıma girmeyen RAID array bölümü.

    Başıma gelen bir diğer sorun ise recovery’nin bir şekilde yarım kalması ve bu yüzden RAID arraye ait bölümün birisinin kullanıma girmemesiydi ([_U] durumu).

    Tekrar recvery denediğimde bana “Device or Resource Busy” hatası döndürdü durdu.

    # mdadm –manage /dev/md0 –add /dev/sda1
    mdadm: cannot open device /dev/sda1: Device or resource busy

    MD array’indeki bölümü durdurmama bile müsaade etmedi.

    # mdadm –stop /dev/md2 /dev/sda3
    mdadm: fail to stop device /dev/sda1: Device or resource busy

    İnanılmaz birşey ancak bir türlü durmuyordu. Onu durdurabilmek için baya bir uğraştıktan ve araştırdıktan sonra öncelikle failed olarak işaretlemem ve ardından remove etmem gerektiğini öğrendim.

    # mdadm –fail /dev/md2 /dev/sda3
    mdadm: set /dev/sda3 faulty in /dev/md2

    # mdadm –remove /dev/md2 /dev/sda3
    mdadm: hot removed /dev/sda3

    Sonunda onu durdurmayı başardım ve doğrudan recovery işlemini başattım. recovery işlemini başlattığımda otomatik olara sda3 bölümün md2 arrayine ekleyip resync işlemine başladı. Bu yazıyı yazarken recovery henüz bitmemişti, bitmesine de daha en az 3 saat vardı. O yüzden bölümün kullanıma girip girmediğini yazmıyorum.