Change swap default to 2GB; Swap size is configurable

This commit is contained in:
Taylor Helsper 2020-05-22 22:18:50 -05:00
parent 56a8845cc3
commit 57cc58c852
5 changed files with 111 additions and 11 deletions

View File

@ -13,7 +13,7 @@
# set size to absolute value, leaving empty (default) then uses computed value
# you most likely don't want this, unless you have an special disk situation
#######################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################CONF_SWAPSIZE=100100
#CONF_SWAPSIZE=100100
# set size to computed value, this times RAM size, dynamically adapts,
# guarantees that there is enough swap without wasting disk space on excess
@ -23,5 +23,9 @@
# can be set to empty for no limit, but beware of filled partitions!
# this is/was a (outdated?) 32bit kernel limit (in MBytes), do not overrun it
# but is also sensible on 64bit to prevent filling /var or even / partition
CONF_MAXSWAP=1024
#CONF_MAXSWAP=8000
# myNode Settings
CONF_SWAPSIZE=2048
CONF_MAXSWAP=8000
CONF_SWAPFILE=/mnt/hdd/swapfile

View File

@ -74,7 +74,7 @@ fi
# Verify we are in a clean state
if [ $IS_RASPI -eq 1 ] || [ $IS_ROCKPRO64 -eq 1 ]; then
if [ $IS_RASPI -eq 1 ] || [ $IS_ROCK64 -eq 1 ] || [ $IS_ROCKPRO64 -eq 1 ]; then
dphys-swapfile swapoff || true
dphys-swapfile uninstall || true
fi
@ -321,14 +321,23 @@ chown bitcoin:bitcoin /mnt/hdd/mynode/
# Setup swap on new HDD
if [ $IS_RASPI -eq 1 ] || [ $IS_ROCKPRO64 -eq 1 ]; then
if [ ! -f /mnt/hdd/swapfile ]; then
dd if=/dev/zero of=/mnt/hdd/swapfile count=1000 bs=1MiB
chmod 600 /mnt/hdd/swapfile
if [ ! -f /mnt/hdd/mynode/settings/swap_size ]; then
# Set defaults
touch /mnt/hdd/mynode/settings/swap_size
echo "2" > /mnt/hdd/mynode/settings/swap_size
sed -i "s|CONF_SWAPSIZE=.*|CONF_SWAPSIZE=2048|" /etc/dphys-swapfile
else
# Update swap config file in case upgrade overwrote file
SWAP=$(cat /mnt/hdd/mynode/settings/swap_size)
SWAP_MB=$(($SWAP * 1024))
sed -i "s|CONF_SWAPSIZE=.*|CONF_SWAPSIZE=$SWAP_MB|" /etc/dphys-swapfile
fi
if [ $IS_RASPI -eq 1 ] || [ $IS_ROCK64 -eq 1 ] || [ $IS_ROCKPRO64 -eq 1 ]; then
SWAP=$(cat /mnt/hdd/mynode/settings/swap_size)
if [ "$SWAP" -ne "0" ]; then
dphys-swapfile install
dphys-swapfile swapon
fi
mkswap /mnt/hdd/swapfile
dphys-swapfile swapon
fi

View File

@ -9,6 +9,27 @@ import subprocess
# Globals
local_ip = "unknown"
#==================================
# Utilities
#==================================
def get_file_contents(filename):
contents = "UNKNOWN"
try:
with open(filename, "r") as f:
contents = f.read().strip()
except:
contents = "ERROR"
return contents
def set_file_contents(filename, data):
try:
with open(filename, "w") as f:
f.write(data)
os.system("sync")
return True
except:
return False
return False
#==================================
# Manage Device
@ -251,6 +272,13 @@ def is_mount_read_only(mnt):
return 'ro' in flags
return False
def set_swap_size(size):
size_mb = int(size) * 1024
os.system("sed -i 's|CONF_SWAPSIZE=.*|CONF_SWAPSIZE={}|' /etc/dphys-swapfile".format(size_mb))
return set_file_contents("/mnt/hdd/mynode/settings/swap_size", size)
def get_swap_size():
return get_file_contents("/mnt/hdd/mynode/settings/swap_size")
#==================================
# Service Status, Enabled, Logs, etc...

View File

@ -134,6 +134,7 @@ def page_settings():
"serial_number": serial_number,
"device_type": device_type,
"device_ram": device_ram,
"swap_size": get_swap_size(),
"product_key": product_key,
"product_key_skipped": pk_skipped,
"product_key_error": pk_error,
@ -757,6 +758,8 @@ def ping_page():
@mynode_settings.route("/settings/toggle-darkmode")
def toggle_darkmode_page():
check_logged_in()
if is_darkmode_enabled():
disable_darkmode()
else:
@ -765,8 +768,32 @@ def toggle_darkmode_page():
@mynode_settings.route("/settings/toggle-netdata")
def toggle_netdata_page():
check_logged_in()
if is_netdata_enabled():
disable_netdata()
else:
enable_netdata()
return redirect("/settings")
@mynode_settings.route("/settings/modify-swap")
def modify_swap_page():
check_logged_in()
check_and_mark_reboot_action("modify_swap")
size = request.args.get('size')
set_swap_size(size)
# Trigger reboot
t = Timer(1.0, reboot_device)
t.start()
# Display wait page
templateData = {
"title": "myNode Reboot",
"header_text": "Restarting",
"subheader_text": "This will take several minutes...",
"ui_settings": read_ui_settings()
}
return render_template('reboot.html', **templateData)

View File

@ -319,6 +319,20 @@
window.location.href='/settings/reinstall-app?app='+reinstall_app_choice
});
var swap_choice="";
$("#swap_size").selectmenu( {
change: function( event, data ) {
swap_choice = data.item.value;
$("#swap_button").button("enable");
}
});
$("#swap_button").button({
disabled: true
});
$("#swap_button").on("click", function() {
window.location.href='/settings/modify-swap?size='+swap_choice
});
$('#btc_lnd_tor_checkbox').change(function () {
$("#btc_lnd_tor").show();
});
@ -807,6 +821,24 @@
<div class="divider"></div>
<div class="settings_block_subheader">Swap</div>
Devices can use space on the external drive as additional RAM. The default is to use 2GB of space on the drive as additional memory, but this can be changed.
<br/><br/>
Modifying the amount of swap can affect overall performance. Saving will reboot the device.
<br/><br/>
<select name="swap_size" id="swap_size">
<option value="0" {% if swap_size == "0" %}selected="selected"{% endif %}>No Swap</option>
<option value="1" {% if swap_size == "1" %}selected="selected"{% endif %}>1 GB</option>
<option value="2" {% if swap_size == "2" %}selected="selected"{% endif %}>2 GB</option>
<option value="3" {% if swap_size == "3" %}selected="selected"{% endif %}>3 GB</option>
<option value="4" {% if swap_size == "4" %}selected="selected"{% endif %}>4 GB</option>
</select>
<button id="swap_button">Save</button>
<div class="divider"></div>
<div class="settings_block_subheader">Factory Reset</div>
This will factory reset your mynode and all storage will be completely reset.
<br/>