Bitcoin Full Node Çalıştırmak (Raspberry Pi ile)
Node’ların Rolü ve Neden Full Node çalıştırmalıyız?
Full Node’lar blockchain’in kayıt defterleridir. Her bir transfer işleminin kaydını tutmaktadırlar. Bu yazının kolay anlaşılabilmesi için, bitcoin ağının full node’larına değineceğiniz ama belirtmek gerekir ki kendini adem-i merkezi (merkezinin olmaması) olarak tanımlayan her kripto para için full node’lar büyük bir benzerlik ve önem taşımaktadır.
Full node’lar, genellikle Bitcoin hakkında bilgi edinilmeye başlandığında akla ilk gelen konulardan biri değil ancak Bitcoin ağının omur iliğidir. Bitcoin full node sayısının artması, daha hızlı, daha stabil ve daha fazla adem-i merkezi bir ağ elde etmemizi sağlar.
Bitcoin full node’ların yaklaşık olarak %83'ü Bitcoin Core istemcisi kullanılarak oluşturulduğu için, yazımızın ilerleyen kısmında Bitcoin Core üzerinden nasıl full node çalıştırılacağını da anlatacağız.
Kendi full node’umuzu kurmak, Bitcoin’in izlediği kuralların uygulandığından emin olmanın tek yoludur. Node’lar, kişi(peer) yada kişilerden gelen, konsensus kurallarını uymayan işlemleri ve blokları reddederler. Bu bağlamda, node’lar hash power’dan daha önemlidir.
Peki neden kendi full node’umuzu kurmalıyız?
Öncelikle, eğer ki madencilik yapıyorsanız full node kurmanız gereken bir gereksinimdir fakat, herhangi bir maddi teşvik olmadan neden kendi node’unuza sahip olmanız gerekmekte buna bakalım.
Adem-i merkeziyetçilik yani herhangi bir merkezin olmayışı, Bitcoin’in var oluş amaçlarından biridir. Kişiye yada kişilere güven gereksinimi ortadan kaldırmanın en temel adımıdır. Herhangi bir merkezi olmayan yapı, kişisel menfaatler için yıkılamaz, bozulamaz, durdurulamaz. Aynı zamanda herhangi bir merkez olmadığı için kişi veya devletler tarafından baskı altında tutulamaz, mahremiyetiniz ve işlemleriniz güven gerektirmeyen bir yapıda güvende kalır.
Full node kurmanızı gerektirmeyen herhangi bir Bitcoin cüzdanı kullanıyorsanız, kullandığınız bu hizmet sağlayıcısına güvenmeniz gerekmektedir. Online cüzdanlar, merkezi bir node aracılığıyla işlemleri işler ve buna Electrum gibi “hafif” istemciler de dahildir.
Bitcoin adresi edinirken herhangi bir bilgi vermeniz gerekmemektedir. Bu Bitcoinin en önemli özelliklerinden biridir. Bu sayede gizliliğiniz sağlanır. SPV wallet’lar yani basitleştirilmiş ödeme doğrulama cüzdanları ise size tam bir gizlilik vermez. İşlemler, 3. parti serverlardan geçtiği için, hangi cüzdan adresinin size ait olduğunu bilebilirler. Anonimliğinizi korumak istiyorsanız, bunun en önemli adımı kendi full node’unuzu kurmanızdır.
Ayrıca Full Node kurmanız, olası bir hard fork durumunda, hangi blockchaini seçeceğiniz hususunda size seçme hakkı tanır. Eski yada yeni blockchain’i takip edip etmeme hakkınız, full node çalıştırmadığınız takdirde, hizmet sağlayıcının insiyatifindedir.
Full node’ların önemine dair giriş yazısı için Murat Magrebi’ye teşekkür ederim.
Full Node Kurulumu
Bu kurulum ile amaçladığım, 7/24 çalışan ve tüm doğrulamaları yapan bir Bitcoin Full Node kurmak. Bu sayede Bitcoin’in merkezsizliğine destek olacak ve Bitcoin ağı ile haberleşmek için 3. partilere güven duymamız gerekmeyecek. Bu kurulum ile kendi kişisel transferlerimi yapabilir, geliştireceğim uygulamalar için kullanabilirim.
Kurulumda ağırlıklı olarak ‘kendin yap (DIY)” yaklaşımını izledim. Tüm adımları manuel yaparak neyin nasıl çalıştığının anlaşılmasını hedefledim. Bir çok kısım için hatta komple full node çalıştırmak için hazır yazılımlar veya kurulumlar var. Sonraki yazılarda bunlara da değinirim.
Bu yazının hedef kitlesi, belli bir seviyede teknik bilgi ve becerilere sahip olan ve Bitcoin’in çalışma mekanizmaları hakkında bilgi sahibi olmak isteyenler.
Ön Hazırlıklar
Yazı içerisindeki adımları uygularken günler belki de haftalar sürebilecek kısımları önceden planlamak size büyük vakit kazandırabilir. Kesinlikle günler sürecek diyemem, hali hazırda bu adımlara ihtiyaç duymuyor da olabilirsiniz.
Vakit alacak ilk konu Bitcoin verisinin indirilmesi. Buna başka bir bilgisayarda başlayabilirsiniz ve diğer adımlara devam edebilirsiniz. Veya güvendiğiniz birisinden kopyalayabilirsiniz. Nasıl yapılacağını bir sonraki başlıkta anlatacağım.
İkinci konu da modem portlarının yönlendirilmesi. Bitcoin ağına destek olmak ve gelen transferleri diğer node’lara dağıtmak için port yönlendirmelerinizin yapılması gerekmektedir. Türkiye’deki internet servis sağlayıcıları, port yönlendirmesi için statik IP hizmetinin alınmasını zorunlu tutuyor. Bunun için başvuru ve aktivasyon bir kaç gün sürebilir. Bu kısım da zorunlu değildir. Port yönlendirmesi ve statik IP olmadan full node çalıştırabilirsiniz fakat dışarıdan erişilebilir olmayacağınız için ağa destek olamazsınız. Port yönlendirmesini yazının sonundaki Mainnet başlığında anlatacağım.
Bitcoin Veritabanının İndirilmesi
Bitcoin blockchain’inde, yapılan tüm geçmiş transferlerin kaydı tutulmaktadır. Bu veri için kimseye güvenmek zorunda kalmamak adına tüm veriyi indirip saklamalıyız. Bunun için yapılması gereken;
- Tüm blockchain’in indirilmesi ( 9 Haziran 2019 itibariyle ~210 GB )
- Şimdiye kadar yapılmış tüm transferlerin doğrulanması
- Daha sonra arama yapmak üzere tüm transaction’ların index’lenmesi
- Tüm Bitcoin adresleri için bakiye hesaplanması
Bitcoin Full Node’u kurulumu ve çalıştırılması için Raspberry Pi bilgisayarını kullanacağım. Bir kere kurulum yapıldıktan sonra sürekli çalışması için büyük bir işlem gücüne gerek olmadığı için düşük performanslı ve düşük güç tüketimli Raspberry Pi 2 Model B veya üzeri bir model yeterli olacaktır.
Fakat Bitcoin verisinin indirilmesi ve doğrulanması Raspberry Pi ile haftalar hatta aylar alabilir. Bunun için Bitcoin Core uygulamasını normal bir bilgisayarda kurup blockchain verisinin indirilmesini ve doğrulanmasını tamamlayacağız. Daha sonra bu veri Raspberry Pi üzerinde kullanılmak üzere harici bir hard diske taşınacak.
Yazı içerisinde Windows 10 üzerindeki kurulumuna değineceğim. Diğer işletim sistemleri için şu linklere bakabilirsiniz.
Linux : https://bitcoin.org/en/full-node#ubuntu-1604
Mac OS : https://bitcoin.org/en/full-node#mac-os-x-yosemite-1010x
Gündelik olarak kullandığınız bilgisayarınızda Bitcoin Core uygulamasını kurmak için aşağıdaki adımları izleyelim. Bu linkden Bitcoin Core uygulamasının Windows versiyonunu indirelim (v0.18.0 direk link) Yükleme sırasında aşağıdaki ekranda görülen yerden Bitcoin dosyalarının tutulacağı yeri seçelim. Direkt harici disk de olabilir veya daha sonra kopyalamak üzere herhangi bir yere de indirebilirsiniz.
Yükleme tamamlandığında Bitcoin Core uygulaması blockchain verilerini indirmeye başlayacak;
Uygulamayı açık bırakalım ve tüm blockchain verisinin indirilmesini bekleyelim. İnternet bağlantınıza ve bilgisayarınızın gücüne göre bu bir kaç gün sürebilir.
Kurulum
Ön hazırlıkları tamamladığımıza göre Bitcoin Full Node’u çalıştıracak sistemimizi hazırlamaya başlayabiliriz.
Raspberry Pi’nin Hazırlanması
Kullanabileceğimiz donanımları ve satın alabileceğiniz örnek linkleri aşağıda listeyeyim;
- Raspberry Pi 2 Model B veya üstü (~300 TL )
Ne kadar iyi modelini alırsanız sistem o kadar iyi çalışacaktır. Bunu satın almak için bir çok defa kullandığım ve memnun kaldığım Robotistan’ı kullanabilirsiniz
Raspberry Pi 3 Model B+
https://www.robotistan.com/raspberry-pi-3-model-b-plus - USB Güç Adaptörü ( ~75 TL )
5V ve minimum 1.2 amperlik veren bir güç adaptörü.
Resmi Raspberry Pi 3/2/B+ Adaptörü
https://www.robotistan.com/resmi-raspberry-pi-3-adaptoru - Micro SD Kart ve adaptörü (~30 TL )
İyi bir markadan hızlı bir kart almanız önemli. Tüm işletim sistemi ve çalışan uygulamalar bu kart üzerinde olacak.
Samsung EVO Plus 32GB microSDHC Kart
https://www.hepsiburada.com/samsung-evo-plus-32gb-95-mb-s-microsdhc-kart-sd-adaptor-mb-mc32ga-tr-p-HBV000005JEXU - 500 GB veya daha fazla taşınabilir hard disk (~ 250 TL )
Yaklaşık 210 GB’lık Bitcoin verisini bu hard disk üzerinde tutacağız.
Samsung M3 500GB 2.5' USB 3.0
https://www.hepsiburada.com/samsung-m3-500gb-2-5-usb-3-0-tasinabilir-disk-stshx-m500tcb-p-BD500505 - Raspberry Pi Muhafaza Kutusu ( ~20 TL )
Şart olmamakla beraber alırsanız Raspberry Pi bilgisayarınızı daha iyi muhafaza edebilirsiniz.
https://www.robotistan.com/raspberry-pi-b-plus-siyah-muhafaza-kutusu-pi-b-plus-case-black
Benim sistemim; bir kaç yıldır kullanmadan tuttuğum Raspberry Pi 2 Model B, eski bir 500 GB lık taşınabilir disk, yeni aldığım hızlı bir Samsung SD kart, ve opsiyonel olarak aldığım 4 Inch dokunmatik LCD ekran.
Raspberry Pi İşletim Sisteminin Kurulumu
SD kart’a kurmak üzere Raspberry Pi işletim sistemi Raspian’ı aşağıdaki linkden indirelim. Raspberry Pi’ın masa üstü arayüzünü kullanmayacağız fakat kurulumla ilgili adımları takip etmek için veya daha sonrasında hataları çözebilmek için tam sürümü ‘Raspbian Stretch with desktop’ sürümünü veya profesyonel kullanıcılar için light version olan ‘Raspbian Stretch Lite’ sürümünü de indirebiliriz.
SD kartı formatlamak için Windows’un dahili formatlama aracını kullanabiliriz. Dosya sistemi olarak FAT32'yi seçmeliyiz.
Formattan sonra işletim sisteminin SD kart a yüklenmesi için “Win32 Disk Imager” uygulamasını indirelim.
https://sourceforge.net/projects/win32diskimager/
Raspberry Pi imajını zipden çıkardıktan sonra ‘Win32 Disk Imager’ uygulamasını çalıştıralım ve imaj dosyası ile SD kartı seçelim.
Buraya kadar olan kısımda Raspbian işletim sistemi SD karta kurulmuş oldu. Detaylar için şurayı inceleyebilirsiniz;
https://blog.samm.com/raspberry-pi-ilk-kurulum/
Raspberry Pi’a uzaktan erişebilmek için SSH’ı aktifleştirmeliyiz. Bunun için dosyaları SD karta yazdıktan sonra kart içerisine ‘ssh’ isminde uzantısı olmayan boş bir dosya oluşturalım. Bu dosyanın varlığı ile SSH kullanarak uzaktan erişim aktifleştirilmiş olacak.
SD kartı bilgisayardan çıkartıp Raspberry Pi’a takabilirsiniz. Bağlantıları yaparak Raspberry Pi’ı çalıştırdığımızda işletim sistemi otomatik olarak çalışacaktır. Eğer masaüstü sürümünü indirdiyseniz herhangi bir monitör bağlayıp görebilirsiniz. Lite versiyonu indirdiyseniz biraz sonraki ayarlarla SSH ile bağlanabileceğiz.
Uzak Bağlantı
Raspberry Pi üzerinde işlem yapmak için SSH bağlantısı yapacağız. Bunun için de çalıştığı IP adresini bilmemiz gerekiyor. Bu IP adresi de değişebileceği için Raspberry Pi’ye sabit bir IP vermemiz gerekiyor. Bunun için modeminizde ayarlar yapmalısınız. Ben ZTE markalı kendi modemim üzerinden örnekler vereceğim fakat diğer modemlerde de aşağı yukarı aynı ayarlar vardır.
İlk olarak modem arayüzüne bağlanalım. Herhangi bir web tarayıcıdan modem IP’sini yazarak ulaşabilirsiniz. Kendi modeminizin IP adresini ve varsayılan şifresini şurada bulabilirsiniz.
http://iff.org.tr/ModemDNS/
Bağlı olan aygıtları modem arayüzünden görebilirsiniz. İçerisinde ‘raspberrypi’ yazan bizim ilgilendiğimiz aygıt. Bu aygıta verilen IP’yi ve MAC adresini kullanacağız.
Raspberry Pi’a verilen IP’yi sabitlemek için modeminizde ‘Local Network’ -> ’Lan’ -> ’DHCP Binding’ menüsü altında yeni bir tanımlama yapalım. Raspberry Pi’ ye ait MAC adresi ile istediğiniz IP adresini tanımlayabilirsiniz.
Bu ayarlardan sonra artık tanımladığımız IP ile Raspberry Pi’ye erişebiliriz.
Komut Satırından Bağlantı
Raspberry Pi üzerinde çalışmak için SSH ile terminal bağlantısı yapmalıyız. Bunun için Windows’ta Putty uygulamasını kullanabilirsiniz (Putty Nedir?). Ben örneklerimi Linux üzerinde vereceğim.
Pi’ye uzak bağlantı yapmak için aşağıdaki komutu çalıştıralım.
$ ssh pi@192.168.0.20
Ip adresi olarak ‘192.168.0.20’ yerine yukarıda tanımladığımız sabit ip’yi girmelisiniz. ‘pi’ kullanıcısının şifresi ‘raspberry’ dir.
Raspberry Pi Ayarları
Pi’ye bağlandığımıza göre bazı ilk ayarları yapmalıyız. Bunun için ayarlar menüsünü açalım.
$ sudo raspi-config
Bu menü üzerinden yapmamız gereken ayarlar;
- Varsayılan şifrenin değiştirilmesi (1)
- Raspberry Pi’ya isim verilmesi (2)
- Eğer full sürüm Rasbian kurulduysa masaüstüne ihtiyacımız olmadığı için başlangıç ayarı olarak konsolun seçilmesi. (3,
Desktop / CLI
→Console
) - Başlangıçta ağ ayarlarının yüklenmesini beklemek için (3,
Wait for network at boot
) - Saat diliminin ayarlanması (4, Europe -> Istanbul)
- Gelişmiş ayarlar (7,
Expand Filesystem
ayarını şeçin veMemory Split
değerini 16 yapın)
Bu ayarları yaptıktan sonra ayarlar ekranından çıkabilirsiniz.
İşletim sisteminin güncellenmesi için aşağıdaki komutları çalıştıralım.
$ sudo apt-get update
$ sudo apt-get upgrade
Daha sonra kuracağımız uygulamalar için gerekli paketleri kuralım.
$ sudo apt-get install htop git curl bash-completion jq dphys-swapfile dirmngr --install-recommends
Kullanıcı hesaplarını yönetelim.
İlk olarak root kullanıcısına şifre tanımlayalım:
$ sudo passwd root
Yapacağımız işlemlerde ‘pi’ kullanıcısı yerine ‘admin’ kullanıcısını kullanacağız. Yeni bir kullanıcı ekleyelim:
$ sudo adduser admin
$ sudo adduser admin sudo
Yeniden başlatalım ve ‘pi’ kullanıcısı yerine ‘admin’ ile bağlantı yapalım.
$ sudo shutdown -r now
// Sistem açıldıktan sonra ->
$ ssh admin@192.168.0.20
Bitcoin Core uygulaması arka planda çalışacak bir servis olarak ayarlayacağız. Bunun için ‘bitcoin’ adında, admin yetkileri olmayan bir servis kullanıcısı tanımlayalım.
$ sudo adduser bitcoin
Bitcoin Verisinin Kopyalanması
Bitcoin blockchain verisini tutacağımız harici diski Pi üzerinde kullanmak üzere hazırlayalım. İlk olarak diski formatlamalıyız. Burada dikkat etmemiz gereken nokta, eğer Windows makine kullanıyorsak diskin Fat32 olarak formatlandığından emin olalım. Aksi takdirde Pi diski tanımayacaktır. Diskin Pi tarafından tanımlanması için aşağıdaki adımları izleyelim.
İlk olarak diske otomatik olarak verilen id’yi öğrenelim. Aşağıdaki komut sonrasında listelenenler arasından isim, boyut ve markasına göre harici diskin UUID’sini not alalım. (Örn. 3fd36268-a7ef-….)
$ lsblk -o UUID,NAME,FSTYPE,SIZE,LABEL,MODEL
Raspberry Pi her çalıştığında diskin otomatik olarak takılması için ‘/etc/fstab’ dosyasına aşağıdaki satırı eklememiz gerekiyor.
$ sudo nano /etc/fstabUUID=123456 /mnt/hdd ext4 rw,nosuid,dev,noexec,noatime,nodiratime,auto,nouser,async,nofail 0 2
Burada, UUID değeri olarak daha önce kaydettiğiniz id’yi (123456 gibi) yazın. ‘/mnt/hdd’ değeri, disk Pi’ye takıldığında ulaşmak istediğimiz dizin, ‘ext4’ diskin formatlanma seçeneği (Linux için ext4, Windows’tan formatlandığında ise vfat) ve akabinde de bazı konfigürasyon değerleri.
Disk takıldığında kullanılacak olan ‘/mnt/hdd’ dizinini oluşturalım;
$ sudo mkdir /mnt/hdd
Yaptığımız ayarlar ile tüm disklerin takılması komutunu verelim ve bizim diskimizin doğru dizin ile eşleştiğini görelim;
$ sudo mount -a
$ df /mnt/hdd
Bu dizine servis kullanıcısı ‘bitcoin’ ile de erişilmesini istiyoruz. Onun için gerekli izin tanımlamalarını yapalım.
$ sudo chown -R bitcoin:bitcoin /mnt/hdd/
‘Bitcoin Core’ uygulaması ‘bitcoin’ kullanıcısı ile ‘/mnt/hdd/’ dizinde okuma yazma yapacak. Yukarıdaki komutlar ile bunun sağlanmış olması lazım. Fakat bir sorun varsa, örneğin harici disk read-only modda takıldıysa, bundan sonraki işlemler hata alacak. Onun için yetki kontrolü yapmak üzere aşağıdaki komutları çalıştıralım. ‘bitcoin’ kullanıcına geçiş yapalım ve dizin altında yeni bir klasör açalım;
$ sudo su - bitcoin
$ cd /mnt/hdd
$ mkdir bitcoin
$ ls -la
‘bitcoin’ isminde bir klasör listenmiş olması lazım. Şimdi de yeni bir dosya yazıp silelim;
$ touch bitcoin/test.file
$ rm bitcoin/test.file
Eğer herhangi bir hata almadıysak izinlerde sıkıntı yoktur. Fakat bir hata varsa bundan sonraki işlemler çalışmayacağı için diski baştan formatlayıp (tercihen Linux üzerinde) dosyaları yeniden kopyalayın. ‘bitcoin’ kullanıcısından çıkmak için; $ exit
Raspberry Pi İyileştirmeleri
Güvenlik ve performans adına Pi işletim sisteminde bazı ayarlamalar yapmalıyız. İlk olarak işletim sisteminin kullandığı swap dosyalarını SD kart üzerinden harici disk üzerine alalım. swap dosyalarının bulunması SD kartın performansına ciddi zararı olabilir. Mevcut swap dosyalarını silelim, bunu da admin kullanıcısı ile yapmalıyız;
$ sudo dphys-swapfile swapoff
$ sudo dphys-swapfile uninstall
Yeni kullanılacak swap dosyası konumunu ayarlayalım. Aşağıdaki komut sonrasında açılan dosyaya bir sonraki komuttaki satırları ekleyelim.
$ sudo nano /etc/dphys-swapfile....CONF_SWAPFILE=/mnt/hdd/swapfile
# bu satırı kapatalım
#CONF_SWAPSIZE=
Yeni swap dosyalarını oluşturalım ve aktifleştirelim;
$ sudo dd if=/dev/zero of=/mnt/hdd/swapfile count=1000 bs=1MiB
$ sudo chmod 600 /mnt/hdd/swapfile
$ sudo mkswap /mnt/hdd/swapfile$ sudo dphys-swapfile setup
$ sudo dphys-swapfile swapon
İkinci olarak da güvenlik adına yapacağımız ayarlara değineyim. Bitcoin Core uygulamasının internetten erişilebilir olmasını istiyoruz. Bu sayede ağ üzerinde transaction’ların ve blokların dağıtılmasına yardımcı olacak ve Bitcoin ağını destekleyeceğiz. Raspberry Pi internete açık olacağı için istenmeyen bağlantıların engellenmesi adına güvenlik duvarını aktifleştireceğiz ve gerekli ayarlamaları yapacağız.
Güvenlik duvarı ayarları için Pi’nin IP sini biliyor olmalısınız. (bknz. ‘Uzak bağlantı’ başlığı). Aşağıdaki komutlarda IP adresi olarak ‘192.168.0.0’ geçiyor. Eğer sizin IP adresiniz ‘192.168.0.???’ şeklindeyse ‘192.168.0.0’ değerini kullanmalısınız. (IP adresini öğrenmek için : ifconfig
)
Yapacağımız değişiklikler; tüm gelen bağlantı isteklerini red etmek, tüm giden bağlantı isteklerini kabul etmek, SSH bağlantısı için 22 portunun açılması, Bitcoin mainnet’i için 8333 portu ve testnet’i için 18333 portunun açılması;
$ sudo apt-get install ufw
$ sudo su
$ ufw default deny incoming
$ ufw default allow outgoing
$ ufw allow from 192.168.0.0/24 to any port 22 comment 'allow SSH from local LAN'
$ ufw allow 8333 comment 'allow Bitcoin mainnet'
$ ufw allow 18333 comment 'allow Bitcoin testnet'
$ ufw enable
$ systemctl enable ufw
$ ufw status
$ exit
Bu ayarlar sonunda Pi’yi yeniden başlatıp kontrol edebilirsiniz. Eğer yanlış ayarlardan dolayı SSH bağlantısı yapamazsanız, Pi’ye klavye ve monitör bağlayarak ayarları tekrar kontrol edebilirsiniz.
$ sudo shutdown -r now
Detaylar için : https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands
Raspberry Pi güvenliğini sağlamak adına ekstra adımlar uygulamalıyız. Yazının basitliği adına sadece linklerini bırakacağım.
Şifre yerine Public Key doğrulama ile SSH bağlantısı yapmak için;
https://www.linode.com/docs/security/authentication/use-public-key-authentication-with-ssh/
Ardı ardına yetkisiz bağlantı denemelerini engellemek için;
https://linode.com/docs/security/using-fail2ban-for-security/
Bitcoin Core
Bu kısımda Bitcoin Core uygulamasının indirilmesi, doğrulanması, yüklenmesi ve blockchain’in eşleşmesini sağlayacağız.
Admin kullanıcısı olarak bağlandıktan sonra dosyaları indireceğimiz dizini hazırlayalım.
$ ssh admin@192.168.0.20
$ mkdir /home/admin/download
$ cd /home/admin/download
$ rm *
Bu link den Bitcoin Core uygulamasının ARM Linux 32 bit versiyonu için indirme linkini kopyalayalım. Yazıyı yazdığım sırada güncel versiyon 0.18.0. Eğer daha güncel bir versiyon varsa aşağıdaki komutlarda ilgili linkleri güncellemelisiniz. Yükleme işlemine başlamadan önce dosyaların doğruluğunu kontrol etmeliyiz. İndirilen uygulamaların doğrulanmasına dair daha detaylı yazımı şurada bulabilirsiniz;
Bitcoin Core uygulamasını indirelim ve doğrulayalım;
# Bitcoin Core yükleme dosyası
$ wget https://bitcoincore.org/bin/bitcoin-core-0.18.0/bitcoin-0.18.0-arm-linux-gnueabihf.tar.gz# Doğrulama için kullanılacak SHA özetleri
$ wget https://bitcoincore.org/bin/bitcoin-core-0.18.0/SHA256SUMS.asc# Yazılımcı imzaları
$ wget https://bitcoin.org/laanwj-releases.asc
# SHA özetlerinin doğrulanması
$ sha256sum --check SHA256SUMS.asc --ignore-missing
# Yükleme dosyasının yanında OK yazmalı, uyarıları göz ardı edin
> bitcoin-0.18.0-arm-linux-gnueabihf.tar.gz: OK
# Bitcoin Core yazılımcısı Wladimir van der Laan imzasını yükleyelim
# Konsol çıktısındaki parmak izini doğrulamalısınız. (Bknz: link)
$ gpg --import ./laanwj-releases.asc
$ gpg --refresh-keys
$ gpg --verify SHA256SUMS.asc# Konsol çıktısı aşağıdaki gibi olmalı
> gpg: Good signature from "Wladimir J. van der Laan ..."
> Primary key fingerprint: 01EA 5486 DE18 A882 D4C2 6845 90C8 019E 36C2 E964
Her şey okey ise Bitcoin Core’u yükleyelim;
$ tar -xvf bitcoin-0.18.0-arm-linux-gnueabihf.tar.gz
$ sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-0.18.0/bin/*
$ bitcoind --version
> Bitcoin Core Daemon version v0.18.0
Çıktıdan görüldüğü üzere Bitcoin Core uygulamasının 0.18.0 versiyonu yüklenmiş.
Kullanacağımız uygulama, Bitcoin Core uygulamasının arka planda, kullanıcı arayüzü olmadan çalışan versiyonu ‘bitcoind’ dir. bitcoind uygulamasının verileri ‘home/bitcoin/.bitcoin’ dizini altında tutuluyor. Başka bir bilgisayarda indirdiğimiz Bitcoin verilerini taşınabilir diskte tutacağımız için bu dizini oluşturmayıp taşınabilir diske bağlayacağız.
‘bitcoind’ uygulamasını ‘bitcoin’ kullanıcısı ile çalıştıracağımız için mevcut kullanıcıyı değiştirelim.
$ sudo su - bitcoin
Taşınabilir diskte tuttuğumuz Bitcoin klasörüne sembolik link oluşturalım.
$ ln -s /mnt/hdd/bitcoin /home/bitcoin/.bitcoin
Sembolik linkin doğru şekilde oluştuğunu görmek için ~ dizinini listeleyelim;
$ cd
$ ls -la
bitcoind uygulaması çalışırken konfigürasyon dosyasını şurada arıyor: ‘home/bitcoin/.bitcoin/bitcoin.conf’. Bu dosyayı düzenlemek için;
$ nano /home/bitcoin/.bitcoin/bitcoin.conf
Bu dosyanın içeriğini aşağıdaki gibi güncelleyelim. [SIFRE]
kısmını zor bir şifre ile değiştirmelisiniz. Aksi takdirde BTC’leriniz çalınabilir.
# Mainnet'te çalışmak için aşağıdaki satırı kaldırın
testnet=1
# Bitcoind ayarları
server=1
daemon=1
# Bağlantı seçenekleri
rpcuser=raspibolt
rpcpassword=[SIFRE]
onlynet=ipv4
zmqpubrawblock=tcp://127.0.0.1:28332
zmqpubrawtx=tcp://127.0.0.1:28333
# Raspberry Pi optimizasyonu
dbcache=100
maxorphantx=10
maxmempool=50
maxconnections=40
maxuploadtarget=5000
Şimdi bitcoind uygulamasını çalıştırabiliriz. tail
komutundan sonra bir süre log’ları takip edebilirsiniz. Daha sonra CTRL+C ile çıkıp bitcoin-cli
uygulaması üzerinden güncel blockchain bilgisini sorgulayalım. Son olarak da bitcoind’yi sonlandıralım. Daha sonra otomatik çalışır hale getireceğiz.
$ bitcoind
$ tail -f /home/bitcoin/.bitcoin/testnet3/debug.log
$ bitcoin-cli getblockchaininfo
$ bitcoin-cli stop
Sistem yeniden başladığında ‘bitcoind’ nin otomatik olarak başlaması için servis tanımlamasını yapmalıyız. bitcoin kullanıcısından çıkıp admin olarak devam edelim. $ exit
. ‘bitcoind’ uygulamasına yeni bir service tanımlaması yapmak için;
$ sudo nano /etc/systemd/system/bitcoind.service[Unit]
Description=Bitcoin daemon
After=network.target
[Service]
ExecStartPre=/bin/sh -c 'sleep 30'
ExecStart=/usr/local/bin/bitcoind -daemon -conf=/home/bitcoin/.bitcoin/bitcoin.conf -pid=/home/bitcoin/.bitcoin/bitcoind.pid
PIDFile=/home/bitcoin/.bitcoin/bitcoind.pid
User=bitcoin
Group=bitcoin
Type=forking
KillMode=process
Restart=always
TimeoutSec=120
RestartSec=30
[Install]
WantedBy=multi-user.target
Kaydedip çıktıktan sonra: $ sudo systemctl enable bitcoind.service
‘admin’ kullanıcı ile de RPC istekleri yapabilmek için konfigürasyon dosyasını kopyalayalım:
$ mkdir /home/admin/.bitcoin
$ sudo cp /home/bitcoin/.bitcoin/bitcoin.conf /home/admin/.bitcoin/
Pi’yi yeniden başlatalım. $ sudo shutdown -r now
Yeniden başladıktan sonra tekrar SSH bağlantısı kuralım ve bitcoind servisini kontrol edelim.
$ systemctl status bitcoind.service
Uygulama loglarını incelemek ve blockchain bilgisini sorgulamak için;
$ sudo tail -f /home/bitcoin/.bitcoin/testnet3/debug.log
$ bitcoin-cli getblockchaininfo
Mainnet
Buraya kadar olan kısımda Raspberry Pi için gerekli ayarlamaları yaptık, Bitcoin Core uygulamasını daemon olarak testnet üzerinde çalıştırdık. Şimdi ise mainnet’de çalışacak şekilde güncellemeliyiz.
Gündelik bilgisayarımızda (Windows veya Linux) çalıştırdığımız Bitcoin Core uygulaması eğer tamamen senkronize olduysa (durum çubuğuna bknz.), Bitcoin verisini (~210 GB) Raspberry Pi’da kullanacağımız harici diske kopyalayalım. Bitcoin Core uygulamasının kurulumu sırasında blockchain verilerinin yükleneceği dizini seçmiştik (d:/bitcoin). Bu klasörünün içindeki blocks
ve chainstate
klasörlerini harici diske kopyalayalım. Dosyaları kopyaladıktan sonra diski Pi’ye takalım.
testnet üzerinde çalışan bitcoind servisini durdurup konfigürasyonunu mainnet’te çalışacak şekilde düzenlemeliyiz.
$ sudo systemctl stop bitcoind
$ sudo nano /home/bitcoin/.bitcoin/bitcoin.conf# testnet ayarını aşağıdaki gibi kapatalım
#testnet=1
Güncellenmiş dosyayı admin kullanıcı altına da taşıyalım.
$ sudo cp /home/bitcoin/.bitcoin/bitcoin.conf /home/admin/.bitcoin/
bitcoind servisini yeniden başlatalım ve çıktıları inceleyelim;
$ sudo systemctl start bitcoind
$ systemctl status bitcoind.service
$ sudo tail -f /home/bitcoin/.bitcoin/debug.log
$ bitcoin-cli getblockchaininfo
Bitcoin verilerini kopyaladığımızdan itibaren üretilen blokların eşleşmesini bekleyelim. getblockchaininfo
komutunun çıktısını incelerseniz; Aktif blockchain ‘mainnet’, Bitcoin blockchain’indeki son block ‘578950’ bizim indirdiğimiz son block ‘578921’. Bu iki değer aynı olduğu zaman full node’umuz Bitcoin blockchain’i ile eşleşmiş olacak.
Bitcoin Ağına Destek Olmak
Yazının başında belirttiğim gibi Bitcoin ağına destek olmak, transaction’ların ve block’ların dağıtılmasına katkı sağlamak istiyorsanız modeminizin port yönlendirilmesinin yapılmış olması gerekiyor. Ben kendi modemim üzerinden örnekler vereceğim. Diğer modellerde de aşağı yukarı aynıdır.
Modem ayarlarında ‘Firewall/Security’ menüsünün altından ‘Port Forwarding’ sekmesine yeni bir ayar girelim. ‘LAN Host IP’ değerine Raspberry Pi için tanımladığımız sabit IP’yi girelim. ‘WAN Port Range’ değerlerine de Bitcoin mainnet ağının standartı olan ‘8333’ değerini girelim. Hatırlarsanız Raspian işletim sisteminin firewall ayarlarında da bu port için erişim izni tanımlamıştık.
Bu adımları yaptıktan sonra artık dışarıdan bizim Bitcoin node’umuza bağlanabilirler. Bunun kontrolü için şu siteyi kullanabiliriz.
Bu site üzerinden şu anki dış IP’nizi sorgulayarak dışarıdan bağlantıları kabul edip etmediğimizi kontrol edebilirsiniz;
Aynı zamanda aşağıdaki komut ile de size kaç node bağlı olduğunu görebilirsiniz. Eğer 0 dan büyük bir rakamsa node’unuz dışarıdan erişilebilirdir.
$ bitcoin-cli getconnectioncount
> 10
Bitcoin Full Node çalıştırma ile ilgili yazım buraya kadar. Eğer tüm adımlar tamamlandıysa artık Bitcoin Full Node’unuz 7/24 çalışır ve dışarıdan erişilebilir durumdadır. Aktif olduğu müddetçe artık siz de Bitcoin ağının çalışmasına destek olursunuz.
Umarım faydalı olmuştur. Sorularınız için mail atabilir veya Twitter üzerinden ulaşabilirsiniz.
https://twitter.com/farukterzioglu
faruk.terzioglu[@]hotmail[.]com
Kaynaklar
https://bitcoin.org/en/
https://www.raspberrypi.org/documentation/setup/
https://github.com/Stadicus/RaspiBolt/