diff --git a/PKGBUILD b/PKGBUILD index 24f2fa5..f98bdc8 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,7 +1,7 @@ # Maintainer: bugra9 <bugra9@gmail.com> pkgname=bootableusb -pkgver=0.3 +pkgver=0.4 pkgrel=1 pkgdesc="Create bootable usb drives" arch=('i686' 'x86_64') diff --git a/README.md b/README.md index 49e7367..c088fff 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,44 @@ **UYARI:** Bu yazılım geliştirme aşamasındadır ve kullanım sonucu veri kaybına uğratabilir. -# BootableUSB +# BootableUSB v0.4 +Ön yüklemeli usb bellek oluşturmayı en kolay hale getiren yazılım. Bir kere yükle bir daha hep ön yüklemeli kalsın felsefesini benimser. -Sürükle bırak yöntemiyle kullanılabilir ön yüklemeli usb sürücü oluşturur. Fat32 dosya sistemi türünü destekleyen her işletim sisteminde çalışır. - -Bu yazılım aşağıdaki işlevleri yerine getirmek için hazırlanmıştır. -- Usb bellek üzerinden Windows işletim sisteminin yüklenebilmesi -- Usb bellek üzerinde bulunan iso kalıbından Linux dağıtımlarının başlatılması +Bu yazılımla oluşturulmuş usb bellek ile yapabilecekleriniz; +- Windows işletim sisteminin yüklenmesi +- Bir ya da birden fazla linux dağıtımından seçilenin başlatılması - Diskte daha önce kurulmuş işletim sistemlerinin başlatılması +Bu işlemlerin ne kadar kolay yapılabileceğini öğrenmek istiyorsan gel beraber inceleyelim. Öncelikle bir defalığına usb belleği ön yüklemeli hale getirdiğini düşün. Bundan sonra neler yapabileceklerine bakalım. + +**Windows işletim sisteminin ayarlanması** +Usb belleğin içine kurulum dosyalarını at. Evet bu kadar, herhangi bir yazılım çalıştırman gerekmiyor. + +**Linux dağıtımının ayarlanması** +Kalıp dosyasını bootableusb/linux dizini içine at. Cidden bu kadar :) + +**Birden fazla linux dağıtımının ayarlanması (MultiBoot)** +İstediğin dağıtımlara ait kalıp dosyalarını bootableusb/linux dizini içine at. Bu iş garipleşmeye başladı değil mi? + +**Canlı olarak kullandığın dağıtımdaki değişikliklerin kaybolmamasını mı istiyorsun?** +bootableusb/persistent içerisinde bulunan 1024.tar.gz gibi çeşitli boyut isimlendirmesine sahip dosyalardan istediğini oraya çıkart. Tahmin edebileceğin gibi hepsi bu. Eğer yer sıkıntısı çekersen, kullanmayacağın zamanlarda tekrar sıkıştırırsın. + +**Bozulmuş gruba rağmen diskteki işletim sistemini başlatma** +Bilgisayarındaki dağıtım açılmıyor mu, hemen usb bellek üzerindeki grubu kullanarak erişemediğin yüklü dağıtımı başlat. + +## Çalışma Mantığı +Farkettin mi bilmiyorum ama bu işlemlerin hiçbirisi için bu yazılımı kullanman gerekmiyor. Tüm işleri sürükle bırak ile yapıyorsun. Gerçekten kolay değil mi? + +Gerçekten böyle bir şey olabilir mi diye merak etmeye mi başladın? Çalışma mantığını mı öğrenmek istiyorsun gel beraber inceleyelim. İlk önce şu meşhur yüklememizi yapalım. +``` +bootableusb --install /dev/sdX +``` +Evet bu komut ne yapıyorda bundan sonra her şey kendiliğinden oluyor. Hemen ne yaptığına bakalım. +- Usb belleği biçimlendirir. +- İçine grubu kurar. +- Grub yapılandırmasını oluşturur. (Sihirli sözcükleri mi söyledim ne) + +Evet çok basit görünse de tüm marifet grub yapılandırmasında bitiyor. Grubu öyle bir ayarlıyorsun ki artık grub tüm işlemleri kendisi yönetiyor. Grubun yeteneklerinin farkında olmayanlar için bu yazılımla yapabileceklerini göstermek istedim. Madem her şeyi anladık bir de bu yazılımı bilgisayarımıza nasıl yükleyeceğimize bakalım. + ## Yükleme **Ubuntu** ``` @@ -33,105 +63,95 @@ sudo make uninstall ``` komutuyla silebilirsiniz. -## Çalışma Şekli -Bu yazılım diğer yazılımlardan farklı olarak hem kurulum hem de veri depolanması şeklinde kullanım için hazırlanmıştır. Yazılım kullanılarak bir defalığına usb bellek hazırlanır. -**Dikkat:** Aygıt içerisinde bulunan tüm veriler silinecektir. +**Yüklemeden Çalıştırma** +Yazılımı isterseniz yüklemeden kullanabilirsiniz. Bu durumda dil İngilizce olacaktır. ``` -sudo bootableusb --prepare /dev/sdX +./bootableusb ``` -Bu hazırlama aşamasında yazılım usb belleği fat32 türünde biçimlendirir ve üzerine grubu kurarak ayarlarını yapar. - -Bu aşamadan sonra usb bellek istenildiği gibi kullanılabilir. -Eğer windows kurulmak istenirse kalıp dosyaları usb üzerine çıkarılır ve bilgisayar usb bellekten başlatılır. Grub ekranından Windows kurulumu seçilerek devam edilir. Yükleme bittiğinde ise usb bellek üzerindeki Windows dosyaları silinerek normal kullanıma devam edilir. Dikkat edilecek nokta, usb bellek içindeki grub klasörü silinmemelidir. - -Linux dağıtımı kurmak ya da canlı olarak başlatmak için linux kalıbı direk linux.iso ismiyle usb belleğin içine kopyalanır. Bilgisayar usb bellekten başlatılarak grub ekranından Linux kalıbından başlatma seçilerek devam edilir. Kullanım bitince bellek üzerindeki bu iso dosyası silinip kullanıma devam edilir. -Eğer disk üzerindeki grub silinir ya da bozulursa, disk üzerindeki işletim sistemleri usb bellek üzerinden başlatılabilir. Bunun için bilgisayarı usb bellekten başlattıktan sonra grub ekranından diskte bulunan bir işletim sistemi seçilerek devam edilir. - -## Kullanım Senaryoları - -### Ubuntu yanına Windows kurma - -İlk önce usb belleğimizin /dev/sdX biçiminde olan ismini öğrenmek için bilgisayara bağlı olan aygıtlar listelenir. -``` -bootableusb --listDevices -``` - -Eğer daha önce yazılım hiç çalıştırılmadıysa ya da usb belleğin yapısı bozulduysa önce hazırlık yapılır. -**Dikkat:** Aygıt içerisinde bulunan tüm veriler silinecektir. -``` -sudo bootableusb --prepare /dev/sdX -``` - -Daha sonra Windows dosyaları usb belleğe kopyalanır. Eğer bu kopyalama işlemi elle yapılmak istenmiyorsa yazılım aracılığı ile yapılabilir. -``` -sudo bootableusb --extract ~/windowsIsoPath.iso /dev/sdX -``` - -Artık her şey hazır. Bilgisayar usb bellekten başlatılarak grub ekranında Windows kurulumu seçilir ve Windows kurulur. +## Seçenekler -Windows kurulumu tamamlandıktan sonra grub yerine Windows'un kendi başlatıcısı yüklenecektir. Diskteki linux dağıtımlarına ulaşabilmek için grub yeniden kurulmalıdır. Bunun için bilgisayar usb bellekten başlatılarak grub ekranından diskte yüklü olan bir linux dağıtımı seçilerek açılır. Sürekli usb bellekten başlatmamak için bu diske grub tekrardan kurulur. -``` -sudo bootableusb --repairGrub /dev/sdY ``` +bootableusb [SEÇENEKLER]... AYGIT -### Ubuntu yanına başka bir linux dağıtımı kurma +Bir defalığına usb belleği ön yüklemeli hale getirirsiniz, +daha sonra yazılıma ihtiyaç duymadan sürükle bırak ile +windows ve linux dağıtımlarını usb bellek üzerinden başlatırsınız. -Eğer daha önce yazılım hiç çalıştırılmadıysa ya da usb belleğin yapısı bozulduysa önce hazırlık yapılır. -**Dikkat:** Aygıt içerisinde bulunan tüm veriler silinecektir. -``` -sudo bootableusb --prepare /dev/sdX -``` +AYGIT: Genellikle /dev/sdb, /dev/sdc gibi /dev/sdX biçiminde usb belleği gösteren aygıt adı. +bootableusb --listDevices komutuyla bağlı aygıtlar listelenip ilgili aygıt adı öğrenilir. -Daha sonra kurulacak dağıtımın kalıp dosyası usb belleğe linux.iso ismiyle kopyalanır ve bilgisayar usb bellekten başlatılır. Grub ekranından Linux kalıbından başlatma seçilerek devam edilir. +-l, --listDevices: + Bilgisayara bağlı olan aygıtları listeler. -### Ubuntu'nun bozulması sonucu kurtarma işlemi için başka bir linux dağıtımını kullanma -Yukarıdaki adımlar ile gerçekleştirilir. +-i, --install: + Usb belleği biçimlendirir, grubu kurar ve yapılandırmasını ayarlar. + Kısaca kullanılmaya hazır duruma getirir. + Dikkat: Aygıt içerisinde bulunan tüm veriler silinecektir. +-u, --updateGrub: + Usb bellekte bulunan grubun ayarlarını günceller. + Bu güncellemeyle hatalar giderilebilir, daha çok dağıtım desteklenebilir. -## Seçenekler +-r, --repairGrub: + Disk üzerindeki silinen / bozulan grubu tamir eder. -``` -bootableusb [SEÇENEKLER]... AYGIT +-e, --extract KALIPKONUMU: + Windows kurulum dosyaları kalıp halinde ise bu komutla kolayca + kalıbın içindekiler usb belleğin içine çıkarılır. -AYGIT: Genellikle /dev/sdb, /dev/sdc gibi /dev/sdX biçiminde usb belleği gösteren aygıt adı. -bootableusb --listDevices komutuyla bağlı aygıtlar listelenip ilgili aygıt adı öğrenilir. +-p, --persistent BOYUT: + Canlı olarak kullanılan dağıtımlar üzerinde yaptığınız değişikliklerin + kalıcı olması için bu değişikliklerin kaydedileceği boş bir kalıp dosyasını + bootableusb/persistent dizininde oluşturur. + BOYUT: bu kalıp dosyasının megabyte olarak boyutu. Örn: 1024, 2048, 500 ---prepare: - Usb belleği biçimlendirir ve grubu kurar. - Dikkat: Aygıt içerisinde bulunan tüm veriler silinecektir. +-pr, --resizePersistent BOYUT: + Değişikliklerin kaydedildiği kalıp dosyasının boyutunu değiştirir. + BOYUT: bu kalıp dosyasına megabyte olarak ne kadar ekleneceği. Örn: 1024, 2048, 500 --format: Usb belleği biçimlendirir. Dikkat: Aygıt içerisinde bulunan tüm veriler silinecektir. --installGrub: - Eğer usb belleğin yapısı uygunsa grubu kurar. + Grubu kurar ve yapılandırmasını ayarlar. Biçimlendirme istenmeyen durumlarda kullanılır. ---extract isoPath: - Eğer usb bellekte grub bulunuyorsa belirtilen iso kalıbını belleğe açar. ---updateGrub: - Usb bellekte bulunan grubun ayarlarını günceller. - ---repairGrub: - Disk üzerindeki silinen / bozulan grubu tamir eder. - - --v, --verbose: +--verbose: Her adımda ne yapıldığını açıklar. -h, --help: Yardım dosyasını görüntüler ---version: +-v, --version: Sürüm bilgisini gösterir. - --l, --listDevices: - Bilgisayara bağlı olan aygıtları listeler. ``` -## Notlar -Lisans: GPLv3 +## Katkıda Bulunma +Bu yazılım açık kaynaklı ve özgürdür. Eğer katkıda bulunmak istiyor ama ne yapacağınızı bilmiyorsanız aşağıdaki maddeler ile fikir edinebilirsiniz. -https://github.com/slacka/WinUSB projesindeki bazı kodlar kullanılmıştır. \ No newline at end of file +- Denediğiniz linux dağıtımı çalışmıyorsa hata kaydı açarak bildirebilirsiniz. +- Yazılımın bir yerinde sorun gördüyseniz hata kaydı açarak bildirebilirsiniz. +- Çeviri hatalarını düzeltip yeni çevirilerde bulunabilirsiniz. +- Dökümantasyonları genişletebilir, çevirilerde bulunabilirsiniz. +- Faydalı olabilecek özellikleri bildirebilirsiniz. + +Bildirim yapmak için: <https://github.com/bugra9/BootableUSB/issues/new> +Çeviri Bağlantısı: <https://translations.launchpad.net/bootableusb> +Çeviri dosyaları: <https://github.com/bugra9/BootableUSB/tree/master/po> +Man Sayfaları: <https://github.com/bugra9/BootableUSB/tree/master/man> +Beni Oku Sayfası: <https://github.com/bugra9/BootableUSB/blob/master/README.md> +Kaynak Kodlar: <https://github.com/bugra9/BootableUSB/blob/master/src/bootableusb> + +## Notlar +**Lisans** +GPLv3 <https://github.com/bugra9/BootableUSB/blob/master/LICENSE> +Bu programın KESİNLİKLE HİÇBİR TEMİNATI YOKTUR + +**Yararlanılan Kaynaklar** +<https://www.gnu.org/software/grub/manual/grub.html> +<https://github.com/slacka/WinUSB> +<https://wiki.archlinux.org/index.php/Multiboot_USB_drive> +<https://help.ubuntu.com/community/Grub2/ISOBoot> +<https://help.ubuntu.com/community/Grub2/ISOBoot/Examples> \ No newline at end of file diff --git a/debian/changelog b/debian/changelog index 7b0eea2..a705f99 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -bootableusb (0.3) unstable; urgency=medium +bootableusb (0.4) unstable; urgency=medium * Initial release diff --git a/man/bootableusb.1.en b/man/bootableusb.1.en index ad348c7..8a5a580 100644 --- a/man/bootableusb.1.en +++ b/man/bootableusb.1.en @@ -1,44 +1,68 @@ -.TH BOOTABLEUSB "1" "November 2016" "bootableusb v0.3" +.TH BOOTABLEUSB "1" "November 2016" "bootableusb v0.4" .SH NAME bootableusb \- Create bootable USB drives .SH SYNOPSIS bootableusb [OPTIONS]... DEVICE .PP .SH DESCRIPTION +Once prepare your usb drives. +bootableusb --install /dev/sdX +Copy linux .iso images to bootableusb/linux directory on usb drive +Copy windows files to usb drive +You will be able to boot into either Windows or linux distros. .PP .PP DEVICE: The block device to be used. +.br Use bootableusb \fB\-\-listDevices\fR -.SS "--prepare:" +.SS "-l, --listDevices:" .IP -Format your usb drive and install grub -Warning: All data on device will be destroyed. -.SS "--format:" +Lists information about all storage devices +.SS "-i, --install:" .IP -Format your usb drive +Format your usb drive and install grub. +.br Warning: All data on device will be destroyed. -.SS "--installGrub:" +.SS "-u, --updateGrub:" .IP -Install grub -.SS "--extract isoPath:" +Update grub on usb drives +.SS "-r, --repairGrub:" +.IP +Repair grub on disk. +.SS "-e, --extract ISOPATH:" .IP Extract Windows ISO to usb drive -.SS "--updateGrub:" +.SS "-p, --persistent SIZE:" +.IP +By allocating extra space on your USB stick for a persistent overlay, you will be able to store data and make permanent modifications to your live operating system. Without it, you will not be able to save data that will persist after a reboot. (bootableusb/persistent/SIZE.tar.gz) +.br +SIZE: persistent image size (MB). e.g: 1024, 2048, 500 +.SS "-pr, --resizePersistent SIZE:" .IP -Update grub -.SS "--repairGrub:" +Resize persistent image (bootableusb/persistent/casper-rw) +.br +SIZE: want to extend size (MB). Örn: 1024, 2048, 500 +.SS "--format:" +.IP +Format your usb drive +.br +Warning: All data on device will be destroyed. +.SS "--installGrub:" .IP -Repair grub -.SS "-v, --verbose:" +Install grub without format usb drive. +.SS "--verbose:" .IP Explain what is being done .SS "-h, --help:" .IP Display this help and exit -.SS "--version:" +.SS "-v, --version:" .IP Output version information and exit -.SS "-l, --listDevices:" -.IP -Lists information about all storage devices .PP + +.SH LICENSE +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. diff --git a/man/bootableusb.1.tr b/man/bootableusb.1.tr index a0c0005..6fc8ad3 100644 --- a/man/bootableusb.1.tr +++ b/man/bootableusb.1.tr @@ -1,46 +1,61 @@ -.TH BOOTABLEUSB "1" "November 2016" "bootableusb v0.3" -.SH NAME +.TH BOOTABLEUSB "1" "November 2016" "bootableusb v0.4" +.SH İSİM bootableusb \- Ön yüklemeli USB sürücü oluştur -.SH SYNOPSIS +.SH KULLANIM bootableusb [SEÇENEKLER]... AYGIT .PP -.SH DESCRIPTION -Sürükle bırak yöntemiyle kullanılabilir ön yüklemeli usb sürücü oluşturur. -Fat32 dosya sistemi türünü destekleyen her işletim sisteminde çalışır. +.SH AÇIKLAMA +Bir defalığına usb belleği ön yüklemeli hale getirirsiniz, daha sonra yazılıma ihtiyaç duymadan sürükle bırak ile windows ve linux dağıtımlarını usb bellek üzerinden başlatırsınız. .PP .PP AYGIT: Genellikle \fI\,/dev/sdb\/\fP, \fI\,/dev/sdc\/\fP gibi \fI\,/dev/sdX\/\fP biçiminde usb belleği gösteren aygıt adı. +.br bootableusb \fB\-\-listDevices\fR komutuyla bağlı aygıtlar listelenip ilgili aygıt adı öğrenilir. -.SS "--prepare:" +.SS "-l, --listDevices:" +.IP +Bilgisayara bağlı olan aygıtları listeler. +.SS "-i, --install:" .IP -Usb belleği biçimlendirir ve grubu kurar. +Usb belleği biçimlendirir, grubu kurar ve yapılandırmasını ayarlar. Kısaca kullanılmaya hazır duruma getirir. +.br Dikkat: Aygıt içerisinde bulunan tüm veriler silinecektir. +.SS "-u, --updateGrub:" +.IP +Usb bellekte bulunan grubun ayarlarını günceller. Bu güncellemeyle hatalar giderilebilir, daha çok dağıtım desteklenebilir. +.SS "-r, --repairGrub:" +.IP +Disk üzerindeki silinen / bozulan grubu tamir eder. +.SS "-e, --extract KALIPKONUMU:" +.IP +Windows kurulum dosyaları kalıp halinde ise bu komutla kolayca kalıbın içindekiler usb belleğin içine çıkarılır. +.SS "-p, --persistent BOYUT:" +.IP +Canlı olarak kullanılan dağıtımlar üzerinde yaptığınız değişikliklerin kalıcı olması için bu değişikliklerin kaydedileceği boş bir kalıp dosyasını bootableusb/persistent dizininde oluşturur. +.br +BOYUT: bu kalıp dosyasının megabyte olarak boyutu. Örn: 1024, 2048, 500 +.SS "-pr, --resizePersistent BOYUT:" +.IP +Değişikliklerin kaydedildiği kalıp dosyasının boyutunu değiştirir. +.br +BOYUT: bu kalıp dosyasına megabyte olarak ne kadar ekleneceği. Örn: 1024, 2048, 500 .SS "--format:" .IP Usb belleği biçimlendirir. +.br Dikkat: Aygıt içerisinde bulunan tüm veriler silinecektir. .SS "--installGrub:" .IP -Eğer usb belleğin yapısı uygunsa grubu kurar. -.SS "--extract isoPath:" -.IP -Eğer usb bellekte grub bulunuyorsa belirtilen iso kalıbını belleğe açar. -.SS "--updateGrub:" -.IP -Usb bellekte bulunan grubun ayarlarını günceller. -.SS "--repairGrub:" -.IP -Disk üzerindeki silinen / bozulan grubu tamir eder. -.SS "-v, --verbose:" +Grubu kurar ve yapılandırmasını ayarlar. Biçimlendirme istenmeyen durumlarda kullanılır. +.SS "--verbose:" .IP Her adımda ne yapıldığını açıklar. .SS "-h, --help:" .IP Yardım dosyasını görüntüler -.SS "--version:" +.SS "-v, --version:" .IP Sürüm bilgisini gösterir. -.SS "-l, --listDevices:" -.IP -Bilgisayara bağlı olan aygıtları listeler. .PP + +.SH LİSANS +Bu bir özgür yazılımdır; GNU Genel Kamu Lisansı sürüm 3 (GPLv3) <http://www.gnu.org/licenses/gpl.html> koşullarına bağlı kalarak kopyalarını yeniden dağıtabilirsiniz. Yasaların izin verdiği ölçüde hiçbir garantisi yoktur; hatta SATILABİLİRLİĞİ veya ŞAHSİ KULLANIMINIZA UYGUNLUĞU için bile garanti verilmez. diff --git a/po/en.pot b/po/en.pot index 6f1cd73..1cc8c10 100644 --- a/po/en.pot +++ b/po/en.pot @@ -66,3 +66,9 @@ msgstr "" msgid "WARNING: ALL DATA ON DEVICE '%s' WILL BE DESTROYED. \nAre you sure you want to continue? (y/n)" msgstr "" + +msgid "Operating Systems on Disk" +msgstr "" + +msgid "Reboot" +msgstr "" \ No newline at end of file diff --git a/po/tr.po b/po/tr.po index 8b185f4..b309049 100644 --- a/po/tr.po +++ b/po/tr.po @@ -61,3 +61,9 @@ msgstr "Hata: herhangi bir işlem belirtilmemiş!" msgid "WARNING: ALL DATA ON DEVICE '%s' WILL BE DESTROYED. \nAre you sure you want to continue? (y/n)" msgstr "UYARI: '%s' AYGITINDAKİ TÜM VERİ YOK EDİLECEK.\nİşleme devam etmek istediğine emin misin? (e/h)" + +msgid "Operating Systems on Disk" +msgstr "Disk Üzerindeki İşletim Sistemleri" + +msgid "Reboot" +msgstr "Yeniden Başlat" diff --git a/src/bootableusb b/src/bootableusb index fcce36a..45d4750 100755 --- a/src/bootableusb +++ b/src/bootableusb @@ -1,283 +1,50 @@ #!/bin/bash # ================================================================= -# BootableUSB v0.3 +# BootableUSB v0.4 # # @link https://github.com/bugra9/BootableUSB # @author bugra9 https://github.com/bugra9 # @contributors https://github.com/bugra9/BootableUSB/graphs/contributors -# @license GPLv3 +# @license GPLv3 https://github.com/bugra9/BootableUSB/blob/master/LICENSE +# +# [TR] Bu programın KESİNLİKLE HİÇBİR TEMİNATI YOKTUR +# [EN] This program comes with ABSOLUTELY NO WARRANTY # ================================================================= # ================================================================= -# Bilgi Veren Sayfalar +# İçindekiler +# +# 1. Ana Fonksiyonlar ........................ 43 +# 1.1. prepare ............................... 48 +# 1.2. format ................................ 56 +# 1.3. installGrub ........................... 88 +# 1.4. updateGrub ............................ 103 +# 1.5. persistent ............................ 109 +# 1.6. resizePersistent ...................... 122 +# 1.7. extract ............................... 133 +# 1.8. repairGrub ............................ 162 +# 1.9. main .................................. 170 +# +# 2. Yardımcı Fonksiyonlar ................... 277 +# 2.1. print ................................. 285 +# 2.2. checkDependencies ..................... 305 +# 2.3. writeGrubCfg .......................... 319 +# 2.4. mountUSB .............................. 447 +# 2.5. umountUSB ............................. 479 +# +# 3. Bilgi Fonksiyonları ..................... 493 +# 3.1. displayHelp ........................... 498 +# 3.2. displayVersion ........................ 508 +# 3.3. displayDevices ........................ 513 +# # ================================================================= -# Yardım sayfasını içerir. -function displayHelp() { - if [[ "$(dirname $(readlink -f $0))" == "/usr/bin" ]]; then - temp=$(man bootableusb) - else - temp=$(man "../man/bootableusb.1.tr") - fi - echo "$temp" -} - -# Yazılım sürümünü yazdırır. -function displayVersion() { - printf "bootableusb v0.3" -} - -# Bilgisayara bağlı aygıtları listeler. -function displayDevices() { - print "===========================================" - print "All Storage Devices" - allDevices=$(lsblk -d -p -o MODEL,SIZE,NAME | grep "/dev/sd") - print "${allDevices}" - print "===========================================" -} - # ================================================================= -# Yardımcı Fonksiyonlar +# Ana Fonksiyonlar # ================================================================= - -function print_i18n() { - temp=$(gettext -e -s "$1") - printf "${temp}\n" "$2" $3 $4 -} -function print() { - print_i18n "$1" "$2" "$3" "$4" -} -function printV() { - echo -en "\033[0;33m" - print_i18n "$1" "$2" "$3" "$4" - tput sgr0 -} -function printE() { - echo -en "\033[0;31m" - print_i18n "$1" "$2" "$3" "$4" - tput sgr0 -} -function printS() { - echo -en "\033[0;32m" - print_i18n "$1" "$2" "$3" "$4" - tput sgr0 -} - -# Fat32 türünde biçimlendirecek yazılım aranır. Yoksa hata iletisi gösterilip çıkış yapılır. -function checkDependencies() { - if [[ "$1" == 'mkdosfs' ]]; then - mkdosfs='' - if which 'mkdosfs' > /dev/null; then - mkdosfs='mkdosfs' - elif which 'make.msdos' > /dev/null; then - mkdosfs='mkfs.msdos' - else - printE "Error: mkdosfs or mkfs.msdos program not found!" - exit 1 - fi - fi -} - -# Grub ayarlarını içerir ve bu ayarları /grub/grub.cfg dosyasına yazar. -function writeGrubCfg() { - uuid=$(blkid -o value -s UUID "$partition") - echo " -insmod fat -search --no-floppy --fs-uuid $uuid --set root - -if [ -s /grub/grubenv ]; then - set have_grubenv=true - load_env -fi -function recordfail { - set recordfail=1 - if [ -n \"\${have_grubenv}\" ]; then if [ -z \"\${boot_once}\" ]; then save_env recordfail; fi; fi -} -function load_video { - if [ x\$feature_all_video_module = xy ]; then - insmod all_video - else - insmod efi_gop - insmod efi_uga - insmod ieee1275_fb - insmod vbe - insmod vga - insmod video_bochs - insmod video_cirrus - fi -} - -if [ x\$feature_default_font_path = xy ] ; then - font=unicode -else - font=\"/grub/fonts/unicode.pf2\" -fi - -if loadfont \$font ; then - set gfxmode=auto - load_video - insmod gfxterm - set locale_dir=/grub/locale - set lang=tr_TR - insmod gettext -fi -terminal_output gfxterm - -menuentry \"$(gettext -s 'Install Windows')\" { - ntldr /bootmgr - boot -} -submenu \"$(gettext -s 'Boot Linux ISO Image')\" { - menuentry \"GParted\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - linux (loop)/live/vmlinuz boot=live union=overlay username=user config components quiet noswap noeject toram=filesystem.squashfs ip= nosplash findiso=\$isofile - initrd (loop)/live/initrd.img - } - menuentry \"SystemRescueCD\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - linux (loop)/isolinux/rescue64 isoloop=\$isofile - initrd (loop)/isolinux/initram.igz - } - menuentry \"Ubuntu 64 Bit\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=\$isofile quiet splash noprompt noeject - initrd (loop)/casper/initrd.lz - } - menuentry \"Ubuntu 64 Bit - $(gettext -s 'Run from RAM')\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=\$isofile quiet splash noprompt noeject toram - initrd (loop)/casper/initrd.lz - } - menuentry \"Ubuntu 32 Bit\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=\$isofile quiet splash noprompt noeject - initrd (loop)/casper/initrd.lz - } - menuentry \"Arch Linux\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - linux (loop)/arch/boot/x86_64/vmlinuz archisodevice=/dev/loop0 img_dev=\$imgdevpath img_loop=\$isofile earlymodules=loop - initrd (loop)/arch/boot/x86_64/archiso.img - } - menuentry \"Debian\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - linux (loop)/live/vmlinuz boot=live config fromiso=/dev/sdb2/\$isofile - initrd (loop)/live/initrd.img - } - menuentry \"Elementary OS\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=\$isofile - initrd (loop)/casper/initrd.lz - } - menuentry \"Fedora\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - linux (loop)/isolinux/vmlinuz root=live:CDLABEL=Fedora-WS-Live-24-1-2 iso-scan/filename=\$isofile rd.live.image quiet - initrd (loop)/isolinux/initrd.img - } - menuentry \"Gentoo\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - linux (loop)/isolinux/gentoo root=/dev/ram0 init=/linuxrc aufs looptype=squashfs loop=/image.squashfs cdroot isoboot=\$isofile vga=791 splash=silent,theme:default console=tty0 - initrd (loop)/isolinux/gentoo.xz - } - menuentry \"Kali Linux\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - linux (loop)/live/vmlinuz boot=live findiso=\$isofile noconfig=sudo username=root hostname=kali - initrd (loop)/live/initrd.img - } - menuentry \"Linux Mint\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=\$isofile noeject noprompt - initrd (loop)/casper/initrd.lz - } - menuentry \"OpenSUSE $(gettext -s 'Live')\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - set imgdevpath=\"/dev/disk/by-uuid/$uuid\" - linux (loop)/boot/x86_64/loader/linux isofrom_device=\$imgdevpath isofrom_system=\$isofile LANG=en_US.UTF-8 - initrd (loop)/boot/x86_64/loader/initrd - } - menuentry \"OpenSUSE $(gettext -s 'Setup')\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - linux (loop)/boot/x86_64/loader/linux install=hd:\$isofile - initrd (loop)/boot/x86_64/loader/initrd - } - menuentry \"Tails\" { - set isofile=\"/linux.iso\" - loopback loop \$isofile - linux (loop)/live/vmlinuz2 boot=live config findiso=\${isofile} live-media=removable apparmor=1 security=apparmor nopersistent noprompt timezone=Etc/UTC block.events_dfl_poll_msecs=1000 noautologin module=Tails - initrd (loop)/live/initrd2.img - } -} -" > "$cfgPath" - awk '/### BEGIN \/etc\/grub.d\/10_linux ###/,/### END \/etc\/grub.d\/10_linux ###/' /boot/grub/grub.cfg >> "$cfgPath" -} - -# /dev/sdX biçiminde belirtilen aygıtı sisteme bağlar. -function mountUSB() { - # Cihaz üzerindeki tüm bölümleri okuyup dizi olarak tanımlıyoruz. - partition=($(ls --color=no -1 "${device}"*)) - - # Dizinin uzunluğu 2 değilse sorun var demektir. (/dev/sdc /dev/sdc1) - if [[ ${#partition[@]} != 2 ]] ; then - printE "Error: this drive contains multiple partitions!" - exit 1 - fi - - # Dizideki son eleman bizim aradığımız bölüm - partition=${partition[-1]} - - # Eğer bağlıysa bağlandığı noktayı öğreniyoruz. - # Bağlı değilse belirlediğimiz noktaya bağlıyoruz. - temp=($(mount | grep "$partition")) - if [[ "${temp}" == "" ]] ; then - partitionPath="/media/bootableusb_$(date +%s)_$$" - mkdir -p "$partitionPath" - mount "$partition" "$partitionPath" - # Yazılım aracılığıyla bağladığımız için işlemlerin - # sonucunda bağı kaldırmamız gerekiyor. - mountCond="1" - else - partitionPath="${temp[2]}" - mountCond="0" - fi - - # Grub yapılandırma dosyasının bulunduğu konumu değişkene atıyoruz. - cfgPath="$partitionPath/grub/grub.cfg" -} - -function umountUSB() { - sync - - if [[ "$mountCond" == "1" ]] ; then - umount "${partitionPath}" >& /dev/null - returnCodes=$? - if [[ $returnCodes != 0 ]] ; then - printE "Error: unable to securely unmount %s" "${partitionPath}" - else - rmdir "${partitionPath}" - fi - fi -} - -# ================================================================= -# İşlemler -# ================================================================= - -# Diski biçimlendirip grubu yükler. +# (install) Diski biçimlendirip grubu yükler. function prepare() { format sleep 5 @@ -291,10 +58,10 @@ function format() { print "WARNING: ALL DATA ON DEVICE '%s' WILL BE DESTROYED. \nAre you sure you want to continue? (y/n)" "${device}" read -n 1 -r print " " - if [[ ! $REPLY =~ ^[YyEe]$ ]] ; then + ch=$(gettext -s -e "WARNING: ALL DATA ON DEVICE '%s' WILL BE DESTROYED. \nAre you sure you want to continue? (y/n)" | grep "\(\K([^/]+)" -oP) + if [[ ! $REPLY == "$ch" ]] ; then exit 1 fi - # Biçimlendirilecek aygıt üzerinde # bağlı olan bölümlerin bağı kaldırılıyor. mountedParts=($(mount | grep "${device}" | cut -d' ' -f1)) @@ -302,7 +69,7 @@ function format() { umount "${part}" >& /dev/null returnCodes=$? if [[ $returnCodes != 0 ]] ; then - printE "Error: the device is in use by another process.\nPlease close any other process that may be accessing the device.\nError Code: %s" "${returnCodes}" + printE "Error: the device is in use by another process. \nPlease close any other process that may be accessing the device. \nError Code: %s" "${returnCodes}" exit 1 fi done @@ -321,7 +88,10 @@ function format() { function installGrub() { mountUSB - grub-install --target=i386-pc --boot-directory="$partitionPath" "$device" >& /dev/null + grub-install --target=i386-pc --boot-directory="$partitionPath/bootableusb" "$device" >& /dev/null + + mkdir -p "$partitionPath/bootableusb/linux" + mkdir -p "$partitionPath/bootableusb/persistent" mkdir -p "$(dirname "${cfgPath}")" writeGrubCfg @@ -336,6 +106,29 @@ function updateGrub() { umountUSB } +function persistent() { + tmpdir=$(mktemp -d) + echo $1 + dd if=/dev/zero of=$tmpdir/casper-rw bs=1M count=$1 + sync + mkfs.ext4 -F $tmpdir/casper-rw + mountUSB + tar -czf "$partitionPath/bootableusb/persistent/$1.tar.gz" -C $tmpdir casper-rw + sync + rm -r "$tmpdir" + umountUSB +} + +function resizePersistent() { + mountUSB + e2fsck -fy "$partitionPath/bootableusb/persistent/casper-rw" + dd if=/dev/zero bs=1M count=$1 >> "$partitionPath/bootableusb/persistent/casper-rw" + sync + e2fsck -fy "$partitionPath/bootableusb/persistent/casper-rw" + resize2fs "$partitionPath/bootableusb/persistent/casper-rw" + umountUSB +} + # Kalıp dosyasını usb belleğin içine açar. function extract() { isoMountPath="/media/bootableusb_iso_$(date +%s)_$$" @@ -361,10 +154,8 @@ function extract() { print "Copying files..." rsync -rlt --info=progress2 "$isoMountPath"/* "$partitionPath"/ sync - umount $isoMountPath umountUSB - } # Diskteki grubu onarır. @@ -382,15 +173,15 @@ function main() { '--help'|'-h') displayHelp exit 0;; - '--version') + '--version'|'-v') displayVersion exit 0;; '--listDevices'|'-l') displayDevices exit 0;; - '--verbose'|'-v') + '--verbose') verbose='1';; - '--prepare') + '--install'|'-i') method='prepare' shift device=$(readlink -f "$1");; @@ -402,17 +193,29 @@ function main() { method='installGrub' shift device=$(readlink -f "$1");; - '--extract') + '--persistent'|'-p') + method='persistent' + shift + size=$1 + shift + device=$(readlink -f "$1");; + '--resizePersistent'|'-pr') + method='resizePersistent' + shift + size=$1 + shift + device=$(readlink -f "$1");; + '--extract'|'-e') method='extract' shift isoPath=$(readlink -f "$1") shift device=$(readlink -f "$1");; - '--updateGrub') + '--updateGrub'|'-u') method='updateGrub' shift device=$(readlink -f "$1");; - '--repairGrub') + '--repairGrub'|'-r') method='repairGrub' shift device=$(readlink -f "$1");; @@ -449,6 +252,12 @@ function main() { 'installGrub') installGrub ;; + 'persistent') + persistent $size + ;; + 'resizePersistent') + resizePersistent $size + ;; 'extract') extract ;; @@ -465,11 +274,262 @@ function main() { esac } +# ================================================================= +# Yardımcı Fonksiyonlar +# ================================================================= + +function print_i18n() { + temp=$(gettext -e -s "$1") + printf "${temp}\n" "$2" $3 $4 +} +function print() { + print_i18n "$1" "$2" "$3" "$4" +} +function printV() { + echo -en "\033[0;33m" + print_i18n "$1" "$2" "$3" "$4" + tput sgr0 +} +function printE() { + echo -en "\033[0;31m" + print_i18n "$1" "$2" "$3" "$4" + tput sgr0 +} +function printS() { + echo -en "\033[0;32m" + print_i18n "$1" "$2" "$3" "$4" + tput sgr0 +} + +# Fat32 türünde biçimlendirecek yazılım aranır. Yoksa hata iletisi gösterilip çıkış yapılır. +function checkDependencies() { + if [[ "$1" == 'mkdosfs' ]]; then + mkdosfs='' + if which 'mkdosfs' > /dev/null; then + mkdosfs='mkdosfs' + elif which 'make.msdos' > /dev/null; then + mkdosfs='mkfs.msdos' + else + printE "Error: mkdosfs or mkfs.msdos program not found!" + exit 1 + fi + fi +} + +function writeGrubCfg() { + uuid=$(blkid -o value -s UUID "$partition") + param="" + echo " +insmod fat +search --no-floppy --fs-uuid $uuid --set root + +function load_video { + if [ x\$feature_all_video_module = xy ]; then + insmod all_video + else + insmod efi_gop + insmod efi_uga + insmod ieee1275_fb + insmod vbe + insmod vga + insmod video_bochs + insmod video_cirrus + fi +} + +if [ x\$feature_default_font_path = xy ] ; then + font=unicode +else + font=\"/bootableusb/grub/fonts/unicode.pf2\" +fi + +if loadfont \$font ; then + set gfxmode=auto + load_video + insmod gfxterm +fi +terminal_output gfxterm + +if [ -s /bootmgr ]; then + menuentry \"$(gettext -s 'Install Windows')\" { + ntldr /bootmgr + boot + } +fi +submenu \"$(gettext -s 'Boot Linux ISO Image')\" { + insmod regexp + insmod part_msdos + + for i in /bootableusb/linux/*.iso ; do + regexp -s w '^/bootableusb/linux/(.*).iso' \$i + menuentry \"\$w\" \$i { + set isofile=\"\$2\" + loopback loop \$isofile + + # Ubuntu 64 Bit + if [ -s (loop)/casper/vmlinuz.efi ]; then + if [ -s /bootableusb/persistent/casper-rw ]; then + set opt=\"persistent persistent-path=/bootableusb/persistent\" + fi + linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=\$isofile quiet splash noprompt noeject \$opt $param + initrd (loop)/casper/initrd.lz + # Ubuntu 32 Bit + elif [ -s (loop)/casper/vmlinuz ]; then + if [ -s /bootableusb/persistent/casper-rw ]; then + set opt=\"persistent persistent-path=/bootableusb/persistent\" + fi + linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=\$isofile quiet splash noprompt noeject \$opt $param + initrd (loop)/casper/initrd.lz + # Tails + elif [ -s (loop)/live/vmlinuz2 ]; then + linux (loop)/live/vmlinuz2 boot=live config findiso=\${isofile} live-media=removable apparmor=1 security=apparmor nopersistent noprompt timezone=Etc/UTC block.events_dfl_poll_msecs=1000 noautologin module=Tails $param + initrd (loop)/live/initrd2.img + # Kali Linux + elif [ -s (loop)/dists/kali-rolling/Release ]; then + linux (loop)/live/vmlinuz boot=live findiso=\$isofile noconfig=sudo username=root hostname=kali $param + initrd (loop)/live/initrd.img + # Gparted + elif [ -s (loop)/GParted-Live-Version ]; then + linux (loop)/live/vmlinuz boot=live union=overlay username=user config components quiet noswap noeject toram=filesystem.squashfs ip= nosplash findiso=\$isofile $param + initrd (loop)/live/initrd.img + # Debian + elif [ -s (loop)/live/vmlinuz ]; then + linux (loop)/live/vmlinuz boot=live config findiso=\$isofile $param + initrd (loop)/live/initrd.img + # Fedora + elif [ -s (loop)/isolinux/vmlinuz ]; then + linux (loop)/isolinux/vmlinuz root=live:CDLABEL=Fedora-WS-Live-24-1-2 iso-scan/filename=\$isofile rd.live.image quiet $param + initrd (loop)/isolinux/initrd.img + # Gentoo + elif [ -s (loop)/isolinux/gentoo ]; then + linux (loop)/isolinux/gentoo root=/dev/ram0 init=/linuxrc aufs looptype=squashfs loop=/image.squashfs cdroot isoboot=\$isofile vga=791 splash=silent,theme:default console=tty0 $param + initrd (loop)/isolinux/gentoo.xz + # Manjaro 64 Bit + elif [ -s (loop)/manjaro/isomounts ]; then + set imgdevpath=\"/dev/disk/by-uuid/$uuid\" + probe -l loop --set=isolabel + linux (loop)/manjaro/boot/x86_64/manjaro img_dev=\$imgdevpath img_loop=\$isofile misobasedir=manjaro misolabel=\$isolabel nouveau.modeset=1 i915.modeset=1 radeon.modeset=1 logo.nologo overlay=nonfree nonfree=yes quiet splash $param + initrd (loop)/manjaro/boot/intel_ucode.img (loop)/manjaro/boot/x86_64/manjaro.img + # Arch Linux 64 Bit + elif [ -s (loop)/arch/boot/x86_64/vmlinuz ]; then + set imgdevpath=\"/dev/disk/by-uuid/$uuid\" + probe -l loop --set=isolabel + linux (loop)/arch/boot/x86_64/vmlinuz img_dev=\$imgdevpath img_loop=\$isofile archisolabel=\$isolabel $param + initrd (loop)/arch/boot/x86_64/archiso.img + # OpenSuse + elif [ -s (loop)/boot/x86_64/loader/linux ]; then + set imgdevpath=\"/dev/disk/by-uuid/$uuid\" + linux (loop)/boot/x86_64/loader/linux isofrom_device=\$imgdevpath isofrom_system=\$isofile LANG=en_US.UTF-8 $param + initrd (loop)/boot/x86_64/loader/initrd + fi + } + done +} + +menuentry \"$(gettext -s 'Operating Systems on Disk')\" { + insmod regexp + insmod part_msdos + for x in (hd1,*) ; do + if [ -f \"\$x/boot/grub/grub.cfg\" ] ; then + configfile \$x/boot/grub/grub.cfg + break + fi + done +} + +menuentry \"$(gettext -s 'Reboot')\" { + reboot +} +" > "$cfgPath" +} + +# /dev/sdX biçiminde belirtilen aygıtı sisteme bağlar. +function mountUSB() { + # Cihaz üzerindeki tüm bölümleri okuyup dizi olarak tanımlıyoruz. + partition=($(ls --color=no -1 "${device}"*)) + + # Dizinin uzunluğu 2 değilse sorun var demektir. (/dev/sdc /dev/sdc1) + if [[ ${#partition[@]} != 2 ]] ; then + printE "Error: this drive contains multiple partitions!" + exit 1 + fi + + # Dizideki son eleman bizim aradığımız bölüm + partition=${partition[-1]} + + # Eğer bağlıysa bağlandığı noktayı öğreniyoruz. + # Bağlı değilse belirlediğimiz noktaya bağlıyoruz. + temp=($(mount | grep "$partition")) + if [[ "${temp}" == "" ]] ; then + partitionPath="/media/bootableusb_$(date +%s)_$$" + mkdir -p "$partitionPath" + mount "$partition" "$partitionPath" + # Yazılım aracılığıyla bağladığımız için işlemlerin + # sonucunda bağı kaldırmamız gerekiyor. + mountCond="1" + else + partitionPath="${temp[2]}" + mountCond="0" + fi + + # Grub yapılandırma dosyasının bulunduğu konumu değişkene atıyoruz. + cfgPath="$partitionPath/bootableusb/grub/grub.cfg" +} + +function umountUSB() { + sync + + if [[ "$mountCond" == "1" ]] ; then + umount "${partitionPath}" >& /dev/null + returnCodes=$? + if [[ $returnCodes != 0 ]] ; then + printE "Error: unable to securely unmount %s" "${partitionPath}" + else + rmdir "${partitionPath}" + fi + fi +} + +# ================================================================= +# Bilgi Fonksiyonları +# ================================================================= + +# Yardım sayfasını içerir. +function displayHelp() { + if [[ "$(dirname $(readlink -f $0) | grep '/usr/bin')" != "" ]]; then + temp=$(man bootableusb) + else + temp=$(man "../man/bootableusb.1.tr") + fi + echo "$temp" +} + +# Yazılım sürümünü yazdırır. +function displayVersion() { + printf "bootableusb v0.4" +} + +# Bilgisayara bağlı aygıtları listeler. +function displayDevices() { + print "===========================================" + printS "All Storage Devices" + allDevices=$(lsblk -d -p -o MODEL,SIZE,NAME | grep "/dev/sd") + printf "${allDevices} \n" + print "===========================================" +} + +export LOCPATH=$SNAP/usr/lib/locale +export MANPATH=$SNAP/usr/share/man +export GROFF_FONT_PATH=$SNAP/usr/share/groff/1.22.3/font +export GROFF_TMAC_PATH=$SNAP/usr/share/groff/1.22.3/tmac +export TEXTDOMAINDIR=$SNAP/usr/share/locale + export TEXTDOMAIN=bootableusb isoPath='' method='' device='' verbose='0' +size=0 main $1 $2 $3 $4 $5 $6 \ No newline at end of file