makerbase-auto-fresh.service files

Contents:


/usr/lib/systemd/system/makerbase-auto-fresh.service

[Unit]
Description=MKS-auto-refresh
After=network.target
Wants=udev.target

[Install]
WantedBy=multi-user.target

[Service]
Type=oneshot
ExecStart=/root/auto_refresh

/root/auto_refresh.cpp

source code for “/root/auto_refresh” (no makefile)

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <string.h>
#include <dirent.h>

#define MAX_PATH_LEN 1024
#define MAX_CMD_LEN 2048

#define UPDATE_STATE_PATH	"/home/mks/.update_state"
#define UPDATE_IDLE	0
#define UPDATE_ING	1
#define MAX_COMMAND_LENGTH 100
void mark_update_state(int state)
{
	static int cur_state = UPDATE_IDLE;
	char command[100];  // 定义一个足够大的字符数组来存储完整的命令
	if(cur_state == state)
		return;
	if(state == UPDATE_IDLE)
	{
		snprintf(command, sizeof(command), "echo \"idle\" > %s", UPDATE_STATE_PATH);
	}
	else if(state == UPDATE_ING)
	{
		snprintf(command, sizeof(command), "echo \"updating\" > %s", UPDATE_STATE_PATH);
	}
	system(command);
	cur_state = state;
	system("sync");
    snprintf(command, MAX_COMMAND_LENGTH, "pgrep KlipperScreen > /dev/null");
    int result = system(command);
	if (result == 0) {
        printf("KlipperScreen is running, it will be restart...\n");
        snprintf(command, MAX_COMMAND_LENGTH, "systemctl restart KlipperScreen.service");
        system(command);
    }
}
int install_system_debs() {
    char path[MAX_PATH_LEN]; // ���·�����Ļ�����
    char cmd[MAX_CMD_LEN]; // �������Ļ�����
    int find_debs = 0;

    // ��·��
    DIR* dir = opendir("/root/system_deb/");
    if (dir == NULL) {
        printf("Failed to open directory.\n");
        return 0;
    }

    // ����Ŀ¼�е��ļ�
    struct dirent* dirent;
    while ((dirent = readdir(dir)) != NULL) {
        // ����ļ����� .deb ��β
        if (strcmp(dirent->d_name + strlen(dirent->d_name) - 4, ".deb") == 0) {
            mark_update_state(UPDATE_ING);
            // ��������·����
            snprintf(path, MAX_PATH_LEN, "/root/system_deb/%s", dirent->d_name);

            // ���찲װ����
            snprintf(cmd, MAX_CMD_LEN, "dpkg -i %s", path);

            // ִ�а�װ����
            int ret = system(cmd);
            if (ret != 0) {
                printf("Failed to install package %s.\n", path);
            } else {
                // ɾ����Ӧ��deb�ļ�
                remove(path);
            }
            find_debs = 1;
        }
    }

    // �ر�·��
    closedir(dir);
	if(find_debs)
		mark_update_state(UPDATE_IDLE);

    return find_debs;
}


int main(int argc, char** argv) {


    while(1)
    {
		sleep(2);
		
		if(install_system_debs())
		{
		  system("sync");
		  system("reboot");
		}
                if(access("/root/bootsplash.armbian", F_OK) == 0)
		{
			system("mv /root/bootsplash.armbian /usr/lib/firmware/ -f;update-initramfs -u");
			sleep(2);
			system("sync");
			system("reboot");
                        while(1)
			{	
				sleep(2);				
			}
		}
		
		if (access("/dev/sda", F_OK) == 0)
		{
			if (access("/dev/sda1", F_OK) == 0)
			{
				if (access("/home/mks/printer_data/gcodes/USB", F_OK) != 0)
				{
					system("/usr/bin/systemctl --no-block restart makerbase-automount@sda1.service");
				
				   continue;
				}
			}
				 
		}
		

		if(access("/home/mks/printer_data/gcodes/USB/armbian-update.deb", F_OK) == 0)
		{
			//find the update deb file
			if (access("/home/mks/printer_data/gcodes/USB/factory_mode", F_OK) == 0)
			{
				system("cp /home/mks/printer_data/gcodes/USB/armbian-update.deb /home/mks/armbian-update.deb -f");
			}
			else
			{
				system("mv /home/mks/printer_data/gcodes/USB/armbian-update.deb /home/mks/armbian-update.deb -f");
			}
		}
		
		if(access("/home/mks/armbian-update.deb", F_OK) == 0)
		{
			mark_update_state(UPDATE_ING);
			sleep(1);
			system("dpkg -i /home/mks/armbian-update.deb");			
			install_system_debs();
			mark_update_state(UPDATE_IDLE);
			system("sync");
			system("dpkg-deb --info /home/mks/armbian-update.deb | grep \"Version:\" > /home/mks/.DebVersion");
			system("rm -rf /home/mks/armbian-update.deb");
			system("reboot");
		}
   
    }
   
    return 0;
}

Back to start