ThaiTux.info - debian https://thaitux.info/taxonomy/term/3 เรื่องที่เกี่ยวกับเดเบียนลินุกส์ debian: macOS guest on VirtualBox - create installation media short note. https://thaitux.info/node/945 <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>SYSTEM<br /> OS: Debian Linux 4.18.0-3-amd64<br /> CPU: AMD Ryzen 7 1700 Eight-Core Processor<br /> VirtualBox: virtualbox-5.2 : 5.2.20-125813~Ubuntu~bionic</p> <p>STEP<br /> 1. CREATE VM<br /> 2. MODIFY VM<br /> 3. BOOT INSTALLER<br /> 4. BOOT NEW OS<br /> 5. CREATE NEXT VERSION CDR INSTALLER<br /> 6. FIX VirtualBox NOT SUPPORT apfs IN High Sierra/Mojave</p> <p>1. CREATE VM<br /> General<br /> Machine -> New<br /> Name="NAME OF VM"<br /> Type=Mac OS X<br /> Version=Mac OS X (64-bit)</p> <p>Storage<br /> HDD=NEW VDI DISK IMAGE (20-60G)<br /> CD=CDR INSTALLER</p> <p>2. MODIFY VM<br /> RUN COMMANDS:</p> <pre> VM_RES="1280x960" #EXAMPLE NAME="NAME OF VM" #EXAMPLE VBoxManage modifyvm "$NAME" --usbxhci on --firmware efi --chipset ich9 --mouse usbtablet --keyboard usb --vram 128 --cpus 2 --memory 4096 --boot1 dvd --boot2 disk --boot3 none --boot4 none --cpu-profile "Intel Core i7-6700K" --cpuidset 00000001 000106e5 00100800 0098e3fd bfebfbff VBoxManage setextradata "$NAME" "CustomVideoMode1" "${VM_RES}x32" VBoxManage setextradata "$NAME" VBoxInternal2/EfiGraphicsResolution "$VM_RES" VBoxManage setextradata "$NAME" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "iMac11,3" VBoxManage setextradata "$NAME" "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0" VBoxManage setextradata "$NAME" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Iloveapple" VBoxManage setextradata "$NAME" "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" VBoxManage setextradata "$NAME" "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1 #FOR Snow Leopard: NUMBER OF CPU=1 VBoxManage modifyvm "$NAME" --usbxhci on --firmware efi --chipset ich9 --mouse usbtablet --keyboard usb --vram 128 --cpus 1 --memory 4096 --boot1 dvd --boot2 disk --boot3 none --boot4 none --cpu-profile "Intel Core i7-6700K" --cpuidset 00000001 000106e5 00100800 0098e3fd bfebfbff #FOR Sierra: SOLVE PARAVIRTUALIZATION BUG #https://gist.github.com/arobb/447a962af4f07ef81e79987d686275e5 #https://www.insanelymac.com/forum/topic/292170-how-to-spoof-real-mac-in-vmware/ VBoxManage setextradata "$NAME" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Mac-F22589C8" VBoxManage setextradata "$NAME" "VBoxInternal/Devices/efi/0/Config/DmiSystemSerial" "CK1156I6DB6" VBoxManage modifyvm "$NAME" --paravirtprovider none #REVERT BACK WHEN FINISH INSTALLATION VBoxManage modifyvm "$NAME" --paravirtprovider default ##SOME USEFUL SETTINGS, DO NOT RUN ##BOOT SINGLE USER #VBoxManage setextradata "$NAME" VBoxInternal2/EfiBootArgs "-s" ##REVERT #VBoxManage setextradata "$NAME" VBoxInternal2/EfiBootArgs "" ##TURN OFF #VBoxManage setextradata "$NAME" VBoxInternal2/EfiBootArgs " " ##VERBOSE #VBoxManage setextradata "$NAME" VBoxInternal2/EfiBootArgs "-v" ##NO AMD, NO NVIDIA #VBoxManage setextradata "$NAME" VBoxInternal2/EfiBootArgs "-s agc=0 -amd_no_dgpu_accel nv_disable=1" ##DEBUG #VBoxManage setextradata "$NAME" VBoxInternal2/EfiBootArgs "-v debug=0x144" #IF MOUSE OR KEYBOARD DO NOT WORK, TRY TO ADD NEW USB FILTERS </pre><p> 3. BOOT INSTALLER<br /> #STEP<br /> #- ERASE DISK<br /> #- INSTALL<br /> #FOR Mavericks NETWORK MAY NOT WORK, JUST INSTALL LOCALLY, WILL WORK AFTER REBOOT.</p> <p>4. BOOT NEW OS</p> <p>5. CREATE NEXT VERSION CDR INSTALLER<br /> #GET PACKAGES FROM SAFARI, DO NOT INSTALL:</p> <p>#LION<br /> https://itunes.apple.com/app/id444303913?mt=12</p> <p>#MOUNTAIN LION<br /> https://itunes.apple.com/app/id537386512?mt=12</p> <p>#MAVERICKS<br /> https://itunes.apple.com/app/id675248567?mt=12</p> <p>#YOSEMITE<br /> https://itunes.apple.com/app/id444303913?mt=12</p> <p>#EL CAPITAN<br /> https://itunes.apple.com/app/id1147835434?mt=12</p> <p>#SIERRA<br /> https://itunes.apple.com/app/id1127487414?mt=12</p> <p>#HIGH SIERRA<br /> https://itunes.apple.com/app/id1246284741?mt=12</p> <p>#MOJAVE<br /> https://itunes.apple.com/app/id1398502828?mt=12<br /> #IF FAIL, DOWNLOAD FROM HERE<br /> #http://osxdaily.com/2018/09/29/download-full-macos-mojave-installer/<br /> #http://dosdude1.com/mojave/<br /> #AFTER FINISH INSTALLATION, RE-DOWNLOAD FROM APPLE AGAIN, THEN RE-CREATE INSTALLER FROM MOJAVE</p> <p>#SOME LINK ARE DEAD, PLEASE DOWNLOAD FROM "iTunes -> Purchased"</p> <pre> #START BUILD FILE="ElCapitan" #EXAMPLE APPDIR="/Applications/Install OS X El Capitan.app" #EXAMPLE SIZE=8000 #CREATE IMAGE AND MOUNT hdiutil create -o /tmp/$FILE -size ${SIZE}m -layout SPUD -fs HFS+J # -&gt; /tmp/$FILE.dmg hdiutil attach /tmp/$FILE.dmg -noverify -nobrowse # -&gt; /Volumes/untitled #***** asr METHOD ***** (&lt;=Yosemite, El Capitan(CDR), Sierra) #MOUNT InstallESD hdiutil attach "$APPDIR/Contents/SharedSupport/InstallESD.dmg" # -&gt; /Volumes/OS X Install ESD ESD="/Volumes/OS X Install ESD" #FOR &lt;= Yosemite, Sierra: #RESTORE BaseSystem TO IMAGE asr restore -source "$ESD/BaseSystem.dmg" -target /Volumes/untitled -noprompt -noverify -erase #/Volumes/untitled -&gt; /Volumes/OS X Base System #COPY PACKAGES rm "/Volumes/OS X Base System/System/Installation/Packages" cp -av "$ESD/Packages" "/Volumes/OS X Base System/System/Installation/" #FOR &gt;= Yosemite: cp -av "$ESD/BaseSystem.dmg" "/Volumes/OS X Base System/" cp -av "$ESD/BaseSystem.chunklist" "/Volumes/OS X Base System/" #FOR &gt;= El Capitan(CDR): cp -av "$ESD/AppleDiagnostics.dmg" "/Volumes/OS X Base System/" cp -av "$ESD/AppleDiagnostics.chunklist" "/Volumes/OS X Base System/" #UNMOUNT ALL hdiutil detach "/Volumes/OS X Base System" hdiutil detach "$ESD" #***** createinstallmedia METHOD ***** (El Capitan(VDI), High Sierra, Mojave) #CREATE INSTALLER TO IMAGE #FOR El Capitan(VDI) (USE VDI INSTEAD OF CDR - NEED WRITABLE MEDIA WHEN INSTALL), &gt;= High Sierra: sudo "$APPDIR/Contents/Resources/createinstallmedia" --volume /Volumes/untitled/ --applicationpath "$APPDIR" --nointeraction #/Volumes/untitles -&gt; /Volumes/Install OS X XXX #UNMOUNT BASE hdiutil detach "/Volumes/Install XXX" #***** END 2 METHOD ***** #RESIZE IMAGE FOR BEST FIT hdiutil resize -size `hdiutil resize -limits /tmp/$FILE.dmg | tail -n 1 | awk '{ print $1 }'`b /tmp/$FILE.dmg #CONVERT IMAGE TO CDR hdiutil convert /tmp/$FILE.dmg -format UDTO -o /tmp/$FILE # -&gt; /tmp/$FILE.cdr #COPY TO HOST scp /tmp/$FILE.cdr USER1@HOST1:/WHERE/TO/STORE/IMAGE</pre><p> 6. FIX VirtualBox NOT SUPPORT apfs IN High Sierra/Mojave</p> <pre> #FOR Mojave FIRST BOOT fs1: cd macOS\ Install\ Data cd Locked\ Files cd Boot\ Files boot.efi #PREPARE apfs DRIVER FOR NEXT BOOT #https://github.com/acidanthera/AppleSupportPkg #AT Debian HOST mkdir /tmp/tmp cd /tmp/tmp wget https://github.com/acidanthera/AppleSupportPkg/releases/download/2.0.5/AppleSupport-v2.0.5-RELEASE.zip unzip AppleSupport-v2.0.5-RELEASE.zip cd Drivers/ genisoimage -o ../driver.iso . #ATTACH /tmp/tmp/driver.iso TO Mojave GUEST OPTICAL DRIVE STORAGE #BOOT Mojave GUEST fs1: load APFSDRIV.EFI load USBKBDXE.EFI load APPLEUIS.EFI map -r fs1: cd System\Library\CoreServices boot.efi #IF FAILED, TRY TO LOAD JUST APFSDRIV.EFI #AFTER FINISH INSTALLATION, CREATE startup.nsh FOR NEXT BOOT #https://forums.virtualbox.org/viewtopic.php?f=22&amp;t=88258&amp;sid=20c97a3fb77e1578f58f3b1fd74460eb&amp;start=15 #https://github.com/img2tab/okiomov/blob/master/macos_okiomov.sh #AT Mojave GUEST diskutil list sudo mkdir /Volumes/efi sudo mount -t msdos /dev/disk1s1 /Volumes/efi mkdir -p /Volumes/efi/EFI/DRIVERS cp -av /Volumes/CDROM/* /Volumes/efi/EFI/DRIVERS/ ls /Volumes/efi/EFI/DRIVERS/ &gt;&gt; /Volumes/efi/startup.nsh vi /Volumes/efi/startup.nsh </pre><pre> load fs0:\EFI\DRIVERS\APFSDRIV.EFI load fs0:\EFI\DRIVERS\USBKBDXE.EFI load fs0:\EFI\DRIVERS\APPLEUIS.EFI map -r for %a run (1 5) fs%a: cd "macOS Install Data\Locked Files\Boot Files" boot.efi cd "System\Library\CoreServices" boot.efi endfor </pre><pre> #SHUTDOWN GUEST AND DETACH driver.iso #IF FAILED, TRY TO LOAD JUST APFSDRIV.EFI </pre><p> ##### SOME USEFUL LINK/COMMANDS #####</p> <p>#IF BOOT FAILED, TRY TO BOOT...<br /> #FROM: fs1:>macOS Install Data\Locked Files\Boot Files\boot.efi<br /> #OR: fs1:>System\Library\CoreServices\boot.efi</p> <p>#CREATE BOOTABLE INSTALLER<br /> #https://support.apple.com/th-th/HT201372</p> <p>#SOLVE "Install macOS High Sierra.app does not appear to be a valid OS installer application."<br /> #https://www.reddit.com/r/MacOS/comments/7470rb/install_macos_high_sierraapp_does_not_appear_to/</p> <pre> sudo cp -av /macOS Install Data /Applications/Install macOS High Sierra.app/Contents/SharedSupport </pre><p> #CREATE High Sierra ISO INSTALLER<br /> #https://www.howtogeek.com/289594/how-to-install-macos-sierra-in-virtualbox-on-windows-10/</p> <p>#REF<br /> #https://github.com/rtrouton/create_macos_vm_install_dmg</p> <p>#Mojave<br /> #https://astr0baby.wordpress.com/2018/09/25/running-macos-mojave-10-14-on-virtualbox-5-2-18-on-linux-x86_64/<br /> MOJAVE</p> </div></div></div><div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above"><div class="field-label">Topic:&nbsp;</div><div class="field-items"><div class="field-item even"><a href="/taxonomy/term/3">debian</a></div><div class="field-item odd"><a href="/taxonomy/term/419">macOS</a></div><div class="field-item even"><a href="/taxonomy/term/230">virtualbox</a></div></div></div> Thu, 13 Dec 2018 11:13:04 +0000 wd 945 at https://thaitux.info https://thaitux.info/node/945#comments debian: Headless Nvidia for Cryptomining II https://thaitux.info/node/944 <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>ภาคต่อของการขุดเหมืองโดยใช้การ์ดจอ Nvidia</p> <p>จาก<a href="/node/943">ครั้งก่อน</a> การตั้งค่าของการ์ด ต้องตั้งค่าใหม่ทุกครั้งเมื่อบูตใหม่ (จริง ๆ สามารถบันทึกค่าเดิมไว้ แล้วนำมาใช้ใหม่ได้ แต่ไม่สะดวกสำหรับงาน console)<br /> คราวนี้จะทำให้มีความเป็นอัตโนมัติมากขึ้น โดยไม่ต้องมาตั้งผ่าน Display Manager (lightdm) ดังนั้นจึงไม่ต้องลง lightdm แบบครั้งก่อนแล้ว</p> <p>เราจะใช้โปรแกรมและไฟล์ EDID ของคุณ ฺ<a href="https://github.com/boris-dimitrov/set_gpu_fans_public">Boris Dimitrov</a> ในการจำลองจอเสมือน และปรับความเร็วพัดลมให้แปรผันตามอุณหภูมิ แต่เนื่องจากดูเหมือนโปรแกรมเดิมใช้งานได้แค่การ์ดใบเดียว และต้องลง tcsh ซึ่งไม่ใช่เชลล์ปริยายของเดเบียน เราจึงเอาของเดิมมาปรับปรุงเล็กน้อยดังนี้</p> <ul> <li>ให้ใช้กับ bash ได้</li> <li>ใช้กับการ์ดหลายใบได้</li> <li>ปรับให้พัดลมทำงานรอบจัดมากขึ้น เพื่อให้ GPU เย็นลง</li> <li>เอื้อให้ง่ายในการเร่งการทำงานของ GPU และหน่วยความจำ</li> <li>ปรับลดการกินพลังงานลงมาเหลือ 80%</li> <li>งานอื่น ๆ ให้ใช้งานได้คล่องตัวขึ้น</li> </ul> <p>เนื่องจากเป้าหมายคือความเป็นอัตโนมัติมากขึ้น จึงขอใช้งานด้วยสิทธิ์ root ตั้งแต่ต้น เพื่อให้สะดวกในการปรับแต่ง ดังนั้นจึงต้องระวังในการทำงานหน่อย</p> <p>เริ่มด้วย ถ้าเดิมลง lightdm ไว้แล้ว ให้ถอดออกก่อน</p> <pre> # <strong>apt purge lightdm</strong> </pre><p> ถ้าเดิมยังไม่ได้ลงไดรเวอร์ ก็ลงก่อน</p> <pre> # <strong>apt install nvidia-driver nvidia-smi nvidia-settings</strong> </pre><p> ลงของจำเป็นก่อน และดาวน์โหลดโปรแกรมมาใช้</p> <pre> # <strong>apt install awk git</strong> # <strong>mkdir -p /PATH/TO/SOURCE/</strong> # <strong>cd /PATH/TO/SOURCE</strong> # <strong>git clone https://github.com/widhaya3/set_gpu_fans_public.git</strong> # <strong>cd set_gpu_fans_public</strong> </pre><p> เราอาจสั่งรันตรง ๆ ได้จากในนี้เลย หรืออาจนำไปติดตั้งในไดเรคทอรี่ <code>/opt/set_gpu_fans</code> ตามตัวอย่าง README.md ก็ได้<br /> แต่เพื่อให้คล้ายกับต้นฉบับ เราจะสร้างลิงก์ไปที่ <code>/opt</code> แล้วสั่งรันจากที่นั่น และเผื่อต้นฉบับมีการปรับปรุง เราก็สามารถสั่ง git pull เพื่ออัปเดตโปรแกรมล่าสุดได้เลย</p> <pre> # <strong>mkdir -p /opt</strong> # <strong>cd /opt</strong> # <strong>ln -sf /PATH/TO/SOURCE/set_gpu_fans_public set_gpu_fans</strong> # <strong>/opt/set_gpu_fans/cool_gpu</strong> </pre><p> เสร็จแล้ว<br /> หลังรันครั้งแรก โปรแกรมจะสร้างไฟล์คอนฟิกไว้ที่ <code>/etc/set_gpu_fans_nv/</code> และไฟล์ปูม (log) ไว้ที่ <code>/var/log/set_gpu_fans_nv-X</code> มีรายละเอียดคือ</p> <ul> <li>ไฟล์คอนฟิก <code>/etc/set_gpu_fans_nv/nvscmd_exmod_once-0.cfg</code> ไฟล์นี้จะถูกสั่งรันแค่ครั้งเดียวตอนเริ่มรัน</li> <li>ไฟล์คอนฟิก <code>/etc/set_gpu_fans_nv/nvscmd_exmod_loop-0.cfg</code> ถูกรันทุกครั้งที่มีการเปลี่ยนความเร็วพัดลม</li> <li>ไฟล์ปูม <code>/var/log/set_gpu_fans_nv-0</code> บันทึกปูมของการ์ดใบแรก</li> </ul> <p>ถ้ามีการ์ดหลายใบ เลขลงท้ายจะเพิ่มไปเป็น -1,-2,-3 ไปเรื่อย<br /> เราจะดูผลงานและปรับแต่งภายหลังได้จากคำสั่ง <code>nvidia-smi</code><br /> ถ้าปรับแต่งจนใช้งานได้ดีแล้ว ก็เอาคำสั่งไปใส่ไว้ในไฟล์ <code>/etc/rc.local</code> เพื่อให้เริ่มงานตอนเปิดเครื่องได้เลย</p> </div></div></div><div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above"><div class="field-label">Topic:&nbsp;</div><div class="field-items"><div class="field-item even"><a href="/taxonomy/term/3">debian</a></div><div class="field-item odd"><a href="/taxonomy/term/417">mining</a></div><div class="field-item even"><a href="/taxonomy/term/418">crypto currency</a></div></div></div> Wed, 06 Sep 2017 04:10:43 +0000 wd 944 at https://thaitux.info https://thaitux.info/node/944#comments debian: Headless Nvidia for Cryptomining https://thaitux.info/node/943 <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>ลองศึกษาการขุดเหมืองเงินคริปโตด้วยการ์ดจอ Nvidia</p> <p>ปัญหาคือทดลองในเซิร์ฟเวอร์ที่ไม่ได้ต่อจอภาพไว้ และไม่ได้ลง Xserver ไว้ การใช้งานผ่าน ssh จึงปรับแต่งอะไรไม่ได้เลย การใช้ค่าที่ติดตั้งมาจากโรงงาน ทำให้การ์ดร้อนจัดจนใช้งานจริงไม่ได้<br /> ปัญหาต่อมาคือไดรเวอร์บนลินุกซ์ล้าสมัยเล็กน้อย ใช้กับการ์ดจอใหม่ ๆ ไม่ค่อยได้ หรือใช้ได้แต่ไม่ดีพอ<br /> (ระบบปฏิบัติการที่ใช้ คือ debian stretch)</p> <p>ทางแก้คือ</p> <h4>แก้ปัญหาใช้งาน nvidia-settings ผ่าน ssh</h4> <p><strong>ทำที่เครื่องเซิร์ฟเวอร์ที่ติดตั้งการ์ด Nvidia ไว้</strong></p> <p>ก่อนอื่น ถือว่าเราได้ลงไดรเวอร์ของ Nvidia มาแล้ว ด้วยคำสั่งดังนี้</p> <pre> $ <strong>sudo apt install nvidia-driver nvidia-smi nvidia-settings nvidia-xconfig</strong> </pre><p> ต้องลง Xorg และเพื่อให้สะดวกในการเริ่มต้นและออกจาก X จึงติดตั้ง desktop manager ตัวเล็กไว้ด้วย คือ lightdm</p> <pre> $ <strong>sudo apt install lightdm</strong> </pre><p> แก้ไข xorg.conf ให้สามารถใช้งานการปรับแต่งการ์ดจอได้ แล้วก็เริ่ม Xserver ใหม่ด้วยคำสั่ง</p> <pre> $ <strong>sudo nvidia-xconfig -a --cool-bits=31 --allow-empty-initial-configuration</strong> $ <strong>sudo systemctl restart lightdm</strong> </pre><p> <strong>ทำที่เครื่องลูก ที่ใช้งาน ssh</strong><br /> ssh เข้าไปที่เซิร์ฟเวอร์ ทำการ merge ค่า $DISPLAY หลักของ X ซึ่งก็คือของการ์ดจอ เข้ากับค่า $DISPLAY ของเราที่มาจาก ssh แล้วก็เรียกใช้ nvidia-settings ผ่านค่าดิสเพลย์หลัก</p> <pre> $ <strong>ssh -X root@SERVER</strong> </pre><pre> # <strong>xauth merge /var/run/lightdm/root/\:0</strong> # <strong>nvidia-settings -c :0</strong> </pre><p> จะสามารถใช้งานการปรับแต่งได้ตามต้องการ โดยตรวจดูค่าที่ปรับแต่งแล้ว ด้วยคำสั่ง <code>nvidia-smi</code></p> <p><strong>ที่มา</strong></p> <ul> <li><a href="https://lists.gt.net/gentoo/user/233167">gt.net: <strong>nvidia-settings over ssh sees my local GPU?</strong></a></li> <li><a href="https://bitcointalk.org/index.php?topic=1712831.0">bitcointalk.org: <strong>HOW TO SET UP OVERCLOCKING AND FAN CONTROL ON UBUNTU 16.04 FOR NVIDIA CARDS</strong></a></li> <li>ดูรายละเอียดค่า CoolBits จาก <a href="https://wiki.archlinux.org/index.php/NVIDIA/Tips_and_tricks">archlinux.org: <strong>NVIDIA/Tips and tricks</strong></a></li> </ul> <h4>แก้ปัญหาไดรเวอร์ลินุกซ์ล้าสมัย ด้วยการคอมไพล์รุ่นใหม่บน svn เอง</h4> <p>ติดตั้งแพ็คเกจที่ใช้งาน</p> <pre> $ <strong>sudo apt install subversion svn-buildpackage</strong> $ <strong>sudo apt build-dep nvidia-driver</strong> </pre><p> ดาวน์โหลดรุ่นใหม่จาก svn และคอมไพล์<br /> *** อย่าลืมแก้ค่าในตัวแปร <code>$TARGET</code> ให้เป็นไดเรคทอรี่ที่เราต้องการ ***</p> <pre> $ <strong>TARGET=nvidia-graphics-drivers; mkdir $TARGET; cd $TARGET</strong> $ <strong>svn co svn://anonscm.debian.org/pkg-nvidia/packages/nvidia-graphics-drivers/branches/384</strong> $ <strong>cd 384</strong> $ <strong>debian/rules get-orig-source</strong> $ <strong>mkdir ../tarballs</strong> $ <strong>mv nvidia-graphics-drivers* ../tarballs</strong> $ <strong>svn-buildpackage --svn-ignore -us -uc -rfakeroot</strong> </pre><p> จะได้ไฟล์แพ็คเกจนามสกุล .deb มาอยู่ในไดเรคทอรี่ <code>../build-area</code><br /> ต่อไปก็สร้าง local repository จากไดเรคทอรี่ดังกล่าว ทำการแก้ไข apt/source ลบไดรเวอร์เก่า (ถ้ามี) แล้วก็ติดตั้งของใหม่</p> <pre> $ <strong>cd ../build-area</strong> $ <strong>dpkg-scanpackages . /dev/null > Packages</strong> $ <strong>sudo vi /etc/apt/sources.list.d/nvidia-384.list</strong> </pre><pre> deb [ trusted=yes ] file:$TARGET/nvidia-graphics-drivers/build-area ./ </pre><pre> $ <strong>sudo systemctl stop lightdm</strong> $ <strong>sudo apt-get remove ^nvidia ^libnvidia</strong> $ <strong>sudo apt update</strong> $ <strong>sudo apt install nvidia-driver nvidia-smi nvidia-settings nvidia-xconfig</strong> </pre><p> บูตเครื่องใหม่ ก็จะสามารถใช้งานไดรเวอร์รุ่นใหม่ได้แล้ว</p> <p><strong>ที่มา</strong></p> <ul> <li><a href="https://wiki.debian.org/NvidiaGraphicsDrivers">wiki.debian.org: <strong>NvidiaGraphicsDrivers</strong></a></li> <li><a href="https://linuxconfig.org/easy-way-to-create-a-debian-package-and-local-package-repository">linuxconfig.org: <strong>Easy way to create a Debian package and local package repository</strong></a></li> </ul> <p>จบ</p> </div></div></div><div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above"><div class="field-label">Topic:&nbsp;</div><div class="field-items"><div class="field-item even"><a href="/taxonomy/term/3">debian</a></div></div></div> Thu, 17 Aug 2017 03:24:01 +0000 wd 943 at https://thaitux.info https://thaitux.info/node/943#comments debian: ติดตั้ง OS X Guest ใน VirtualBox https://thaitux.info/node/760 <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>มีงานที่ต้องการทดสอบการแสดงผล ของ Safari/iBooks ใน iPhone/iPad (iOS) และ Mac (OS X) จึงต้องลง OS X เพื่อทดสอบ แอปที่จะใช้ คือ iBooks, iBooks Author และ Xcode ต้องการทรัพยากรเป็น Mavericks (10.9) แต่ Mavericks ไม่มีแผ่นขาย มีขายแต่ Snow Leopard (10.6.3) จึงต้องมีขั้นตอนเยอะหน่อย</p> <!--break--><h3>ระบบที่ใช้ทดสอบ</h3> <p>host: <strong>Debian 3.12-1-amd64</strong><br /> cpu: <strong>Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz</strong><br /> ram: <strong>8G</strong><br /> VirtualBox: <strong>Official 4.3</strong></p> <h3>ขั้นตอน</h3> <ul> <li>1.ติดตั้ง Snow Leopard (10.6) เพื่อจะสามารถดาวน์โหลด Mavericks (10.9) ได้ และนำมาสร้างเป็นไฟล์ iso เพื่อติดตั้งต่อไป</li> <li>2.ติดตั้ง Mavericks</li> </ul> <h3>ต้องเตรียม</h3> <ul> <li><a href="http://store.apple.com/th/product/MC573Z/A/mac-os-x-106-snow-leopard">ซื้อแผ่น Snow Leopard (10.6)</a> ราคา 620 บาท บวกค่าส่งอีก 300 บาท (ต้องสมัคร/ใช้บัญชี Apple ID)</li> <li><a href="http://www.tonymacx86.com/downloads.php?do=file&amp;id=156">iBoot Ivy Bridge 1.1.0</a> สำหรับบูตเข้า Snow Leopard (ต้องลงทะเบียน) แตกไฟล์แล้วเก็บไฟล์ <code>iBoot-Ivy-Bridge.iso</code> ไว้ (ถ้าบูตไม่ผ่าน ลองดาวน์โหลด iBoot ตัวอื่นดู)</li> <li>เนื้อที่ว่างของฮาร์ดดิสก์ ประมาณ 30-60 GB</li> </ul> <h2>1.ติดตั้ง Snow Leopard</h2> <p>เอา VirtualBox สร้าง Virtual Machine ใหม่ดังนี้</p> <pre> Name: <strong>osx</strong> Type: <strong>Max OS X</strong> Version: <strong>Mac OS X (64 bit)</strong> Memory size: <strong>2048</strong> Hard drive: <strong>virtual hard drive 30.00GB VDI (VirtualBox Disk Image)</strong> (ค่าปริยาย 20G ไม่พอ) Storage on physical hard drive: <strong>Dynamically allocated</strong> </pre><p> ตั้งค่าอื่น</p> <pre> System: Motherboard: <strong>ยกเลิก</strong> Enable EFI (special OSes only) Display: Video: <strong>Enable 3D Acceleration</strong> Storage: Controller: SATA -> Empty เปลี่ยน Attributes: Choose a virtual CD/DVD disk file: <strong>เปลี่ยนเป็น iBoot-Ivy-Bridge.iso ที่เตรียมไว้</strong> </pre><p> ส่วนที่เหลือ ใช้ค่าปริยายทั้งหมด</p> <p>เสร็จแล้วก็บูตเข้า iBoot ต่อด้วย Snow Leopard เพื่อติดตั้ง</p> <p>ตอนบูตเข้า iBoot ให้ใส่แผ่น Snow Leopard ในซีดีรอม แล้วเปลี่ยน Devices เป็น Host Drive ATAPI แล้วกด F5 เพื่อรีเฟรช แล้วจึงบูตติดตึ้ง Snow Leopard</p> <pre> Devices -> CD/DVD devices -> Host Drive ATAPI (sr0) กด F5 บูตด้วย Mac OS X Install DVD </pre><p> ติดตั้งตามปกติ ระหว่างติดตั้งต้องมีการสร้างพาร์ติชั่นด้วย</p> <pre> Utilities -> Disk Utility เลือก 32.21 GB VBOX HARDISK -> Partition -> <strong>+</strong> -> Name: <strong>osx</strong> <strong>Apply</strong> </pre><p> ติดตั้งต่อจนเสร็จ</p> <p>บูตเข้าระบบโดยต้องกลับไปใช้ <code>iBoot-Ivy-Bridge</code> อีกครั้ง แล้วเลือกเข้า osx ที่ติดตั้งเสร็จแล้ว<br /> ถ้าบูตไม่ขึ้น ให้ลองปิดและบูตใหม่</p> <p>หลังติดตั้งเสร็จเรียบร้อย ให้อัปเดตระบบ เพื่อให้มี App Store</p> <pre> Apple -> Software Update </pre><p> อัปเดตเสร็จ รีบูตใหม่ ระบบจะกลายเป็น 10.6.8 และมี App Store เรียบร้อย</p> <p>ดาวน์โหลด Mavericks ผ่าน AppStore ขนาดประมาณ 5.3GB (5GiB)<br /> เมื่อเสร็จ ไฟล์ที่ได้จะอยู่ที่ <code>/Applications/Install OS X Mavericks.app</code></p> <p>แปลงเป็น iso เพื่อจะนำไปติดตั้งในขั้นตอนต่อไป<br /> เข้า Terminal </p> <pre>Applications -> Utilities -> Terminal</pre><p> แล้วพิมพ์คำสั่งดังนี้</p> <pre> # Mount the installer image hdiutil attach /Applications/Install\ OS\ X\ Mavericks.app/Contents/SharedSupport/InstallESD.dmg -noverify -nobrowse -mountpoint /Volumes/install_app # Convert the boot image to a sparse bundle hdiutil convert /Volumes/install_app/BaseSystem.dmg -format UDSP -o /tmp/Mavericks # Increase the sparse bundle capacity to accommodate the packages hdiutil resize -size 8g /tmp/Mavericks.sparseimage # Mount the sparse bundle for package addition hdiutil attach /tmp/Mavericks.sparseimage -noverify -nobrowse -mountpoint /Volumes/install_build # Remove Package link and replace with actual files rm /Volumes/install_build/System/Installation/Packages cp -rp /Volumes/install_app/Packages /Volumes/install_build/System/Installation/ # Unmount the installer image hdiutil detach /Volumes/install_app # Unmount the sparse bundle hdiutil detach /Volumes/install_build # Resize the partition in the sparse bundle to remove any free space hdiutil resize -size `hdiutil resize -limits /tmp/Mavericks.sparseimage | tail -n 1 | awk '{ print $1 }'`b /tmp/Mavericks.sparseimage # Convert the sparse bundle to ISO/CD master hdiutil convert /tmp/Mavericks.sparseimage -format UDTO -o /tmp/Mavericks # Remove the sparse bundle rm /tmp/Mavericks.sparseimage # Rename the ISO and move it to the desktop mv /tmp/Mavericks.cdr ~/Desktop/Mavericks.iso </pre><p> คัดลอก <code>Mavericks.iso</code> บน Desktop มาสู่เครื่องจริง (อาจผ่าน usb หรือเน็ตเวิร์ค - ผมใช้ผ่านเน็ตเวิร์ค) เพื่อจะนำไปติดตั้งในขั้นตอนต่อไป</p> <p>ปิดเครื่อง</p> <p>จบขั้นแรก</p> <p>หากต้องการทดสอบ Snow Leopard ต่อไปก็สามารถเก็บ Virtual Machine "osx" นี้ไว้ได้ แต่หากไม่ต้องการใช้แล้วก็ลบทิ้งได้เลย</p> <h3>ที่มา</h3> <ul> <li><a href="http://techventura.wordpress.com/2012/12/04/install-mac-os-x-snow-leopard-in-VirtualBox-4-2-efi-method/">Install Mac OS X (Snow Leopard) in VirtualBox 4.2 (EFI Method)</a></li> <li><a href="http://tonymacx86.blogspot.com/2010/04/iboot-multibeast-install-mac-os-x-on.html">iBoot + MultiBeast: Install Mac OS X on any Intel-based PC</a></li> <li><a href="http://forums.appleinsider.com/t/159955/howto-create-bootable-mavericks-iso">HOWTO: Create bootable Mavericks ISO </a></li> </ul> <h2>2.ติดตั้ง Mavericks</h2> <p>เอา VirtualBox สร้าง Virtual Machine ใหม่ดังนี้ </p> <pre> Name: <strong>osx64</strong> Type: <strong>Max OS X</strong> Version: <strong>Mac OS X (64 bit)</strong> Memory size: <strong>2048</strong> Hard drive: <strong>virtual hard drive 30.00GB VDI (VirtualBox Disk Image)</strong> (ถ้าต้องใช้งานจริงจัง ควรเป็น 40G ขึ้นไป) Storage on physical hard drive: <strong>Dynamically allocated</strong> </pre><p> คราวนี้ไม่ต้องใช้ iBoot แล้ว โดยจะใช้ <code>Mavericks.iso</code> ที่ได้จากขั้นตอนก่อนหน้ามาทำเป็น virtual CD/DVD disk file<br /> สำหรับบูตเพื่อติดตั้ง และไม่ต้องยกเลิก EFI แล้ว</p> <p>ตั้งค่าอื่น</p> <pre> System: Processor: <strong>2</strong> CPU Display: Video: Video Memory: <strong>32</strong> MB (ใช้ค่าอื่นแล้วเปิด System Information ไม่ได้) <strong>Enable 3D Acceleration</strong> Storage: Controller: SATA -> Empty เปลี่ยน Attributes: Choose a virtual CD/DVD disk file: <strong>เปลี่ยนเป็น Mavericks.iso ที่เตรียมไว้</strong> </pre><p> ก่อนจะบูต ให้บอก VirtualBox ว่าจะติดตั้งเป็น 64 บิต และเลือกหน้าจอเป็นขนาด 1440x900<br /> เข้า Terminal ของลินุกซ์ แล้วพิมพ์ดังนี้</p> <pre> VM=osx64 N=4 #N can be one of 0,1,2,3,4,5 referring to the 640x480, 800x600, 1024x768, 1280x1024, 1440x900, 1920x1200 screen resolution respectively (5 may not worked). VBoxManage modifyvm "$VM" --firmware efi64 VBoxManage setextradata "$VM" VBoxInternal2/EfiGopMode $N VBoxManage setextradata "$VM" VBoxInternal2/SmcDeviceKey "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" </pre><p> แล้วก็เริ่มสตาร์ท osx64 เพื่อติดต้้งได้เลย บูตครั้งแรกอาจนานหน่อยและมีรายงานความผิดพลาดเยอะ แต่ไม่ต้องสนใจ</p> <p>วิธีติดตั้งเหมือนเดิม คือต้องพาร์ติชั่นก่อน แล้วติดตั้งต่อจนจบ</p> <p>ตอนบูตครั้งแรก อย่าลืมเปลี่ยน virtual CD/DVD จาก Mavericks กลับเป็น Host Drive ATAPI (sr0)</p> <p>จบแล้ว</p> <h3>ที่มา</h3> <ul> <li><a href="http://ntk.me/2012/09/07/os-x-on-os-x/">OS X on OS X: Running OS X on VirtualBox</a></li> </ul> <h3>รายงานผล</h3> <ul> <li>Snow Leopard: เปิด About this Mac ไม่ได้</li> <li>Mavericks: การรันไม่ค่อยลื่นเท่าไหร่ แต่ก็พอใช้งาน test/debug Safari/iBooks ตามจุดประสงค์หลักได้</li> <li>ใช้ปุ่ม Alt ขวามือ แทนปุ่ม Command ใน Mac</li> <li>Mouse wheel หมุนกลับทางกับของลินุกซ์/วินโดวส์</li> </ul> </div></div></div><div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above"><div class="field-label">Topic:&nbsp;</div><div class="field-items"><div class="field-item even"><a href="/taxonomy/term/3">debian</a></div><div class="field-item odd"><a href="/taxonomy/term/230">virtualbox</a></div><div class="field-item even"><a href="/taxonomy/term/312">virtualization</a></div><div class="field-item odd"><a href="/taxonomy/term/344">os x</a></div></div></div> Fri, 10 Jan 2014 13:22:42 +0000 wd 760 at https://thaitux.info https://thaitux.info/node/760#comments bash: สคริปต์คัดลอกผู้ใช้ https://thaitux.info/node/755 <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>สคริปต์คัดลอกผู้ใช้จากระบบปัจจุบันไปยังไดเรคทอรี่ที่ติดตั้งลินุกซ์อีกตัวหนึ่ง<br /> มีประโยชน์สำหรับติดตั้งลินุกซ์หลายตัว และต้องการให้ผู้ใช้เหมือนกับระบบปัจจุบัน ตัวอย่างการใช้งานเช่น</p> <ul> <li>ติดตั้งลินุกซ์ผ่าน debootstrap</li> <li>ติดตั้งลินุกซ์โดยการเมานต์ live cd แล้วคัดลอก squashfs มาติดตั้งโดยตรง</li> </ul> <p>ข้อกำหนดคือ</p> <ul> <li>ต้องใช้สิทธิ์ root ในการรัน</li> <li>ต้องเป็นลินุกซ์ที่มีการเก็บไฟล์ผู้ใช้แบบมาตรฐาน คือเก็บที่ไฟล์ <code>/etc/passwd</code>, <code>/etc/group</code> และ <code>/etc/shadow</code></li> </ul> <p>สคริปต์มีดังนี้</p> <pre>$ <strong>sudo vi /usr/local/sbin/transfer_users.sh</strong></pre><pre>#!/bin/bash function usage() { cat &lt;&lt;EOF Usage: $0 DESTINATION Transfer users from current linux system to DESTINATION directory that have another linux system. Run as root. EOF exit 1 } DEST=$1 if [ ! "$UID" == "0" ]; then echo "Please run as root." usage fi if [ ! -d "$DEST" ]; then echo "DESTINATION directory not found." usage fi if [ ! -d "$DEST/etc" ]; then echo "DESTINATION/etc directory not found." usage fi US=`ls /home` TMP=/tmp/${RANDOM}.txt #SORT ON UID for i in $US; do UUID=`grep ":/home/${i}:" /etc/passwd | cut -d: -f3` echo "${UUID}:${i}" &gt;&gt; $TMP done #PROCESS EACH USER for i in `cat $TMP | sort`; do UUID=`echo $i | cut -d: -f1` U=`echo $i | cut -d: -f2` PASSWDLINE=`grep ":/home/${U}:" /etc/passwd` #/etc/group GNUM=`echo $PASSWDLINE | cut -d: -f4` GROUPLINE=`grep $GNUM /etc/group` GNAME=`echo $GROUPLINE | cut -d: -f1` OLDGROUP=`grep $GNAME $DEST/etc/group` if [ "$OLDGROUP" == "" ]; then echo $GROUPLINE &gt;&gt; $DEST/etc/group elif [ "$OLDGROUP" != "$GROUPLINE" ]; then sed -i "s/$OLDGROUP/$GROUPLINE/g" $DEST/etc/group fi #/etc/passwd OLDPASS=`grep ":/home/${U}:" $DEST/etc/passwd` if [ "$OLDPASS" == "" ]; then echo $PASSWDLINE &gt;&gt; $DEST/etc/passwd elif [ "$OLDPASS" != "$PASSWDLINE" ]; then sed -i "s/$OLDPASS/$PASSWDLINE/g" $DEST/etc/passwd fi #/etc/shadow SHADOWLINE=`grep "${U}:" /etc/shadow | grep -v '*'` OLDSHADOW=`grep "${U}:" $DEST/etc/shadow | grep -v '*'` if [ "$OLDSHADOW" == "" ]; then echo $SHADOWLINE &gt;&gt; $DEST/etc/shadow elif [ "$OLDSHADOW" != "$SHADOWLINE" ]; then sed -i "s#$OLDSHADOW#$SHADOWLINE#g" $DEST/etc/shadow fi #GROUP MEMBERS for j in `groups $U | cut -d: -f2`; do for k in `echo $j`; do if [ "$k" == "$GNAME" ]; then continue fi OLDLINE=`grep "${k}:" $DEST/etc/group` if ! echo $OLDLINE | grep $U ; then if [ "${OLDLINE: -1}" == ":" ]; then sed -i "s/$OLDLINE/${OLDLINE}${U}/g" $DEST/etc/group else sed -i "s/$OLDLINE/${OLDLINE},${U}/g" $DEST/etc/group fi fi done done #/HOME if [ ! -d "$DEST/home/$U" ]; then mkdir -p "$DEST/home/$U" fi chown -R ${U}:${GNAME} $DEST/home/$U done #for i in passwd group shadow; do # cp $DEST/etc/$i $DEST/etc/${i}- #done rm $TMP </pre><p> ตัวอย่างเช่น เราติดตั้งลินุกซ์อีกอันไว้ที่ <code>/dev/sdaXX</code></p> <pre>$ <strong>sudo mount /dev/sdaXX /mnt/tmp</strong> $ <strong>sudo /usr/local/sbin/transfer_users.sh /mnt/tmp</strong></pre><p> ผู้ใช้ทั้งหมดใน <code>/home/*</code> จะถูกคัดลอกไปยัง <code>/mnt/tmp/home/</code> ตามต้องการ</p> </div></div></div><div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above"><div class="field-label">Topic:&nbsp;</div><div class="field-items"><div class="field-item even"><a href="/taxonomy/term/3">debian</a></div><div class="field-item odd"><a href="/taxonomy/term/96">bash</a></div></div></div> Thu, 19 Dec 2013 01:18:53 +0000 wd 755 at https://thaitux.info https://thaitux.info/node/755#comments bash: สคริปต์แก้ Boot record ของ NTFS https://thaitux.info/node/754 <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><h3>update 2556-12-03</h3> <p>ลองใช้สคริปต์กับพาร์ติชั่นที่ขนาดไม่เท่ากันแล้วปรากฎว่าใช้ไม่ได้ เพราะ NTFS เก็บข้อมูลหลายอย่างมากกว่าแค่จุดเริ่มต้นและขนาด (ดูที่ <a href="http://www.ntfs.com/ntfs-partition-boot-sector.htm">NTFS Partition Boot Sector</a>)</p> <p>วิธีที่ได้ผลกว่าคือ ฟอร์แมตไดร์ฟไว้ก่อน -> เก็บ boot sector ไว้ 72 ไบต์ -> ทำ ntfsclone -> เอา boot recort ที่เก็บไว้มาเขียนทับ</p> <p>ตัวอย่างเช่น จะคัดลอก ไดร์ฟ /dev/sda1 ไปยัง /dev/sdb1 ขั้นตอนจะเป็นดังนี้</p> <pre>$ <strong>sudo mkfs.ntfs -f /dev/sdb1</strong> $ <strong>sudo dd if=/dev/sdb1 of=sdb1.img bs=72 count=1</strong> $ <strong>sudo ntfsclone -O /dev/sdb1 /dev/sda1</strong> $ <strong>sudo dd if=sdb1.img of=/dev/sdb1</strong></pre><hr /> <p>*** สคริปต์ด้านล่างนี้ ล้าสมัยแล้ว ***</p> <p>แก้ปัญหาเวลาใช้ <a href="http://en.wikipedia.org/wiki/Ntfsprogs">ntfsclone</a> ในการ restore พาร์ติชั่น NTFS มาลงในฮาร์ดดิสก์ลูกใหม่ ซึ่งจุดเริ่มต้นและขนาดอาจไม่เท่าของเดิม</p> <p>วิธีการคือใช้ข้อมูลจากตาราง Master Boot Record ปัจจุบัน มาเขียนทับ boot record ของพาร์ติชั่น NTFS ที่ต้องการ โดยใช้เชลล์สคริปต์</p> <pre>$ <strong>vi ntfs_fix_boot_sector.sh</strong></pre><!--break--><pre> #!/bin/bash function usage() { cat &lt;&lt;EOF Fix NTFS boot record: Usage: $0 DEVICE Example: $0 /dev/sda1 EOF exit 1 } if [ ! "$1" ]; then usage fi PART=$1 if [ ! -b "$PART" ]; then echo -e "$PART not found. Exit.\n" usage fi BSF="`echo $PART | tr '/' '_'`.img" BSFB=${BSF}.bak BSFD="${BSF}_`date +%F`.bak" function reverse_byte () { #reverse_byte HEXSTR local S=$1 #HEXSTR local B local C while [ "$S" ]; do B=${S:(-2)} S=${S:0:-2} C="${C}\\x${B}" done echo $C } function replace_byte () { #replace_byte OFFSET LENGTH NUMBER local O=$1 #OFFSET local L=$2 #LENGTH local N=$3 #NUMBER let NL=${L}*2 XN=`printf "%0${NL}x" $N` RXN=`reverse_byte $XN` #echo "printf $RXN | dd of=$BSF bs=1 seek=$O count=$L conv=notrunc" printf $RXN | sudo dd of=$BSF bs=1 seek=$O count=$L conv=notrunc &gt; /dev/null 2&gt;&amp;1 } sudo dd if=$PART of=$BSF bs=512 count=1 &gt; /dev/null 2&gt;&amp;1 TMP="/tmp/$0_${RANDOM}.txt" HDD=$PART while [ "`echo ${HDD:(-1)} | tr '0123456789' ' '`" == " " ]; do HDD=${HDD:0:-1} done sudo fdisk -l $HDD &gt; $TMP if ! cat $TMP | grep $PART | grep NTFS &gt; /dev/null 2&gt;&amp;1; then echo -e "$PART is not NTFS partition. Exit.\n" sudo rm $TMP sudo rm $BSF usage fi if [ ! -f "$BSFB" ]; then cp $BSF $BSFB else cp $BSF $BSFD fi echo "Fixing $PART ..." HEADS=`cat $TMP | grep 'sectors/track' | cut -d, -f1 | cut -d\ -f1` SECTORS=`cat $TMP | grep 'sectors/track' | cut -d, -f2 | cut -d\ -f2` START=`cat $TMP | grep "${PART} " | awk -F' ' '{ print $2 }'` END=`cat $TMP | grep "${PART} " | awk -F' ' '{ print $4 }'` if [ "$START" == "*" ]; then START=`cat $TMP | grep "${PART} " | awk -F' ' '{ print $3 }'` END=`cat $TMP | grep "${PART} " | awk -F' ' '{ print $4 }'` fi let LENGTH=$END-$START OFFSET_HEADS=26 OFFSET_SECTORS=24 OFFSET_START=28 OFFSET_LENGTH=40 LEN_HEADS=1 LEN_SECTORS=1 LEN_START=4 LEN_LENGTH=4 for i in HEADS SECTORS START LENGTH; do A="OFFSET_${i}" B="LEN_${i}" replace_byte ${!A} ${!B} ${!i} done echo "Fix with heads=$HEADS, sectors/track=$SECTORS, start=$START, length=$LENGTH" sudo dd if=$BSF of=$PART &gt; /dev/null 2&gt;&amp;1 sudo rm $TMP cat &lt;&lt;EOF Command used: sudo dd if=$BSF of=$PART Revert with command: sudo dd if=$BSFB of=$PART EOF </pre><p> ตัวอย่าง สมมุติว่าพาร์ติชั่นที่ต้องการเป็น /dev/sda1 คำสั่งคือ</p> <pre>$ <strong>ntfs_fix_boot_record.sh /dev/sda1</strong></pre><p> ได้ผลลัพธ์คือ</p> <pre> Fixing /dev/sda1 ... Fix with heads=255, sectors/track=63, start=2048, length=62914559 Command used: sudo dd if=_dev_sda1.img of=/dev/sda1 Revert with command: sudo dd if=_dev_sda1.img.bak of=/dev/sda1 </pre><h3>ที่มา:</h3> <ul> <li><a href="http://www.2pi.info/software/copying-windows-new-hard-drive.html">Copying Windows to a New Hard Drive Using Linux</a></li> </ul> </div></div></div><div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above"><div class="field-label">Topic:&nbsp;</div><div class="field-items"><div class="field-item even"><a href="/taxonomy/term/3">debian</a></div><div class="field-item odd"><a href="/taxonomy/term/75">ntfs</a></div><div class="field-item even"><a href="/taxonomy/term/96">bash</a></div></div></div> Tue, 26 Nov 2013 02:42:12 +0000 wd 754 at https://thaitux.info https://thaitux.info/node/754#comments debian: ปรับปรุงเครื่องคัดลอกซีดี บน Squeeze https://thaitux.info/node/740 <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>จะรีไซเคิลเครื่องเก่า มาทำเครื่องคัดลอกซีดีเพื่อถวายวัด</p> <p>สเปคเครื่องเก่าคือ AMD Sempron(tm) 2000+, RAM 512MB, HD 40G (เป็น /dev/sda)<br /> ลงทุนซื้อใหม่คือ CD-Writer 4 ตัว ตัวละ 545 บาท (IDE 3 และ SATA 1)<br /> เนื่องจากจะไม่มีจอภาพ จึงจะใช้เสียงเป็นตัวแจ้งสถานะ</p> <p>จะทำให้มีการทำงานคือ</p> <ul> <li>เมื่อเปิดเครื่อง ถาด /dev/sr0 จะดีดออกเพื่อรอการอ่านข้อมูล ใช้เสียงดัง 1 ปี๊บ ทุก 3 วินาที</li> <li>เมื่อใส่แผ่นต้นฉบับ เครื่องจะตรวจสอบแผ่น ถ้าแผ่นเสียจะแจ้งเป็นเสียง 6 ปี๊บ ทุก 3 วินาที เพื่อรออ่านแผ่นใหม่</li> <li>ถ้าแผ่นดีจะอ่านจนเสร็จ แล้วทั้ง 4 ถาดจะถูกดีดออกเพื่อรอการเขียนข้อมูล โดยใช้เสียงดัง 2 ปี๊บ ทุก 3 วินาที</li> <li>จะเขียนวนไปเรื่อยจนกระทั่งปิดเครื่องเขียนด้วยถาดเปล่า ไดร์ฟนั้นก็จะหยุดทำงาน</li> <li>เมื่อหยุดทำงานครบสามไดร์ฟแล้ว เครื่องจะปิดตัวเอง</li> <li>ในระหว่างที่ถาดถูกดีดออก ถ้าไม่มีการใส่แผ่นใหม่เข้าไป หลังจากผ่านไป 100 ปี๊ป หรือเรากดถาดเปล่าดีดกลับเข้าไป ถาดจะปิดตัวเอง และปิดการทำงานของถาดนั้นตลอดไป</li> </ul> <h3>หมายเหตุ</h3> <ul> <li>เนื่องจากเป็นการทำงานแบบขนาน ทุกไดร์ฟจึงทำงานเป็นอิสระ</li> <li>กำหนดให้ความเร็วในการเขียนเป็นแค่ 1x เพื่อให้ฮาร์ดดิสก์อ่านข้อมูลได้ทัน และเพิ่มความคงทนของข้อมูล</li> <li>แผ่นที่เป็นเสียง Audio อ่านช้ามาก</li> </ul> <h3>ธีการสร้าง</h3> <p>เริ่มด้วยติดตั้งเดเบียน squeeze แบบไม่ติดตั้งอะไรเพิ่มเติมเลย<br /> ดามด้วยเอาแพกเกจที่จำเป็นที่สคริปต์เราต้องเรียกใช้ คือ</p> <ul> <li>eject สำหรับดีดถาดเข้า/ออก</li> <li>setcd สำหรับตรวจสถานะถาด และ</li> <li>cdrdao สำหรับการคัดลอกและเขียนข้อมูล</li> <ul> <pre># <strong>aptitude install eject setcd cdrdao</strong></pre><p> สร้างสคริปต์สำหรับให้ rc.local เรียกใช้ตอนเปิดเครื่อง สำหรับให้อ่านแผ่นต้นฉบับ<br /> ตั้งชื่อว่า d.rc-cpcd</p> <pre># <strong>vi /usr/local/sbin/d.rc-cpcd</strong></pre><pre>#!/bin/bash # CD COPIER PROGRAM # PREREQUISITE: # # aptitude install eject cdrdao setcd dvd+rw-tools # file: d.rc-cpcd d.func-cpcd # PUT d.rc-cpcd AND d.func-cpcd IN /usr/local/sbin # THEN CALL d.rc-cpcd FROM /etc/rc.local #VARIABLE SRC=/dev/sr0 #SOURCE DRIVE TOC=/tmp/toc.bin #TEMP.IMAGE FILE DSC=" /dev/sr0 /dev/sr1 /dev/sr2 /dev/sr3 " #DESTINATION DRIVE . /usr/local/sbin/d.common-func wait_read_close() { # MAX RETRY LOOP = 100 for (( i=0; i<=100; i++ )); do if setcd -i $SRC | grep 'CD tray is open' >> /dev/null; then # SLEEP 1 SECONDS beep_close elif setcd -i $SRC | grep 'Drive is not ready' >> /dev/null; then sleep 1 else if setcd -i $SRC | grep 'No disc is inserted' >> /dev/null; then break else #DO READ cdrdao read-cd --device $SRC --read-raw --datafile /tmp/data.bin $TOC return fi fi done eject -t $SRC /sbin/shutdown -h now return } rm -rf $TOC #CHECK 1ST CDR IS ORIGINAL CD THEN DUP. TO /tmp while ! [ -s $TOC ]; do eject $SRC echo "eject $SRC" wait_read_close $SRC beep done # CALL MULTIPLE INSTANCE IN $DSC DRIVES for i in $DSC; do if [ "$i" ]; then /usr/local/sbin/d.func-cpcd $i $TOC & fi done wait /sbin/shutdown -h now </pre><p> อีกไฟล์นึงเป็นฟังก์ชั่นสำหรับเขียนซีดี ตั้งชื่อว่า d.func-cpcd</p> <pre># <strong>vi /usr/local/sbin/d.func-cpcd</strong></pre><pre>#!/bin/bash DEV=$1 TOC=$2 SPEED=1 . /usr/local/sbin/d.common-func wait_write_close() { # MAX RETRY LOOP = 100 for (( i=0; i<=100; i++ )); do # WAIT FOR INSERT DISC if setcd -i $DEV | grep 'is open' >> /dev/null; then beep_write; sleep 3 elif setcd -i $DEV | grep 'Drive is not ready' >> /dev/null; then sleep 1 elif setcd -i $DEV | grep 'No disc' >> /dev/null; then # IF NO DISC INSERTED THEN BREAK exit 1 else # DO WRITE cdrdao write --device $DEV --speed $SPEED --overburn -n $TOC # LAST CHECK WRITING if setcd -i $DEV | grep 'error' >> /dev/null; then beep_error; sleep 3 eject $DEV else eject $DEV return fi fi done #END PROG eject -t $DEV exit 1 } if [ ! $1 ] && [ ! $2 ] ; then echo " USAGE : $0 DRIVE SPEED TEMP-IMG" echo " EXAM1 : $0 /dev/sr0 /tmp/toc.bin" exit 1 fi #CHECK IMAGE FILE if ! [ -f $TOC ] ; then echo " Image file $TOC does not existed" exit 1 fi #COPY TO NEW BLANK CD while [ -f $TOC ]; do eject $DEV wait_write_close beep_write done </pre><p> และสุดท้ายคือไฟล์ฟังก์ชั่นที่ใช้ร่วมกัน</p> <pre># <strong>vi /usr/local/sbin/d.common-func</strong></pre><pre>#!/bin/bash beep() { echo -e "\a" } beep_close() { beep; sleep 1; } beep_write() { beep; sleep .15; beep } beep_error() { for i in `seq 1 6`; do beep; sleep .15; done } </pre><p> ต่อไปแก้ไขไฟล์ /etc/rc.local ให้มาเรียกใช้โปรแกรม d.rc-cpcd ตอนเปิดเครื่อง</p> <pre># <strong>vi /etc/rc.local</strong></pre><pre>... <strong>/usr/local/sbin/d.rc-cpcd</strong> exit 0 </pre><p> เสร็จแล้วรีบูตทดสอบได้เลย</p> </div></div></div><div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above"><div class="field-label">Topic:&nbsp;</div><div class="field-items"><div class="field-item even"><a href="/taxonomy/term/3">debian</a></div><div class="field-item odd"><a href="/taxonomy/term/171">cd copier</a></div><div class="field-item even"><a href="/taxonomy/term/329">squeeze</a></div></div></div> Tue, 30 Aug 2011 01:39:20 +0000 wd 740 at https://thaitux.info https://thaitux.info/node/740#comments debian: แก้ปัญหาเรื่อง Tapping บน Touchpad https://thaitux.info/node/737 <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>debian: แก้ปัญหาเรื่อง Tapping บน Touchpad<br /> Tapping คือการใช้นิ้วแตะบน Touchpad แล้วให้ผลเหมือนการคลิกเมาส์ปุ่มซ้าย ซึี่งบน Windows และ Ubuntu เขาปรับตั้งมาให้อยู่แล้ว</p> <p>ทดสอบบน<br /> Netbook: Acer Aspire One D255<br /> Linux: Debian Squeeze 6.0</p> <p>วิธีที่ทดลอง แต่ไม่ได้ผล คือ การตั้งไฟล์คอนฟิกใน /etc/X11/xorg.conf.d/ และ /etc/udev/rules.d/<br /> Xorg เขารายงานว่าหาฮาร์ดแวร์ไม่พบบ้าง ไม่พบมอดูล fbcon บ้าง สุดท้ายคือต้องแก้ที่ session<br /> แต่ไหน ๆ ทำแล้ว ก็เลยทำเรื่อง mouse scroll ด้วย ดังนี้</p> <ul> <li><strong>สำหรับ gnome-desktop มีผลกับเราคนเดียว</strong><br /> ใช้เมนู <code> System -&gt; Preferences -&gt; Mouse</code><br /> เลือก <ul> <li><code>Disable touchpad while typing</code></li> <li><code>Enable mouse clicks with touchpad</code></li> <li><code>Enable horizontal scrolling</code></li> </ul> </li> <li><strong>สำหรับ gnome-desktop มีผลกับผู้ใช้ทุกคน</strong><br /> ใช้บรรทัดคำสั่งดังนี้ <pre># <strong>gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type bool --set /desktop/gnome/peripherals/touchpad/horiz_scroll_enabled true</strong> # <strong>gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type bool --set /desktop/gnome/peripherals/touchpad/tap_to_click true</strong> # <strong>gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type bool --set /desktop/gnome/peripherals/touchpad/disable_while_typing true</strong></pre></li> <li><strong>สำหรับ desktop อื่น มีผลกับเราคนเดียว</strong> (ลองกับ xfce-desktop) อย่างเดียว<br /> อันนี้เราทำกับ xserver โดยทำที่ xsession<br /> สร้างไฟล์ <code>~/.xsessionrc</code> เนื้อไฟล์มีดังนี้ <pre>synclient VertEdgeScroll=1 synclient HorizEdgeScroll=1 synclient TapButton1=1</pre></li> <li><strong>สำหรับ desktop อื่น มีผลกับผู้ใช้ทุกคน</strong> (ลองกับ xfce-desktop) อย่างเดียว<br /> สร้างไฟล์ <code>/etc/X11/Xsession.d/99x11-synaptic</code><br /> เนื้อไฟล์เหมือนเดิม <pre>synclient VertEdgeScroll=1 synclient HorizEdgeScroll=1 synclient TapButton1=1</pre></li> </ul> <p>เสร็จแล้ว</p> <p><strong>อ้างอิง</strong>: <a href="http://solutionsandtips.blogspot.com/2010/07/enable-touchpad-tapping-scrolling-in.html">Solution, Tips And More: Enable Touchpad Tapping &amp; Scrolling in Debian</a></p> </div></div></div><div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above"><div class="field-label">Topic:&nbsp;</div><div class="field-items"><div class="field-item even"><a href="/taxonomy/term/3">debian</a></div><div class="field-item odd"><a href="/taxonomy/term/87">hardware</a></div></div></div> Wed, 09 Feb 2011 06:00:54 +0000 wd 737 at https://thaitux.info https://thaitux.info/node/737#comments samba: symlinks https://thaitux.info/node/736 <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>samba รุ่นตั้งแต่ 3.5 เป็นต้นมา ไม่อนุญาตให้ใช้ symlinks ในการโยงไดเรคทอรี่ไปที่อื่น<br /> สามารถแก้ไขได้ 2 วิธี คือ</p> <ul> <li>แก้ smb.conf ดังนี้<br /> <pre>... [global] unix extensions = no ... [share2] ... wide links = yes follow symlinks = yes #default ...</pre><p>วิธีนี้มีข้อเสียคือ permission ของผู้ใช้และกลุ่ม จะเพี้ยน อาจมีปัญหาในการเขียนไฟล์</p></li> <li>ใช้การ mount แบบ bind แทนการใช้ symbolic links<br /> เช่นเดิมเคยโยงว่า <pre># <strong>ln -sf /samba/share1/dir1 /samba/share2/dir1</strong></pre><p> ให้เปลี่ยนเป็น</p> <pre># <strong>mkdir /samba/share2/dir1</strong> # <strong>mount -o bind /samba/share1/dir1 /samba/share2/dir1</strong></pre><p>เป็นต้น</p> <p>เราสามารถทำให้เป็นอัตโนมัติได้ด้วยการนำไปใส่ไว้ใน smb.conf ดังนี้</p> <pre>... [share2] ... root preexec = sh -c "mount -o bind /samba/share1/dir1 /samba/share2/dir1" ... </pre></li> </ul> <p>จบแล้ว</p> </div></div></div><div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above"><div class="field-label">Topic:&nbsp;</div><div class="field-items"><div class="field-item even"><a href="/taxonomy/term/3">debian</a></div><div class="field-item odd"><a href="/taxonomy/term/38">samba</a></div></div></div> Mon, 07 Feb 2011 06:06:05 +0000 wd 736 at https://thaitux.info https://thaitux.info/node/736#comments screen tip: screenrc และการสั่งงานด้วยบรรทัดคำสั่ง https://thaitux.info/node/735 <div class="field field-name-body field-type-text-with-summary field-label-hidden"><div class="field-items"><div class="field-item even"><p>screen tip: screenrc และการสั่งงานด้วยบรรทัดคำสั่ง</p> <h3>ต้องการให้เมื่อเริ่ม screen ทุกครั้ง จะสั่งเปิด 3 หน้าต่างคือแสดง top, syslog, และ dmesg ตามลำดับ โดยตั้งชื่อ session ว่า <code>norm</code></h3> <p>ใช้การแก้ไขไฟล์ <code>~/.screenrc</code> ดังนี้</p> <pre># <strong>vi ~/.screenrc</strong></pre><pre><strong>sessionname norm screen top screen 1 tail -f /var/log/syslog screen 2 tail -f /var/log/dmesg</strong></pre><p> รัน screen</p> <pre># <strong>screen</strong></pre><p>จะได้ผลตามต้องการ</p> <h3>ต้องการให้ screen เริ่มงานแบบข้างต้น เฉพาะเมื่อเราต้องการ</h3> <p>จะใช้การทำงานผ่านสคริปต์ ดังนี้<br /> สมมุติตั้งชื่อสคริปต์ว่า screen_monitor.sh</p> <pre># <strong>vi screen_monitor.sh</strong></pre><pre><strong>#!/bin/bash screen -S norm -md bash screen -S norm -p0 -X stuff "screen bash " screen -S norm -p0 -X stuff "top " screen -S norm -p1 -X stuff "screen bash " screen -S norm -p1 -X stuff "tail -f /var/log/syslog " screen -S norm -p2 -X stuff "screen bash " screen -S norm -p2 -X stuff "tail -f /var/log/dmesg " </strong></pre><p> เปลี่ยนสิทธิ์และสั่งรัน</p> <pre># <strong>chmod 755 screen_monitor.sh<strong> # <strong>./screen_monitor.sh</strong></strong></strong></pre><p>จะไม่เห็นการเปลี่ยนแปลง เพราะเราสั่งให้ทำงานแบบเบื้องหลัง (<code>-md</code>)</p> <p>จะเข้าไปสู่ (<code>attach</code>) การทำงานของ screen ได้ด้วยคำสั่ง</p> <pre># <strong>screen -r norm</strong></pre><p> จบแล้วครับ</p> </div></div></div><div class="field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-above"><div class="field-label">Topic:&nbsp;</div><div class="field-items"><div class="field-item even"><a href="/taxonomy/term/3">debian</a></div><div class="field-item odd"><a href="/taxonomy/term/113">screen</a></div></div></div> Sun, 06 Feb 2011 12:50:41 +0000 wd 735 at https://thaitux.info https://thaitux.info/node/735#comments