mirror of
				https://github.com/j-a-n/raspberrymatic-addon-rmupdate.git
				synced 2023-10-10 11:37:40 +00:00 
			
		
		
		
	Show current user device in system info
This commit is contained in:
		| @@ -391,6 +391,20 @@ proc ::rmupdate::get_system_device {} { | ||||
| 	return "/dev/mmcblk0" | ||||
| } | ||||
|  | ||||
| proc ::rmupdate::get_mounted_device {mountpoint} { | ||||
| 	set fd [open /etc/mtab r] | ||||
| 	set data [read $fd] | ||||
| 	close $fd | ||||
| 	foreach d [split $data "\n"] { | ||||
| 		if { [regexp {^(\S+)\s+(\S+)\s+} $d match device mp] } { | ||||
| 			if {$mp == $mountpoint} { | ||||
| 				return $device | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| proc ::rmupdate::get_current_root_partition_number {} { | ||||
| 	set cmdline "/proc/cmdline" | ||||
| 	set fd [open $cmdline r] | ||||
| @@ -575,11 +589,11 @@ proc ::rmupdate::update_filesystems {image {dryrun 0}} { | ||||
| 		if [catch { | ||||
| 			set out "" | ||||
| 			if {$dryrun} { | ||||
| 				write_log 4 "rsync --dry-run --progress --archive --delete ${mnt_img}/ ${mnt_s}" | ||||
| 				set out [exec rsync --dry-run --progress --archive --delete ${mnt_img} ${mnt_s}] | ||||
| 				write_log 4 "rsync --dry-run --progress --archive --one-file-system --delete ${mnt_img}/ ${mnt_s}" | ||||
| 				set out [exec rsync --dry-run --progress --archive --one-file-system --delete ${mnt_img} ${mnt_s}] | ||||
| 			} else { | ||||
| 				write_log 4 "rsync --progress --archive --delete ${mnt_img}/ ${mnt_s}" | ||||
| 				set out [exec rsync --progress --archive --delete ${mnt_img}/ ${mnt_s}] | ||||
| 				write_log 4 "rsync --progress --archive --one-file-system --delete ${mnt_img}/ ${mnt_s}" | ||||
| 				set out [exec rsync --progress --archive --one-file-system --delete ${mnt_img}/ ${mnt_s}] | ||||
| 			} | ||||
| 			write_log 4 $out | ||||
| 		} err] { | ||||
| @@ -621,50 +635,69 @@ proc ::rmupdate::move_userfs_to_device {target_device {sync_data 0} {repartition | ||||
| 		error [i18n "Target device does not exist."] | ||||
| 	} | ||||
| 	 | ||||
| 	set source_device [get_system_device] | ||||
| 	set source_partition_device [get_mounted_device "/usr/local"] | ||||
| 	set source_device [string range $source_partition_device 0 end-1] | ||||
| 	if { [regexp {mmcblk} $source_partition_device match] } { | ||||
| 		set source_device [string range $source_partition_device 0 end-2] | ||||
| 	} | ||||
| 	 | ||||
| 	if { $source_device == ""} { | ||||
| 		error [i18n "Failed to find source device for /usr/local."] | ||||
| 	} | ||||
| 	if { $source_device == $target_device} { | ||||
| 		error [i18n "Source and target are the same device."] | ||||
| 	} | ||||
| 	 | ||||
| 	set partition 0 | ||||
| 	set partition_number 0 | ||||
| 	if {$repartition == 1} { | ||||
| 		 | ||||
| 		set exitcode [catch { | ||||
| 			exec /usr/sbin/parted --script ${target_device} \ | ||||
| 			mklabel msdos \ | ||||
| 			mkpart primary ext4 0% 100% | ||||
| 		} output] | ||||
| 		if { $exitcode != 0 && $exitcode != 1 } { | ||||
| 			error $output | ||||
| 		} | ||||
| 		set partition_number 1 | ||||
| 	} else { | ||||
| 		for {set p 1} {$p <= 4} {incr p} { | ||||
| 			set filesystem_label [get_filesystem_label $target_device $p] | ||||
| 			if {[regexp "^.*userfs$" $filesystem_label match]} { | ||||
| 				set partition $p | ||||
| 		array set partitions [get_partitions $target_device] | ||||
| 		set keys [array names partitions] | ||||
| 		foreach key $keys { | ||||
| 			regexp {^(.+)::([^:]+)$} $key match id opt | ||||
| 			if {$opt == "filesystem_label"} { | ||||
| 				if {[regexp "^.*userfs$" $partitions($key) match]} { | ||||
| 					set partition_number $partitions(${id}::partition) | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if {$partition_number == 0} { | ||||
| 			error [format [i18n "Failed to find userfs partition on %s, and repartition is not desired."] $target_device] | ||||
| 		} | ||||
| 	} | ||||
| 	set target_partition_device [get_partition_device $target_device $partition_number] | ||||
| 	 | ||||
| 	if {$sync_data == 1} { | ||||
| 		set exitcode [catch { exec /sbin/mkfs.ext4 -F -L userfs $target_partition_device } output] | ||||
| 		if { $exitcode != 0 && $exitcode != 1 } { | ||||
| 			error $output | ||||
| 		} | ||||
| 		# Write ReGaHSS state to disk | ||||
| 		load tclrega.so | ||||
| 		rega system.Save() | ||||
| 		 | ||||
| 		file mkdir $mnt_sys | ||||
| 		exec /bin/mount $target_partition_device $mnt_sys | ||||
| 		#set shell_script "cd /usr/local; tar -c . | (cd $mnt_sys; tar -xv)" | ||||
| 		#set exitcode [catch { exec /bin/sh -c $shell_script } output] | ||||
| 		set out [exec rsync --progress --archive --one-file-system --delete /usr/local/ ${mnt_sys}] | ||||
| 		exec /bin/umount $mnt_sys | ||||
| 		if { $exitcode != 0 && $exitcode != 1 } { | ||||
| 			error $output | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	set exitcode [catch { | ||||
| 		exec /usr/sbin/parted --script ${target_device} \ | ||||
| 		mklabel msdos \ | ||||
| 		mkpart primary ext4 ${start1}B 100% | ||||
| 	} output] | ||||
| 	if { $exitcode != 0 && $exitcode != 1 } { | ||||
| 		error $output | ||||
| 	} | ||||
| 	 | ||||
| 	set exitcode [catch { exec /sbin/mkfs.ext4 -F -L userfs [get_partition_device $target_device 1] } output] | ||||
| 	if { $exitcode != 0 && $exitcode != 1 } { | ||||
| 		error $output | ||||
| 	} | ||||
| 	 | ||||
| 	# Write ReGaHSS state to disk | ||||
| 	load tclrega.so | ||||
| 	rega system.Save() | ||||
| 	 | ||||
| 	exec /bin/mount [get_partition_device $target_device 1] $mnt_sys | ||||
| 	set shell_script "cd /usr/local; tar -c . | (cd $mnt_sys; tar -xv)" | ||||
| 	set exitcode [catch { exec /bin/sh -c $shell_script } output] | ||||
| 	exec /bin/umount $mnt_sys | ||||
| 	if { $exitcode != 0 && $exitcode != 1 } { | ||||
| 		error $output | ||||
| 	} | ||||
| 	 | ||||
| 	catch { exec tune2fs -L 0userfs [get_partition_device $source_device 4] } | ||||
| 	catch { exec tune2fs -L 0userfs $source_partition_device } | ||||
| 	catch { exec tune2fs -L userfs $target_partition_device } | ||||
| } | ||||
|  | ||||
| proc ::rmupdate::clone_system {target_device {activate_clone 0}} { | ||||
| @@ -898,7 +931,7 @@ proc ::rmupdate::download_firmware {version} { | ||||
| 	} | ||||
| 	exec /usr/bin/unzip "${archive_file}" "${img_file}" -o -d "${img_dir}" 2>/dev/null | ||||
| 	set img_file "${img_dir}/${img_file}" | ||||
| 	puts "${img_file} ${image_file}" | ||||
| 	#puts "${img_file} ${image_file}" | ||||
| 	if {$img_file != $image_file} { | ||||
| 		file rename $img_file $image_file | ||||
| 	} | ||||
| @@ -1416,3 +1449,4 @@ proc ::rmupdate::wlan_disconnect {} { | ||||
| #rmupdate::clone_system /dev/sda 1 | ||||
| #puts [rmupdate::get_partitions] | ||||
| #puts [array_to_json [rmupdate::get_partitions]] | ||||
| #puts [rmupdate::move_userfs_to_device /dev/sda 1 0] | ||||
|   | ||||
| @@ -298,7 +298,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 				$("#system-info").empty(); | ||||
| 				$("#system-info").append( | ||||
| 					$('<div class="item">').html(i18next.t('system_type', {'system_type': data.system_type})), | ||||
| 					$('<div class="item">').html(i18next.t('current_root_partiton', {'root_partition': data.root_partition})) | ||||
| 					$('<div class="item">').html(i18next.t('current_root_partiton', {'root_partition': data.root_partition})), | ||||
| 					$('<div class="item">').html(i18next.t('current_user_partiton', {'user_partition': data.user_partition})) | ||||
| 				); | ||||
| 			}); | ||||
| 		} | ||||
| @@ -491,6 +492,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 							title: 'System update', | ||||
| 							system_info: 'System information', | ||||
| 							current_root_partiton: 'Current root partition: {{root_partition}}', | ||||
| 							current_user_partiton: 'Current user partition: {{user_partition}}', | ||||
| 							system_type: 'System type: {{system_type}}', | ||||
| 							reboot_system: 'Reboot system', | ||||
| 							shutdown_system: 'Shutdown system', | ||||
| @@ -552,6 +554,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| 							title: 'System-Aktualisierung', | ||||
| 							system_info: 'System-Informationen', | ||||
| 							current_root_partiton: 'Aktuelle Root-Partition: {{root_partition}}', | ||||
| 							current_user_partiton: 'Aktuelle User-Partition: {{user_partition}}', | ||||
| 							system_type: 'System-Typ: {{system_type}}', | ||||
| 							reboot_system: 'System neu starten', | ||||
| 							shutdown_system: 'System herunterfahren', | ||||
|   | ||||
| @@ -55,7 +55,8 @@ proc process {} { | ||||
| 		} elseif {[lindex $path 1] == "get_system_info"} { | ||||
| 			set system_type [rmupdate::get_rpi_version] | ||||
| 			set root_partition [rmupdate::get_partition_device [rmupdate::get_system_device] [rmupdate::get_current_root_partition_number]] | ||||
| 			return "\{\"system_type\":\"${system_type}\",\"root_partition\":\"${root_partition}\"\}" | ||||
| 			set user_partition [rmupdate::get_mounted_device "/usr/local"] | ||||
| 			return "\{\"system_type\":\"${system_type}\",\"root_partition\":\"${root_partition}\",\"user_partition\":\"${user_partition}\"\}" | ||||
| 		} elseif {[lindex $path 1] == "system_reboot"} { | ||||
| 			exec /sbin/reboot | ||||
| 			return "\"reboot initiated\"" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user