tinode部署,使用

下载相关文件

从github上下载相关的包,我用的是:tinode-mysql.linux-amd64.tar.gz

MySQL数据库

版本要求: `

MySQL 5.7 or above is required`

查看版本:

mysql> select version();
+-----------------------------+
| version()                   |
+-----------------------------+
| 5.7.28-0ubuntu0.18.04.4-log |
+-----------------------------+
1 row in set (0.00 sec)

启动

数据库配置更改

  1. 配置文件: tinode.conf:
  2. MySQL的:
    "dsn": "root:数据库密码@tcp(localhost)/tinode?parseTime=true&collation=utf8mb4_unicode_ci"
  3. Mongodb:
    // “replica_set”: “rs0”

设置邮件服务器

tinode.conf:

“smtp_server”: “smtp.example.com”,

如果不设置这个的话,最开始是注册不了新用户的,不过可以用data.json里的默认账户

设置使用sina的邮箱做smtp
  1. 登陆sina开启smtp,然后会有一个授权码,这个对应tinode.conf的sender_password 字段
  2. smtp_server字段: smtp.sina.com
  3. loginsender要一样,就是授权码对应的那个邮箱,要不然sina的邮箱要报553错误
  4. 发送成功的邮件截图:
    在这里插入图片描述

初始化数据库

λ init-db.exe -config=./tinode.conf -data=./data.json
2020/11/18 16:19:53 Database  -1
2020/11/18 16:19:53 Failed to init DB adapter: store: db adapter is not specified. Please set `store_config.use_adapter` in `tinode.conf`

./init-db -config=./tinode.conf -data=./data.json

启动程序

./tinode -config=./tinode.conf -static_data=static

如果要后台运行

要nohup & 之后立即加个exit
https://github.com/tinode/chat/blob/master/INSTALL.md

Specific note for nohup users: an exit must be issued immediately after nohup call to close the foreground session cleanly:

nohup ./tinode -config=./tinode.conf -static_data=static & exit

亲测,如果没有exit,用了nohup过一段时间也会断开

登陆

  1. 如果上面一部设置了有效的smtp服务器,是可以注册新用户并登陆的
  2. 如果没有,就用data.json里的默认账号(username字段)和密码(passhash字段)

添加好友

  1. basic:用户名, basic:,是要自己输入的, 直接输入用户名是找不到的
  2. email:邮箱, email:,是要自己输入的, 直接输入邮箱是找不到的
  3. 直接userid, 直接输入即可
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是对vx6中mkfs.c代码的注释: ``` /* * mkfs.c - file system initialization program */ #include "param.h" #include "buf.h" #include "inode.h" #include "filsys.h" #define NINOBLK (BSIZE/sizeof(struct dinode)) #define NDIRECT (BSIZE/sizeof(struct direct)) struct filsys sblock; /* the file system super block */ int fmod = 0; /* is the file system already modified? */ int fso, fsi; /* file system device file descriptors */ unsigned int fmax; /* number of blocks in file system */ unsigned char *fbuf; /* buffer for file system super block */ /* * main - file system initialization program */ main(argc, argv) int argc; char *argv[]; { register struct dinode *ip; struct direct dp; int n, i, j; daddr_t bn; char filename[50]; /* Open file system device file */ if(argc < 2) { printf("Usage: mkfs filsys\n"); exit(1); } fso = open(argv[1], 1); if(fso < 0) { printf("Can't open %s\n", argv[1]); exit(1); } /* Compute the number of blocks in the file system */ fsi = open(argv[1], 0); fmax = 0; while(read(fsi, fbuf, BSIZE) == BSIZE) fmax++; close(fsi); /* Compute the number of inodes in the file system */ sblock.s_isize = roundup(fmax/16, BSIZE) + 2; sblock.s_fsize = fmax; /* Initialize the super block */ sblock.s_flock = 0; sblock.s_ilock = 0; sblock.s_fmod = 0; sblock.s_ronly = 0; sblock.s_time = 0; sblock.s_tfree = fmax; sblock.s_tinode = sblock.s_isize * NINOBLK; sblock.s_dinfo[0] = 0; sblock.s_dinfo[1] = 0; sblock.s_dinfo[2] = 0; sblock.s_dinfo[3] = 0; sblock.s_dinfo[4] = 0; sblock.s_dinfo[5] = 0; sblock.s_dinfo[6] = 0; sblock.s_dinfo[7] = 0; /* Write the super block to disk */ lseek(fso, SUPERBOFF, 0); write(fso, &sblock, sizeof(sblock)); /* Initialize the inode blocks */ n = sblock.s_isize; ip = (struct dinode *) fbuf; for(i = 2; i < n; i++) { bzero(fbuf, BSIZE); for(j = 0; j < NINOBLK; j++, ip++) { ip->di_mode = 0; ip->di_nlink = 0; ip->di_uid = 0; ip->di_gid = 0; ip->di_size = 0; bn = itod(i) * BSIZE + j * sizeof(struct dinode); lseek(fso, bn, 0); write(fso, ip, sizeof(struct dinode)); } } /* Initialize the root directory */ bzero(fbuf, BSIZE); ip = (struct dinode *) fbuf; ip->di_mode = IFDIR | 0777; ip->di_nlink = 2; ip->di_uid = 0; ip->di_gid = 0; ip->di_size = sizeof(struct direct); ip->di_addr[0] = itod(2); lseek(fso, itod(2) * BSIZE, 0); write(fso, fbuf, BSIZE); /* Add "." and ".." entries to the root directory */ dp.d_ino = 1; strncpy(dp.d_name, ".", DIRSIZ); lseek(fso, itod(2) * BSIZE, 0); write(fso, &dp, sizeof(dp)); dp.d_ino = 1; strncpy(dp.d_name, "..", DIRSIZ); write(fso, &dp, sizeof(dp)); /* Initialize the free block list */ bzero(fbuf, BSIZE); fbuf[0] |= BUSY; for(i = 2; i < fmax; i++) write(fso, fbuf, BSIZE); /* All done */ close(fso); exit(0); } ``` 上面代码的主要作用是: 1. 定义了文件系统超级块结构体 `struct filsys` 和磁盘上的 `inode` 结构体 `struct dinode`。 2. 定义了文件系统初始化工具 `mkfs` 的全局变量,包括文件系统设备文件描述符、文件系统设备文件的块数量、文件系统超级块等。 3. 通过读取命令行参数,打开文件系统设备文件。 4. 计算文件系统中的块数量和inode数量,并初始化文件系统的超级块结构体。 5. 将文件系统的超级块写入磁盘,并初始化inode块和根目录。 6. 最后,初始化空闲块链表,写入磁盘,完成文件系统的初始化工作。 总体而言,mkfs.c的作用是初始化vx6文件系统,并在磁盘上创建一个文件系统,以便操作系统可以使用这个文件系统来存储和管理文件和目录等数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值