解决容器构建错误 E: List directory /var/lib/apt/lists/partial is missing. – Acquire (13: Permission denied)

使用Dockerfile构建一个镜像,如果使用的base image 设置了USER项,则之后的所有构建动作则切换到了USER指定的用户,且docker run该镜像后的用户也是USER指定的用户。 因此为了在base image上继续添加构建动作,则可以使用USER root切换到root用户执行构建,再在构建结束时使用USER someone切换为原用户. FROM someimage … … USER root … USER someone …

Read More

VMWare克隆CentOS 6系统导致无法启动网络解决记录

公司服务器上周挂了后,需要新的系统,于是用了之前服务器导出的CentOS6的镜像。 成功部署后,发现无法访问,控制台登陆后发现network.service没起来,于是重启network. [root@localhost]# service network restart Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interface eth1: Error: No suitable device found: no device found for connection’System eth1′. … “VMWare克隆CentOS 6系统导致无法启动网络解决记录”

Read More

Raspberry Pi 2B 体验 Ubuntu Core 系统

前些天看到 Ubuntu 针对 IoT 推出的系统有树莓派的版本,叫做 Snappy Ubuntu Core . 我的树莓派 2B 之前用着 CentOS 的 armhf 版,从15年到现在一直很稳定.但是挡不住对新鲜事物的尝试,今天就特地换 Ubuntu Core 来试试. 介绍 Snappy Ubuntu Core 是 Canonical 针对 IoT 和 Embedded 基于 Ubuntu 系统推出的精简定制版,其特点就是 Snap 包管理器. Ubuntu … “Raspberry Pi 2B 体验 Ubuntu Core 系统”

Read More

用TypeScript实现对WebSocket的封装-Part-2

在驱动接口声明完成后,实现功能部分会比较繁复,需要考虑保活/断线重连/消息丢失重发/消息去重,等大部分弱网络下的问题,这是为了方便上层的调用,上层无需关心底层驱动的实现. 实现`chat-ws.ts`: “`typescript ///<reference path="./chat-ws.d.ts" /> import { IntervalTimer, ETimerEventType as ETETP } from './chat-timer'; @Injectable export class ChatWSProvider implements IChatWSProvider { construtor(){ //… } private logger: ILogger = null; private remoteAddr: string; private webSocket: … “用TypeScript实现对WebSocket的封装-Part-2”

Read More

用TypeScript实现对WebSocket的封装-Part-1

在 node.js 的第三方 module 中提供了许多优质的 WebSocket 驱动,比如 ws 和 Socket.IO,不过 TypeScript 内置库也已经实现了 WebSocket 驱动.因此可以无需添加第三方 WebSocket 库. 得益于 TypeScript 强大语法的支持,因此代码可以像编译型语言那样先对用到的类型进行声明,然后对接口实现定义. 先前项目前端使用 TypeScript,因此使用了 TypeScript 实现了WebSocket的聊天驱动.这些天来总结了项目关于聊天驱动底层的一些经验与问题,故记录下. 废话不说. 首先定义通知上层的事件回调接口,这些事件通常是收到 ws 数据或 ws 异常后触发的,因此可以按照功能分为: 登录事件回调 : type FnOnLoginCallback,来自登录成功后的事件回调声明 登出事件回调 : … “用TypeScript实现对WebSocket的封装-Part-1”

Read More