mirror of
https://github.com/CopterExpress/clover.git
synced 2026-05-27 21:49:32 +00:00
- untracked .gitattributes - untracked .gitignore - untracked apps/ios/.gitignore - untracked apps/ios/cleverrc.xcodeproj/project.pbxproj - untracked apps/ios/cleverrc.xcodeproj/project.xcworkspace/contents.xcworkspacedata - untracked apps/ios/cleverrc.xcworkspace/contents.xcworkspacedata - untracked apps/ios/cleverrc/AppDelegate.swift - untracked apps/ios/cleverrc/Assets.xcassets/AppIcon.appiconset/cleverios180-1.png - untracked apps/ios/cleverrc/Assets.xcassets/AppIcon.appiconset/cleverios180.png - untracked apps/ios/cleverrc/Assets.xcassets/AppIcon.appiconset/Contents.json - untracked apps/ios/cleverrc/Assets.xcassets/Contents.json - untracked apps/ios/cleverrc/Assets.xcassets/Image.imageset/Contents.json - untracked apps/ios/cleverrc/Base.lproj/LaunchScreen.storyboard - untracked apps/ios/cleverrc/Base.lproj/Main.storyboard - untracked apps/ios/cleverrc/BinUtils.swift - untracked apps/ios/cleverrc/clever.svg - untracked apps/ios/cleverrc/index.html - untracked apps/ios/cleverrc/Info.plist - untracked apps/ios/cleverrc/main.css - untracked apps/ios/cleverrc/main.js - untracked apps/ios/cleverrc/README.md - untracked apps/ios/cleverrc/roslib.js - untracked apps/ios/cleverrc/telemetry.js - untracked apps/ios/cleverrc/ViewController.swift - untracked apps/ios/Podfile - untracked apps/ios/Podfile.lock - untracked apps/ios/README.md - untracked aruco_pose/CMakeLists.txt - untracked aruco_pose/nodelet_plugins.xml - untracked aruco_pose/package.xml - untracked aruco_pose/src/aruco_pose.cpp - untracked aruco_pose/src/fix.cpp - untracked assets/11_1.png - untracked assets/11_2.png - untracked assets/11_3.png - untracked assets/11_4.png - untracked assets/11_5.png - untracked assets/13_1.png - untracked assets/13_10.png - untracked assets/13_11.png - untracked assets/13_2.png - untracked assets/13_3.jpg - untracked assets/13_4.png - untracked assets/13_5.png - untracked assets/13_6.png - untracked assets/13_7.png - untracked assets/13_8.png - untracked assets/13_9.png - untracked assets/15_1.png - untracked assets/15_2.png - untracked assets/15_3.png - untracked assets/15_4.png - untracked assets/15_5.png - untracked assets/15_6.png - untracked assets/15_7.png - untracked assets/16_1.png - untracked assets/16_2.png - untracked assets/16_3.png - untracked assets/16_4.png - untracked assets/1_1.png - untracked assets/1_10.png - untracked assets/1_11.png - untracked assets/1_12.png - untracked assets/1_13.png - untracked assets/1_2.png - untracked assets/1_3.png - untracked assets/1_4.png - untracked assets/1_5.png - untracked assets/1_6.png - untracked assets/1_7.png - untracked assets/1_8.png - untracked assets/1_9.png - untracked assets/2_1.png - untracked assets/2_2.png - untracked assets/2_3.png - untracked assets/2_4.png - untracked assets/2_5.png - untracked assets/2_6.png - untracked assets/2_7.png - untracked assets/2_8.png - untracked assets/2_9.png - untracked assets/4_1.png - untracked assets/4_2.png - untracked assets/4_3.png - untracked assets/4_4.png - untracked assets/4_5.png - untracked assets/4_6.png - untracked assets/7_1.png - untracked assets/7_2.png - untracked assets/7_3.png - untracked assets/7_4.png - untracked assets/8_1.png - untracked assets/8_2.png - untracked assets/8_3.png - untracked assets/8_4.png - untracked assets/8_5.png - untracked assets/8_6.png - untracked assets/9_1.png - untracked assets/9_2.png - untracked assets/addEqipment.jpg - untracked assets/airframeSetup.jpg - untracked assets/allElements.png - untracked assets/attentionSave.jpg - untracked assets/brrc2205.png - untracked assets/brrc2205on.png - untracked assets/brrc2205ondeck.png - untracked assets/calibrateaxcel.jpg - untracked assets/calibrateaxcelstart.jpg - untracked assets/calibratecompass.jpg - untracked assets/calibrateESC.jpg - untracked assets/calibrategyro.jpg - untracked assets/calibratePIDparams.jpg - untracked assets/calibrateView.jpg - untracked assets/calibrateViewStart.jpg - untracked assets/casebattery.png - untracked assets/chooseSwitch.jpg - untracked assets/Clever main.png - untracked assets/clever.jpg - untracked assets/Clevermain.png - untracked assets/connectBattery.png - untracked assets/connectingRadio.png - untracked assets/connectionESCtoReceiver.png - untracked assets/connectionLost.jpg - untracked assets/connectionOK.jpg - untracked assets/connectionPixhawk.png - untracked assets/consistofTransmitter.jpg - untracked assets/cutwire14AWG.jpg - untracked assets/escDYSzap.png - untracked assets/escWires.png - untracked assets/explosion.png - untracked assets/firmwarePX4.jpg - untracked assets/flightModes.jpg - untracked assets/helphand.jpg - untracked assets/holderLegs.png - untracked assets/isoViewmountHolder.png - untracked assets/jumper.png - untracked assets/keep.png - untracked assets/lockradio.jpg - untracked assets/lockradio.png - untracked assets/lowsafeDeck.png - untracked assets/mainWindow.jpg - untracked assets/motorsTopview.png - untracked assets/mount5vconnector.png - untracked assets/mountAntenna.png - untracked assets/mountBeams.png - untracked assets/mountBottomDeck.png - untracked assets/mountHolder.png - untracked assets/mountPDB.png - untracked assets/mountReceiverDeck.png - untracked assets/mountReceiverStud.png - untracked assets/mountxt60pinsocket.png - untracked assets/notmoveslider.jpg - untracked assets/pixhawk.png - untracked assets/radioTransmitter.png - untracked assets/readyBatteryholder.png - untracked assets/receiver5V.png - untracked assets/receiverPPM.png - untracked assets/resolderingESC.png - untracked assets/safehighRadial.png - untracked assets/safeLegs.png - untracked assets/safelowRadial.png - untracked assets/safetybyassem.png - untracked assets/safetyINflight.png - untracked assets/safetyPower.png - untracked assets/safetyPreflight.png - untracked assets/soldering5VTOpdb.png - untracked assets/solderingBrrc2205ondeckTOescDYSzap.png - untracked assets/solderingPowerwires.png - untracked assets/solderingxt60socketTOpdb.png - untracked assets/stand.jpg - untracked assets/startPDBtest.jpg - untracked assets/testMotors.png - untracked assets/topESCcaseview.png - untracked assets/topPreview.png - untracked assets/topviewmountPDB.png - untracked assets/topviewpixhawk.png - untracked assets/turnoffSafetyswitch.jpg - untracked assets/xt60pinsocket.jpg - untracked assets/zap.jpg - untracked assets/zapPDBtest.jpg - untracked clever/camera_info/fisheye_cam_320.yaml - untracked clever/camera_info/fisheye_cam_640.yaml - untracked clever/CMakeLists.txt - untracked clever/launch/arduino.launch - untracked clever/launch/aruco.launch - untracked clever/launch/clever.launch - untracked clever/launch/copter_visualization.launch - untracked clever/launch/fpv_camera.launch - untracked clever/launch/main_camera.launch - untracked clever/launch/mavros.launch - untracked clever/launch/sitl.launch - untracked clever/launch/web_server.launch - untracked clever/nodelet_plugins.xml - untracked clever/package.xml - untracked clever/requirements.txt - untracked clever/src/aruco_vpe.cpp - untracked clever/src/fcu_horiz.cpp - untracked clever/src/fpv_camera - untracked clever/src/global_local.py - untracked clever/src/rc.cpp - untracked clever/src/simple_offboard.py - untracked clever/src/util.h - untracked clever/src/util.py - untracked clever/src/web_server.py - untracked clever/srv/GetTelemetry.srv - untracked clever/srv/Navigate.srv - untracked clever/srv/SetAttitude.srv - untracked clever/srv/SetAttitudeYawRate.srv - untracked clever/srv/SetPosition.srv - untracked clever/srv/SetPositionGlobal.srv - untracked clever/srv/SetPositionGlobalYawRate.srv - untracked clever/srv/SetPositionYawRate.srv - untracked clever/srv/SetRates.srv - untracked clever/srv/SetRatesYaw.srv - untracked clever/srv/SetVelocity.srv - untracked clever/srv/SetVelocityYawRate.srv - untracked deploy/clever.service - untracked deploy/clever_arudino.tar.gz - untracked deploy/generate_ros_lib - untracked deploy/roscore.env - untracked deploy/roscore.service - modified docs/3g.md - modified docs/assemble.md - untracked docs/deck.md - modified docs/etcher.md - modified docs/frames.md - modified docs/les1.md - modified docs/les11.md - modified docs/les13.md - modified docs/les15.md - modified docs/les16.md - modified docs/les2.md - modified docs/les4.md - modified docs/les7.md - modified docs/les8.md - modified docs/les9.md - modified docs/modes.md - untracked docs/powerConnection.md - modified docs/radioerrors.md - modified docs/radioerrors1.md - modified docs/safety.md - modified docs/setup.md - modified docs/simple_offboard.md - modified docs/tb.md - untracked docs/testConnection.md - modified docs/wifi.md - untracked docs/zap.md - removed gpsmd.md - untracked image/apps.sh - untracked image/git_release.py - untracked image/iface.sh - untracked image/image-config.sh - untracked image/Jenkinsfile - untracked image/ros.sh - untracked image/yadisk.py - removed img/11_1.png - removed img/11_2.png - removed img/11_3.png - removed img/11_4.png - removed img/11_5.png - removed img/13_1.png - removed img/13_10.png - removed img/13_11.png - removed img/13_2.png - removed img/13_3.jpg - removed img/13_4.png - removed img/13_5.png - removed img/13_6.png - removed img/13_7.png - removed img/13_8.png - removed img/13_9.png - removed img/15_1.png - removed img/15_2.png - removed img/15_3.png - removed img/15_4.png - removed img/15_5.png - removed img/15_6.png - removed img/15_7.png - removed img/16_1.png - removed img/16_2.png - removed img/16_3.png - removed img/16_4.png - removed img/1_1.png - removed img/1_10.png - removed img/1_11.png - removed img/1_12.png - removed img/1_13.png - removed img/1_2.png - removed img/1_3.png - removed img/1_4.png - removed img/1_5.png - removed img/1_6.png - removed img/1_7.png - removed img/1_8.png - removed img/1_9.png - removed img/2_1.png - removed img/2_2.png - removed img/2_3.png - removed img/2_4.png - removed img/2_5.png - removed img/2_6.png - removed img/2_7.png - removed img/2_8.png - removed img/2_9.png - removed img/4_1.png - removed img/4_2.png - removed img/4_3.png - removed img/4_4.png - removed img/4_5.png - removed img/4_6.png - removed img/7_1.png - removed img/7_2.png - removed img/7_3.png - removed img/7_4.png - removed img/8_1.png - removed img/8_2.png - removed img/8_3.png - removed img/8_4.png - removed img/8_5.png - removed img/8_6.png - removed img/9_1.png - removed img/9_2.png - removed img/addEqipment.jpg - removed img/airframeSetup.jpg - removed img/allElements.png - removed img/attentionSave.jpg - removed img/brrc2205.png - removed img/brrc2205on.png - removed img/brrc2205ondeck.png - removed img/calibrateaxcel.jpg - removed img/calibrateaxcelstart.jpg - removed img/calibratecompass.jpg - removed img/calibrateESC.jpg - removed img/calibrategyro.jpg - removed img/calibratePIDparams.jpg - removed img/calibrateView.jpg - removed img/calibrateViewStart.jpg - removed img/casebattery.png - removed img/chooseSwitch.jpg - removed img/Clever main.png - removed img/clever.jpg - removed img/Clevermain.png - removed img/connectBattery.png - removed img/connectingRadio.png - removed img/connectionESCtoReceiver.png - removed img/connectionLost.jpg - removed img/connectionOK.jpg - removed img/connectionPixhawk.png - removed img/consistofTransmitter.jpg - removed img/cutwire14AWG.jpg - removed img/escDYSzap.png - removed img/escWires.png - removed img/explosion.png - removed img/firmwarePX4.jpg - removed img/flightModes.jpg - removed img/helphand.jpg - removed img/holderLegs.png - removed img/isoViewmountHolder.png - removed img/jumper.png - removed img/keep.png - removed img/lockradio.jpg - removed img/lockradio.png - removed img/lowsafeDeck.png - removed img/mainWindow.jpg - removed img/motorsTopview.png - removed img/mount5vconnector.png - removed img/mountAntenna.png - removed img/mountBeams.png - removed img/mountBottomDeck.png - removed img/mountHolder.png - removed img/mountPDB.png - removed img/mountReceiverDeck.png - removed img/mountReceiverStud.png - removed img/mountxt60pinsocket.png - removed img/notmoveslider.jpg - removed img/pixhawk.png - removed img/radioTransmitter.png - removed img/readyBatteryholder.png - removed img/receiver5V.png - removed img/receiverPPM.png - removed img/resolderingESC.png - removed img/safehighRadial.png - removed img/safeLegs.png - removed img/safelowRadial.png - removed img/safetybyassem.png - removed img/safetyINflight.png - removed img/safetyPower.png - removed img/safetyPreflight.png - removed img/soldering5VTOpdb.png - removed img/solderingBrrc2205ondeckTOescDYSzap.png - removed img/solderingPowerwires.png - removed img/solderingxt60socketTOpdb.png - removed img/stand.jpg - removed img/startPDBtest.jpg - removed img/testMotors.png - removed img/topESCcaseview.png - removed img/topPreview.png - removed img/topviewmountPDB.png - removed img/topviewpixhawk.png - removed img/turnoffSafetyswitch.jpg - removed img/xt60pinsocket.jpg - removed img/zap.jpg - removed img/zapPDBtest.jpg - removed notes/deck.md - removed notes/powerConnection.md - removed notes/testConnection.md - removed notes/zap.md - removed primeri-programm.md - modified README.md - removed sborka.md - removed sitl.md Auto commit by GitBook Editor
492 lines
14 KiB
Bash
Executable File
492 lines
14 KiB
Bash
Executable File
#!/bin/bash
|
||
#!/bin/sh
|
||
|
||
set -e
|
||
|
||
#
|
||
# Script for image configure
|
||
# @smirart Smirnov Artem
|
||
#
|
||
|
||
|
||
# PREFIX_PATH=/mnt
|
||
# IMAGE=/home/pi/2017-11-29-raspbian-stretch-lite.img
|
||
#
|
||
# # blkid
|
||
# UUID_BOOT=CDD4-B453
|
||
# UUID_ROOTFS=72bfc10d-73ec-4d9e-a54a-1cc507ee7ed2
|
||
#
|
||
# # /dev/disk/by-label/boot
|
||
# DEV_BOOT=/dev/disk/by-uuid/$UUID_BOOT
|
||
# # /dev/disk/by-label$2
|
||
# DEV_ROOTFS=/dev/disk/by-uuid/$UUID_ROOTFS
|
||
|
||
|
||
get_image() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: get_image $JENKINS_HOME $RPI_ZIP_NAME $RPI_DONWLOAD_URL $RPI_IMAGE_NAME $IMAGE_NAME
|
||
|
||
echo 'Download RaspbianOS'
|
||
echo "$(date) | 1. Download raspbian lite"
|
||
if [ ! -e "$1/$2" ];
|
||
then wget -nv -O $1/$2 $3
|
||
fi
|
||
echo "$(date) | Downloading complete"
|
||
echo 'Unzip image'
|
||
echo "$(date) | 2. Unzip raspbian lite"
|
||
if [ ! -e "$1/$4" ];
|
||
then unzip -uo $1/$2 -d $1
|
||
fi
|
||
echo "$(date) | Unziping complete"
|
||
echo 'Duplicate image'
|
||
cp -f $1/$4 $1/$5
|
||
}
|
||
|
||
resize_fs() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: resize_fs $SIZE $JENKINS_HOME $IMAGE_NAME $DEV_ROOTFS
|
||
|
||
set +e
|
||
|
||
# https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%80%D0%B5%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D0%B9_%D1%84%D0%B0%D0%B9%D0%BB
|
||
|
||
# https://raspberrypi.stackexchange.com/questions/13137/how-can-i-mount-a-raspberry-pi-linux-distro-image
|
||
# fdisk -l 2017-11-29-raspbian-stretch-lite.img
|
||
# https://www.stableit.ru/2011/05/losetup.html
|
||
# -f : losetup сам выбрал loop (минуя занятые)
|
||
# -P : losetup монтирует разделы в образе как отдельные подразделы,
|
||
# например /dev/loop0p1 и /dev/loop0p2
|
||
# --show : печатает имя устройства, например /dev/loop4
|
||
|
||
# http://karelzak.blogspot.ru/2015/05/resize-by-sfdisk.html
|
||
# ", +" : расширяет раздел до размеров образа
|
||
# -N 2 : выбирает раздел 2 для работы
|
||
|
||
echo -e "\033[0;31m\033[1mTruncate image\033[0m\033[0m" \
|
||
&& truncate -s$1 $2/$3 \
|
||
&& echo "Mount loop-image: $2/$3" \
|
||
&& local DEV_IMAGE=$(losetup -Pf $2/$3 --show) \
|
||
&& sleep 0.5 \
|
||
&& echo -e "\033[0;31m\033[1mMount loop-image: $1\033[0m\033[0m" \
|
||
&& echo ", +" | sfdisk -N 2 $DEV_IMAGE \
|
||
&& sleep 0.5 \
|
||
&& echo -e "\033[0;31m\033[1mCheck & repair filesystem after expand partition\033[0m\033[0m" \
|
||
&& e2fsck -fvy $4 \
|
||
&& echo -e "\033[0;31m\033[1mExpand filesystem\033[0m\033[0m" \
|
||
&& resize2fs $4 \
|
||
&& echo -e "\033[0;31m\033[1mUmount loop-image\033[0m\033[0m" \
|
||
&& losetup -d $DEV_IMAGE
|
||
|
||
set -e
|
||
}
|
||
|
||
publish_image() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: publish_image $JENKINS_HOME $IMAGE_NAME $WORKSPACE $CONFIG_FILE $RELEASE_ID $RELEASE_BODY
|
||
|
||
# https://developer.github.com/v3/repos/releases/
|
||
#RELEASE_BODY="### Changelog\n* Add /boot/cmdline.txt net.ifnames=0 https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/\n* Updated cophelper\n* Installed copstat"
|
||
|
||
echo 'Zip image' \
|
||
&& zip $1/$2.zip $1/$2 \
|
||
&& echo 'Upload image' \
|
||
&& local IMAGE_LINK=$($3/image/yadisk.py $1/$4 $1/$2.zip) \
|
||
&& local IMAGE_SIZE=$(du -sh $1/$2.zip | awk '{ print $1 }') \
|
||
&& $3/image/git_release.py $1/$4 $5 $6 $2 $IMAGE_LINK $IMAGE_SIZE
|
||
}
|
||
|
||
publish_image2() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: publish_image $JENKINS_HOME $IMAGE_NAME $WORKSPACE $CONFIG_FILE $RELEASE_ID $RELEASE_BODY
|
||
|
||
# https://developer.github.com/v3/repos/releases/
|
||
#RELEASE_BODY="### Changelog\n* Add /boot/cmdline.txt net.ifnames=0 https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/\n* Updated cophelper\n* Installed copstat"
|
||
|
||
echo 'Zip image' \
|
||
&& zip $1/$2.zip $1/$2 \
|
||
&& echo 'Upload image' \
|
||
&& local IMAGE_LINK=$($3/image/yadisk.py $1/$4 $1/$2.zip) \
|
||
&& local IMAGE_SIZE=$(du -sh $1/$2.zip | awk '{ print $1 }') \
|
||
&& local NEW_RELEASE_BODY="### Download\n* [$2.zip]($IMAGE_LINK) ($IMAGE_SIZE)\n\n$6" \
|
||
&& local DATA="{ \"body\":\"$NEW_RELEASE_BODY\" }" \
|
||
&& curl -d "$(echo $DATA)" -u "LOGIN:PASS" --request PATCH https://api.github.com/repos/ONWER/REPO/releases/$5
|
||
}
|
||
|
||
burn_image() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: burn_image $IMAGE_PATH $MICROSD_DEV
|
||
|
||
echo -e "\033[0;31m\033[1mBurn image\033[0m\033[0m" \
|
||
&& dd if=$1 of=$2 \
|
||
&& echo -e "\033[0;31m\033[1mBurn image finished!\033[0m\033[0m"
|
||
}
|
||
|
||
burn_and_reboot() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: burn_and_reboot $IMAGE_PATH $MICROSD_DEV
|
||
|
||
burn_image $1 $2 \
|
||
&& reboot
|
||
}
|
||
|
||
mount_system() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: mount_system $IMAGE $PREFIX_PATH $DEV_ROOTFS $DEV_BOOT
|
||
|
||
# https://www.stableit.ru/2011/05/losetup.html
|
||
# -f : losetup выбирает незанятое имя устройства, например /dev/loop2
|
||
# -P : losetup монтирует разделы в образе как отдельные подразделы,
|
||
# например /dev/loop0p1 и /dev/loop0p2
|
||
# --show : печатает имя устройства, например /dev/loop4
|
||
|
||
echo -e "\033[0;31m\033[1mMount loop-image: $1\033[0m\033[0m"
|
||
DEV_IMAGE=$(losetup -Pf $1 --show)
|
||
sleep 0.5
|
||
|
||
echo -e "\033[0;31m\033[1mMount dirs $2 & $2/boot\033[0m\033[0m"
|
||
mount $3 $2
|
||
mount $4 $2/boot
|
||
|
||
echo -e "\033[0;31m\033[1mBind system dirs\033[0m\033[0m"
|
||
# https://github.com/debian-pi/raspbian-ua-netinst/issues/314
|
||
echo "Mounting /proc in chroot... "
|
||
if [ ! -d $2/proc ] ; then
|
||
mkdir -p $2/proc
|
||
echo "Created $2/proc"
|
||
fi
|
||
mount -t proc -o nosuid,noexec,nodev proc $2/proc
|
||
echo "OK"
|
||
|
||
echo "Mounting /sys in chroot... "
|
||
if [ ! -d $2/sys ] ; then
|
||
mkdir -p $2/sys
|
||
echo "Created $2/sys"
|
||
fi
|
||
mount -t sysfs -o nosuid,noexec,nodev sysfs $2/sys
|
||
echo "OK"
|
||
|
||
echo "Mounting /dev/ and /dev/pts in chroot... "
|
||
mkdir -p -m 755 $2/dev/pts
|
||
mount -t devtmpfs -o mode=0755,nosuid devtmpfs $2/dev
|
||
mount -t devpts -o gid=5,mode=620 devpts $2/dev/pts
|
||
# mount -t devpts none "$2/dev/pts" -o ptmxmode=0666,newinstance
|
||
# ln -fs "pts/ptmx" "$2/dev/ptmx"
|
||
echo "OK"
|
||
|
||
|
||
# mount -o bind /dev $2/dev
|
||
# mount -t proc proc $2/proc
|
||
# mount -t devpts devpts $2/dev/pts
|
||
|
||
# mount -t proc proc $2/proc
|
||
# mount -t sysfs sys $2/sys
|
||
# mount --bind /dev $2/dev
|
||
|
||
echo -e "\033[0;31m\033[1mCopy DNS records\033[0m\033[0m"
|
||
cp -L /etc/resolv.conf $2/etc/resolv.conf
|
||
|
||
# https://wiki.archlinux.org/index.php/Change_root_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)
|
||
# http://www.unix-lab.org/posts/chroot/
|
||
# https://habrahabr.ru/post/141012/
|
||
# https://losst.ru/vosstanovlenie-grub2
|
||
# http://unixteam.ru/content/virtualizaciya-ili-zapuskaem-prilozhenie-v-chroot-okruzhenii-razmyshleniya
|
||
# http://help.ubuntu.ru/wiki/%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_grub
|
||
echo -e "\033[0;31m\033[1mEnter chroot\033[0m\033[0m"
|
||
chroot $2 /bin/bash
|
||
}
|
||
|
||
mount_system2() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: mount_system2 $IMAGE $PREFIX_PATH $DEV_ROOTFS $DEV_BOOT $EXECUTE_FILE
|
||
|
||
echo -e "\033[0;31m\033[1mMount loop-image: $1\033[0m\033[0m"
|
||
DEV_IMAGE=$(losetup -Pf $1 --show)
|
||
sleep 0.5
|
||
|
||
echo -e "\033[0;31m\033[1mMount dirs $2 & $2/boot\033[0m\033[0m"
|
||
mount $3 $2
|
||
mount $4 $2/boot
|
||
|
||
echo -e "\033[0;31m\033[1mBind system dirs\033[0m\033[0m"
|
||
echo "Mounting /proc in chroot... "
|
||
if [ ! -d $2/proc ] ; then
|
||
mkdir -p $2/proc
|
||
echo "Created $2/proc"
|
||
fi
|
||
mount -t proc -o nosuid,noexec,nodev proc $2/proc
|
||
echo "OK"
|
||
|
||
echo "Mounting /sys in chroot... "
|
||
if [ ! -d $2/sys ] ; then
|
||
mkdir -p $2/sys
|
||
echo "Created $2/sys"
|
||
fi
|
||
mount -t sysfs -o nosuid,noexec,nodev sysfs $2/sys
|
||
echo "OK"
|
||
|
||
echo "Mounting /dev/ and /dev/pts in chroot... "
|
||
mkdir -p -m 755 $2/dev/pts
|
||
mount -t devtmpfs -o mode=0755,nosuid devtmpfs $2/dev
|
||
mount -t devpts -o gid=5,mode=620 devpts $2/dev/pts
|
||
echo "OK"
|
||
|
||
echo -e "\033[0;31m\033[1mCopy DNS records\033[0m\033[0m"
|
||
cp -L /etc/resolv.conf $2/etc/resolv.conf
|
||
|
||
echo -e "\033[0;31m\033[1m$(date) | Enter chroot\033[0m\033[0m"
|
||
chroot $2 /bin/bash -c "$5"
|
||
}
|
||
|
||
umount_system() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: umount_system $PREFIX_PATH
|
||
|
||
echo -e "\033[0;31m\033[1m$(date) | Umount recursive dirs: $1\033[0m\033[0m"
|
||
umount -fR $1
|
||
echo -e "\033[0;31m\033[1m$(date) | Umount loop-image\033[0m\033[0m"
|
||
losetup -d $DEV_IMAGE
|
||
}
|
||
|
||
umount_system2() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: umount_system $PREFIX_PATH
|
||
|
||
echo -e "\033[0;31m\033[1m$(date) | Umount recursive dirs: $1\033[0m\033[0m"
|
||
umount -fR $1
|
||
echo -e "\033[0;31m\033[1m$(date) | Umount loop-image\033[0m\033[0m"
|
||
losetup -D
|
||
}
|
||
|
||
set_config_var() {
|
||
lua - "$1" "$2" "$3" <<EOF > "$3.bak"
|
||
local key=assert(arg[1])
|
||
local value=assert(arg[2])
|
||
local fn=assert(arg[3])
|
||
local file=assert(io.open(fn))
|
||
local made_change=false
|
||
for line in file:lines() do
|
||
if line:match("^#?%s*"..key.."=.*$") then
|
||
line=key.."="..value
|
||
made_change=true
|
||
end
|
||
print(line)
|
||
end
|
||
|
||
if not made_change then
|
||
print(key.."="..value)
|
||
end
|
||
EOF
|
||
mv "$3.bak" "$3"
|
||
}
|
||
|
||
configure_system() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: configure_system $IMAGE $PREFIX_PATH $DEV_ROOTFS $DEV_BOOT
|
||
|
||
local BLACKLIST=/etc/modprobe.d/raspi-blacklist.conf
|
||
local CONFIG=/boot/config.txt
|
||
|
||
BLACKLIST=$2$BLACKLIST
|
||
CONFIG=$2$CONFIG
|
||
|
||
# 1. Примонитровать образ
|
||
|
||
# https://raspberrypi.stackexchange.com/questions/13137/how-can-i-mount-a-raspberry-pi-linux-distro-image
|
||
# mount -v -o offset=48234496 -t ext4 2017-11-29-raspbian-stretch-lite.img $PREFIX_PATH
|
||
# mount -v -o offset=4194304,sizelimit=29360128 -t vfat 2017-11-29-raspbian-stretch-lite.img $PREFIX_PATH/boot
|
||
#
|
||
# fdisk -l 2017-11-29-raspbian-stretch-lite.img
|
||
# https://www.stableit.ru/2011/05/losetup.html
|
||
# -f : losetup сам выбрал loop (минуя занятые)
|
||
# -P : losetup монтирует разделы в образе как отдельные подразделы,
|
||
# например /dev/loop0p1 и /dev/loop0p2
|
||
# --show : печатает имя устройства, например /dev/loop4
|
||
echo -e "\033[0;31m\033[1mMount loop-image: $1\033[0m\033[0m"
|
||
DEV_IMAGE=$(losetup -Pf $1 --show)
|
||
sleep 0.5
|
||
|
||
echo -e "\033[0;31m\033[1mMount dirs $2 & $2/boot\033[0m\033[0m"
|
||
mount $3 $2
|
||
mount $4 $2/boot
|
||
|
||
# 2. Изменить необходимые настройки
|
||
|
||
# 2.1. Включить sshd
|
||
echo -e "\033[0;31m\033[1mTurn on sshd\033[0m\033[0m"
|
||
touch $2/boot/ssh
|
||
|
||
# 2.2. Включить GPIO
|
||
# Включено по умолчанию
|
||
|
||
# 2.3. Включить I2C
|
||
echo -e "\033[0;31m\033[1mTurn on I2C\033[0m\033[0m"
|
||
|
||
set_config_var dtparam=i2c_arm on $CONFIG &&
|
||
if ! [ -e $BLACKLIST ]; then
|
||
touch $BLACKLIST
|
||
fi
|
||
sed $BLACKLIST -i -e "s/^\(blacklist[[:space:]]*i2c[-_]bcm2708\)/#\1/"
|
||
sed $2/etc/modules -i -e "s/^#[[:space:]]*\(i2c[-_]dev\)/\1/"
|
||
if ! grep -q "^i2c[-_]dev" $2/etc/modules; then
|
||
printf "i2c-dev\n" >> $2/etc/modules
|
||
fi
|
||
|
||
# 2.4. Включить SPI
|
||
echo -e "\033[0;31m\033[1mTurn on SPI\033[0m\033[0m"
|
||
|
||
set_config_var dtparam=spi on $CONFIG &&
|
||
if ! [ -e $BLACKLIST ]; then
|
||
touch $BLACKLIST
|
||
fi
|
||
sed $BLACKLIST -i -e "s/^\(blacklist[[:space:]]*spi[-_]bcm2708\)/#\1/"
|
||
|
||
# 2.5. Включить raspicam
|
||
# Включена по умолчанию вроде как
|
||
|
||
# 2.6. Настроить AP wifi
|
||
# 2.7. Настроить сеть на wlan
|
||
# 2.8. Настроить DHCPd на wlan
|
||
|
||
# Отмонтировать образ
|
||
umount_system $2
|
||
}
|
||
|
||
|
||
prepare_fs() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: prepare_fs $IMAGE $SIZE
|
||
|
||
date
|
||
# Удаляем старый образ
|
||
# -f : не выводить ошибки, если файла нет
|
||
rm -f $1
|
||
# Копируем origin образ
|
||
# --progress : Вывод прогресс-бара
|
||
rsync --progress -av $1.orig $1
|
||
expand_image $1 $2G
|
||
date
|
||
}
|
||
|
||
install_docker() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: install_docker $IMAGE $PREFIX_PATH $DEV_ROOTFS $DEV_BOOT
|
||
|
||
# https://askubuntu.com/questions/485567/unexpected-end-of-file
|
||
mount_system $1 $2 $3 $4 << EOF
|
||
#!/bin/bash
|
||
# https://www.raspberrypi.org/blog/docker-comes-to-raspberry-pi/
|
||
curl -sSL https://get.docker.com | sh
|
||
usermod -aG docker pi
|
||
systemctl enable docker
|
||
service docker start
|
||
docker pull smirart/rpi-ros:sshd
|
||
docker run -di --restart unless-stopped -p 192.168.0.121:2202:22 -t smirart/rpi-ros:sshd
|
||
EOF
|
||
umount_system $2
|
||
}
|
||
|
||
test_docker() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: test_docker $IMAGE $PREFIX_PATH $DEV_ROOTFS $DEV_BOOT
|
||
|
||
mount_system $1 $2 $3 $4 << EOF
|
||
#!/bin/bash
|
||
# https://www.raspberrypi.org/blog/docker-comes-to-raspberry-pi/
|
||
service docker start
|
||
sleep 1
|
||
docker images
|
||
docker ps -a
|
||
EOF
|
||
umount_system $2
|
||
}
|
||
|
||
enter() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: enter $IMAGE $PREFIX_PATH $DEV_ROOTFS $DEV_BOOT
|
||
|
||
mount_system $1 $2 $3 $4
|
||
umount_system $2
|
||
}
|
||
|
||
execute() {
|
||
|
||
# STATIC
|
||
# TEMPLATE: execute $IMAGE $PREFIX_PATH $DEV_ROOTFS $DEV_BOOT $EXECUTE_FILE
|
||
|
||
mount_system2 $1 $2 $3 $4 "$(cat $5)"
|
||
umount_system2 $2
|
||
}
|
||
|
||
|
||
# очистить history
|
||
# https://askubuntu.com/questions/191999/how-to-clear-bash-history-completely
|
||
# cat /dev/null > ~/.bash_history && history -c && exit
|
||
#
|
||
# screen in chroot
|
||
# getty tty
|
||
# https://stackoverflow.com/questions/19104894/screen-must-be-connected-to-a-terminal/25646444
|
||
#
|
||
# docker in chroot
|
||
# service docker start
|
||
# https://forums.docker.com/t/cannot-connect-to-the-docker-daemon-is-the-docker-daemon-running-on-this-host/8925/17
|
||
|
||
|
||
if [ $(whoami) != "root" ];
|
||
then echo "" \
|
||
&& echo "********************************************************************" \
|
||
&& echo "******************** This should be run as root ********************" \
|
||
&& echo "********************************************************************" \
|
||
&& echo "" \
|
||
&& exit 1
|
||
fi
|
||
|
||
|
||
echo "\$#: $#"
|
||
echo "\$1: $1"
|
||
echo "\$2: $2"
|
||
echo "\$3: $3"
|
||
echo "\$4: $4"
|
||
echo "\$5: $5"
|
||
echo "\$6: $6"
|
||
|
||
|
||
# test_docker
|
||
# install_docker
|
||
# prepare_fs
|
||
# configure_system
|
||
|
||
case "$1" in
|
||
enter) # enter $IMAGE $PREFIX_PATH $DEV_ROOTFS $DEV_BOOT
|
||
enter $2 $3 $4 $5;;
|
||
|
||
get_image) # get_image $JENKINS_HOME $RPI_ZIP_NAME $RPI_DONWLOAD_URL $RPI_IMAGE_NAME $IMAGE_NAME
|
||
get_image $2 $3 $4 $5 $6;;
|
||
|
||
resize_fs) # resize_fs $SIZE $JENKINS_HOME $IMAGE_NAME $DEV_ROOTFS
|
||
resize_fs $2 $3 $4 $5;;
|
||
|
||
publish_image) # publish_image $JENKINS_HOME $IMAGE_NAME $WORKSPACE $CONFIG_FILE $RELEASE_ID $RELEASE_BODY
|
||
publish_image $2 $3 $4 $5 $6 $7;;
|
||
|
||
execute) # execute $IMAGE $PREFIX_PATH $DEV_ROOTFS $DEV_BOOT $EXECUTE_FILE
|
||
execute $2 $3 $4 $5 $6;;
|
||
|
||
*)
|
||
echo "Enter one of: enter, get_image, resize_fs, publish_image, execute";;
|
||
esac
|