回忆碎片

看见电视里说上海推进垃圾分类,想起以前小区门口会有一个收买纸皮箱、旧报纸的人,我们家的旧报纸扎一起就会卖给她。好像已经很久没有见过她了。
又想起以前每天的新报纸都会放在沙发上,正对电视机的位置。

nextcloud-snap转成from-source的nextcloud

参考:
* Migrating from nextcloud snap to Nextcloud server
* 每天一个linux命令(60):scp命令
* Setup NextCloud on Ubuntu 18.04 LTS with Apache2, MariaDB and PHP 7.1 Support

前提

一台装了nexcloud-snap的服务器A;一台有足够空间装下前者保存的所有文档的服务器B。

导出备份

导出数据库

在A上执行

nextcloud.mysqldump > my-old-nextcloud.sql

导出数据库。然后scp把这个文件发到B。

备份文件

nextcloud-snap的文件在

/var/snap/nextcloud/common/nextcloud/data/

里,所以用scp把这个文件夹传输到B。scp的语法:

scp -r local_folder [email protected]_ip:remote_folder  

装nextcloud

环境准备

重装A的系统,用lnmp一键包装lamp,数据库用MariaDB,PHP选7以上。然后lnmp vhost add添加原来的域名,但是不新建数据库。

接下来创建nextcloud用的数据库:

mysql -u root -p
CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'yourpassword';
GRANT ALL ON nextcloud.* TO 'nextclouduser'@'localhost' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

然后从B把数据库备份scp回来,并且导入:

mysql -u root -p nextcloud < my-old-nextcloud.sql

部署nextcloud

nextcloud的最新release在这里看,一般来说下载链接应该是latest.zip。喜欢在哪个目录保存这个包没所谓,wget下来:

wget https://download.nextcloud.com/server/releases/latest.zip

unzip之后把nextcloud目录里的所有东西搬到/home/wwwroot/域名里面,记得把隐藏文件比如.htaccess带上。然后chown改一下wwwroot的所有者信息。

恢复备份

从B那里把备份的文件夹scp到网站域名下面,和nextcloud其他的文件同级,然后chown恢复一下所有者信息。

然后就可以输入网站域名打开了。一上来可能会让你新建一个管理员帐号,同时下面可以选用什么数据库,记得选MariaDB,输入对应的帐号密码和nextcloud数据库名字。管理员帐号的名字不能和迁移之前的那个一样。

因为之前导入了数据库的备份,所以可能会什么都输好了但是爆炸了,这样的话就要重新设置一次nextclouduser的密码了:

select host,user,password from mysql.user where user='nextclouduser'

set password for 'nextclouduser'@'localhost'=password('密码');

flush privileges;
exit;

就没问题了。

后遗症

  • 之前登录的所有客户端都要重新登录
  • nextcloud-snap上的app数据不会丢失但是需要从官方库重新安装一次
  • iOS、Android的客户端会疯狂尝试登录,然后被服务器屏蔽IP 30秒,所以先退出客户端的登录,然后等半分钟再重新授权就好了。

今日感想

突如其来的,星期六好多人宣布脱单了。柳絮纷飞的季节里,大家都心动了呢。可是如何让不开心的人不会因为与气氛格格不入而消沉呢,怎么做到让别人为别人获得幸福而开心呢。人可能只能改变自己。人只能自己拯救自己呢。


可是今天的我只是浑浑噩噩地答了三份不会及格的试卷,因为早就知道会加重到今天这个地步的感冒而再次就医。也就做了这两件事而已。

今日编程感想

原来一直用C写的温控,但是想实现的很多功能都做不到——主要是C学得一点毛皮就开始写——但是习惯了Java想要什么功能就有什么包,以及成熟的IDE(好吧就是我智障总是写bug),所以决定改写成Java版本的。但是之前一直习惯了C和Linux的紧密相连,思路也是shell的思路,所以在Java里面也下意识想要用Process类的exec()来执行echo命令——风扇控制、频率限制都是通过写入文件来实现的。实际上因为exec()并不是一个shell,所以这样做是不行的。要想写入文件,还是要通过正式的FileWriter等类来实现。

现在剩下的问题是怎么在IDE里实现用root权限测试程序,不然每次都要去terminal里sudo真是很烦恼。

参考了:
Java FileWriter类
Java FileReader类
CSDN | Java将字符串写入文件与将文件内容读取到字符串
Techie Delight | Convert char array to String in Java
CSDN | intellij idea 导出可执行jar

import java.io.*;

import static java.lang.Thread.sleep;

public class Thermal {
    private static int[] tempSteps = {48, 50, 55, 60, 70, 80, 84, 90};
    private static Boolean freqLimitOn = false;

    private static int temperatureReader() throws IOException {
        char[] temp = new char[2];
        FileReader reader0 = new FileReader(new File("/sys/class/thermal/thermal_zone0/temp"));
        FileReader reader1 = new FileReader(new File("/sys/class/thermal/thermal_zone1/temp"));

        reader0.read(temp);
        int temp0 = Integer.parseInt(String.valueOf(temp));
        reader1.read(temp);
        int temp1 = Integer.parseInt(String.valueOf(temp));

        return ((temp0 >= temp1) ? temp0 : temp1);

    }

    private void fancontroller(int level) throws IOException {
        FileWriter fw = new FileWriter("/proc/acpi/ibm/fan", false);
        fw.write("level " + level);
        fw.flush();
    }

    private void levelJudge(int temperature) throws IOException {
        for (int i = tempSteps.length - 1; i >= 0; i--) {
            if (temperature >= tempSteps[i]) {
                fancontroller(i);
                break;
            }

        }
    }

    private static void freqLimitSetter(long freq) throws IOException {
        FileWriter fw;
        String filepath;
        for (int i = 0; i <= 7; i++) {
            filepath = String.format("/sys/devices/system/cpu/cpufreq/policy%d/scaling_max_freq", i);
            fw = new FileWriter(filepath, false);
            fw.write("" + freq);
            fw.flush();
            fw.close();
        }
    }

    private void freqthrottle() throws IOException {


        if ((temperatureReader() > 84) && !freqLimitOn) {
            freqLimitSetter(2100000);
            freqLimitOn = true;
            System.out.println("limited cpu freq");
        } else if (freqLimitOn) {
            freqLimitSetter(3500000);
            System.out.println("unlimited cpu freq");
        }


    }


    public static void main(String[] args) {
        Thermal thermal = new Thermal();
        try {
            while (true) {
                thermal.levelJudge(temperatureReader());
                thermal.freqthrottle();
                sleep(5000);
            }

        } catch (InterruptedException | IOException e) {
            e.printStackTrace();
        }

    }

}

 

今日琐碎

今天早上的计量课因为想到会计学快要考试了,所以选择了在宿舍看书。就是翘课。所以会计学了收入和所有者权益两章,今晚可能看不完费用了。


出门的时候还有电,回来就停电了,还越来越过分。本来只是所有房间没电,后来连门禁和水泵都断电了。生活没有电真是很不方便呢。


下午的体育课直接考一千米。本来中午拿了咖啡粉准备泡咖啡,结果没电只能冲点速溶来替代了。上道之前就已经很紧张了,起跑的时候更是倒数。毕竟是考试,导致呼吸节奏已经非常难配合了。但是一开始跑得慢,到最后一百多米发现自己力气还够,所以开始加速冲刺,成功挽救到及格。

结果就是躺床上休息了一个小时才恢复过来。

醒过来之后宿舍来电了,刚好泡一壶咖啡,感觉和在家里喝的一样开心呢。

今日琐碎

没有什么特别的事情发生。


和妈妈讨论了一番之后觉得,即使考不过也要努力学,做到问心无愧才行。同时的话主课也是不能丢的,所以要挤时间来尽力学了。


后天考一千米。体力已经恢复到能不丢人的地步了,但是及格就是妄想了。所以尽力吧。