請發表您的想法或想出的任何想法。我很想知道別人在想什么。
整體問題
當我安裝一個簡單的Java應用程序(我寫的)通過/etc/init.d/在啟動(在后臺)運行時,它適用于我明確安裝它的liveUSB。當我制作該棒的副本時,它永遠不會成功啟動。在引導liveUSB副本時,當liveUSB引導進程到達我的腳本時,Java應用程序將始終掛起。我的腳本確實完成了它應該做的事情,甚至每5分鐘一次,并將繼續運行,直到你關閉機器。
我的腳本阻止了其他一切
什么都沒有超出我的腳本
你無法取消我的腳本
沒有GUI
您可以看到的唯一文本是我的腳本輸出的命令行
設置&測試 - 一切順利 :)
我有一個帶有3個分區的Linux liveUSB。加載簡單的標準Xubuntu映像。
sda1> 2GB存儲空間
sda2> 2gb系統
sda3>剩下的gb for casper
我創建了一個簡單的Java應用程序,它在啟動時在后臺運行。為了達到這個目的,我遵循了以下步驟:
將java應用程序編譯成類
在/ home / user / folder /中放置類文件
將我的startup.sh腳本復制到/etc/init.d/
在/etc/init.d/里面 鍵入“update-rc.d startup.sh start 20 2 5。stop 20 0 1 6。”
此更新的運行級別成功
現在我可以重啟/重啟/關閉任何操作,一切運行完美!
復制 - 這里變得棘手!
在創建此棒的副本時,我按照以下步驟操作:
裝載sda2 將該文件夾中的所有內容復制到/ home / user / Desktop / tmp-system /
裝載sda3 將該文件夾中的所有內容復制到/ home / user / Desktop / tmp-casper /
進入/ home / user / Desktop / tmp-system / 輸入“tar -cvf system.tar”。
進入/ home / user / Desktop / tmp-casper / 輸入“tar -cvf casper.tar”。
卸除 SDA2
sda3的
插入空USB(例如sdb) 設置分區(與您要復制的大小寫相同)
解開分區 tar -xvf system.tar ...進入sdb2
tar -xvf casper.tar ...進入sdb3
測試 - 這里一切都出錯了!
將新創建的liveUSB插入計算機
從USB啟動
一切都開始好了
我寫的Java應用程序被觸發了 啟動過程永遠掛起
沒有cmd提示可用
沒有GUI可用
好像線程正在運行(它是!輸出可以每5分鐘查看一次 - 這正是應該的樣子)
解決方案嘗試&陷阱
1
我可以掛載復制的liveUSB,編輯startup.sh以不啟動我的Java應用程序,它仍然無法啟動(就像我懷疑的那樣?)。
2
如果我使用“dd if = sda of = sdb”,liveUSB的副本將完全正常工作。然而,這不是可接受的解決方案。如果我要將帶有dd的16gb棒復制到64gb棒上,那么將64gb棒變成16gb棒。這也會使更改每個分區中需要更改的值變得更加困難。
3
測試了startup.sh和Java應用程序本身的許多變體。所有這些都產生相同的錯誤。
4
我用來復制的方法適用于其他形式的應用程序,文件或其他任何形式。
五
我還想嘗試避免使用任何其他庫或程序來幫助運行Java應用程序。
6
我還裝了sda2& sdb2使用cp將所有內容直接從一個復制到另一個,然后對sda3& sdb3。這會產生相同的錯誤。
其他要點
sda3分區使用cryptsetup加密
system.tar中有2個文件(將是sdb2,來自sda2),在寫入USB后會有一個值發生變化。 這兩個值在過去沒有引起任何問題,并且每次創建新的liveUSB時都會更改
casper.tar中有1個文件(將是sdb3,來自sda3),在寫入USB后會有一個值發生變化。 此值在過去沒有引起任何問題,并且每次創建新的liveUSB時都會更改。
校驗和測試過程
原始的實時USB映像
工作liveUSB> SDA
空usb> SDB
腳步:
裝載,復制和安裝校驗和sda2 輸入“mount / dev / sda2 / media / sda2”
鍵入“tar -C / media / sda2 -cvf~ / Desktop / system.tar”。
輸入“find.-type f -exec sha1sum {}';' > /tmp/sda2_checksum.txt“
輸入“umount / media / sda2”
裝載,復制和安裝校驗和sda3 輸入“mount / dev / sda3 / media / sda3”
輸入“tar -C / media / sda3 -cvf~ / Desktop / casper.tar”。
輸入“find.-type f -exec sha1sum {}';' > /tmp/sda3_checksum.txt“
輸入“umount / media / sda3”
為sdb創建分區
裝載,寫入&校驗和sdb2 輸入“mount / dev / sdb2 / media / sdb2”
鍵入“tar -C / media / sdb2 -xvf~ / Desktop / system.tar”
輸入“find.-type f -exec sha1sum {}';' > /tmp/sdb2_checksum.txt“
輸入“umount / media / sdb2”
裝載,寫入&校驗和sdb3 輸入“mount / dev / sdb3 / media / sdb3”
輸入“tar -C / media / sdb3 -xvf~ / Desktop / casper.tar”
輸入“find.-type f -exec sha1sum {}';' > /tmp/sdb3_checksum.txt“
輸入“umount / media / sdb3”
比較校驗和 sort /tmp/sda2_checksum.txt -o /tmp/sda2_checksum.txt.sort
sort /tmp/sda3_checksum.txt -o /tmp/sda3_checksum.txt.sort
sort /tmp/sdb2_checksum.txt -o /tmp/sdb2_checksum.txt.sort
sort /tmp/sdb3_checksum.txt -o /tmp/sdb3_checksum.txt.sort
結果
sda2& sdb2
輸入“diff sda2_checksum.txt.sort sdb2_checksum.txt.sort”
45d44
< 2ddf9802c9c15ac6e4575cc9de32e3530eae6b7d ./efi/boot/grub.cfg
82d80
< 59bb2775a8e7e499e0590b7b8c2492eb250fb7d8 ./syslinux/txt.cfg
154a153
> ae6c127713e01fc5fb4a2e4e28f6bbddc6bd6af5 ./efi/boot/grub.cfg
158a158
> b78090b66b4e3fa04ca9d466ee78c9060adf744e ./syslinux/txt.cfg
這兩個文件包含每個被更改的值。其他一切都是一樣的。結果正是它們應該是的。
sda3&amp; sdb3
輸入“diff sda3_checksum.txt.sort sdb3_checksum.txt.sort”
相同 - 請記住這是原始的liveUSB圖像。
我將在下一節中介紹進一步的比較結果。
下一步 - 又名行動計劃
從liveUSB映像開始,不需要運行腳本。
步驟1 - 成功/失敗?
成功 - 校驗和匹配
將liveUSB上的java從6更新為7
重新創建tar
從tar創建新的liveUSB
測試liveUSB
第2步 - 成功/失敗?
成功 - 校驗和匹配
創建/ home / user / folder /
將java應用程序的類文件復制到/ home / user / folder /
重新創建tar
從tar創建新的liveUSB
測試liveUSB
第3步 - 成功/失敗?
成功 - 校驗和匹配
將startup.sh添加到/etc/init.d/
不調用update-rc.d
重新創建tar
從tar創建新的liveUSB
測試liveUSB
第4步 - 成功/失敗?
成功 - 校驗和匹配
(我以前從未成功實現過這一點) - 但是需要編寫的值尚未插入到casper(sda3)分區中。
輸入“update-rc.d startup.sh start 21 2 5”。
重新創建tar
從tar創建新的liveUSB
測試liveUSB
第5步 - 成功/失敗?
成功 - 校驗和匹配
我不敢相信這有效!這讓我想到......(以一種很好的方式說出來)為什么這個世界以前不起作用?
- 巧妙的是版本-13有效。
引導liveUSB
在創建tar之前插入要在casper(sda3)中重寫的值 從liveUSB運行時
編輯/home/user/folder/config.properties中的配置文件
關閉liveUSB
重新創建tar
從tar創建新的liveUSB
測試liveUSB
圖片完成!!
我還沒完成這個!
*寫入usb的過程從未改變過。
為什么之前不起作用?
焦油方法? - 只是稍有變化...... 來自“tar -cvf casper.tar”。
要“tar -C / media / sda3 / -cvf~/ Desktop / casper.tar。
這些線條沒有完成同樣的事情嗎?
我將在不久的將來對此進行測試。 - 我懷疑沒有區別。
將程序分解為單獨的步驟? 之前: 根據NEXT STEPS - 又名行動計劃,我將在制作新圖像之前完成所有這些步驟。
后: 完全遵循了下一步 - 即行動計劃
這可能是區別嗎?
我將在不久的將來對此進行測試。
可以從casper(sda3)分區中的/ home /目錄中刪除大(或小)文件會導致某種損壞嗎? 我不知道..?
我將在不久的將來對此進行測試。
進一步測試 - 我想要我的答案!
從原始的liveUSB圖像開始。
將liveUSB上的java從6更新為7
創建/ home / user / folder /
將java應用程序的類文件復制到/ home / user / folder /
將startup.sh添加到/etc/init.d/
輸入“update-rc.d startup.sh start 21 2 5”。
編輯/home/user/folder/config.properties中的配置文件
這一次一步一步。 - 它會起作用嗎?
測試1 - 成功/失敗?
失敗!
老焦油方法
測試2 - 成功/失敗?
老焦油方法
刪除/ boot /中生成的文件 當寫入casper(sda3)分區時,我的腳本創建此文件,僅包含用于驗證的id,對啟動過程沒有影響。
測試3 - 成功/失敗?
新焦油方法
測試4 - 成功/失敗?
新焦油方法
刪除/ boot /中生成的文件 當寫入casper(sda3)分區時,我的腳本創建此文件,僅包含用于驗證的id,對啟動過程沒有影響。
結果
我將按此順序進行測試:
測試1 - &gt;試驗3 - &gt;測試4 - &gt;測試2
如果測試1工作......我會跳出窗外!
- 我不知道為什么它現在會起作用,因為我已經多次測試過并且每次都會產生不成功的靴子。
- 也許cp或tar進程以某種方式被破壞了。
什么時候 測試1失敗:
如果測試3工作......
- tar方法導致錯誤。
- 我不明白舊tar方法與新tar方法有什么不對。
TBC ......