如何在 Ubuntu 上搭建 TimeCapsule 服务
一直是使用 samba 服务作为 NAS,移动硬盘插在 mac 上作为 TimeMachine 备份盘,但这样还是太笨拙了。
为了实现无线备份,一种方法是购买 Apple TimeCapsule,另一种则是利用 Linux 设备来搭建 Netatalk 服务器。正好又一台闲置的 Ubuntu 机器,于是就决定采用这种方式。
Netatalk 是一个开源的 AppleTalk 通信协议的实现,可以通过在 Linux 系统上搭建 Netatalk 服务来作为 macOS 设备的 AFP 服务器、AppleTalk 路由等等。结合 avahi 服务,可以达到 Apple 原生设备的效果。
本文基于 Ubuntu 18.04 环境搭建,其他环境配置类似。
硬盘挂载与配置查看已连接的硬盘12345$ fdisk -l # 查看系统连接的磁盘信息 .../dev/sdb3 649940992 976773119 326832128 155.9G Apple HFS/HFS+ # 显示需要挂载的 HFS + 分区在 /dev/sdb3
HFS + 分区 ...
Docker 核心技术与原理初探
提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不再是一个只能在开发阶段使用的玩具了。作为在生产环境中广泛应用的产品,Docker 有着非常成熟的社区以及大量的使用者,代码库中的内容也变得非常庞大。
Docker 目前的组件相当多,并且实现也非常复杂,本文忽略繁杂的细节,集中探讨 Docker 的一些基础技术原理。
容器?虚拟机?容器和虚拟机是非常相似的技术概念,因为他们都提供了隔离应用和依赖环境的能力,都可以看作是提供了一个沙箱环境,使得应用都可以部署在任意宿主机。但两者的底层原理有所不同。
虚拟机虚拟机理论上是一个真实的计算机操作系统的封装,它运行在物理设备之上,通过 Hypervisor 进行建立和运行虚拟机体系。常见的虚拟基本架构如下:
在 Host OS 的基础上,通过 Hypervisor 来进行虚拟机资源控制,并拥有自己的 Guest OS,虽然隔离得更彻底,但是显然资源的开销会更大。
容器不同于虚拟机提供在物理硬件级别的操作系统隔离,容器技术提供的是操作系统级别的进程隔离,Docker 本身只是操作系 ...
Docker 实践 - 原理和创建镜像
你是否遇到过这种问题,在一个开发环境下面运行完全正常的程序,到了生产环境就会出现种种问题。因为生产环境的种种配置、库与环境变量等依赖项都与开发环境不尽相同,所以部署到生产环境之前,必须提前将生产环境配置好,才能保证服务正常运行。
但这样十分麻烦,尤其是要迁移服务器的话,环境配置又要重新来一遍。最理想的状况是,部署到生产环境可以自带环境配置,把运行正常的环境直接复制到生产机器上。Docker 为这种需求提供了解决方案。
Docker 是什么Docker 是一种 Linux 容器的封装, 由 Docker Inc. 开发,它把应用程序和依赖打包为一个文件,docker 基于这个文件生成一个虚拟容器,应用程序在这个虚拟容器里面运行,与在真实物理机上运行无异。它解决了环境配置问题。
Docker 目前提供了企业版 (Docker Enterprise Edition, Docker EE) 和社区版 (Docker Community Edition, Docker CE) 两种版本。
Docker 安装Docker EE 是面向企业的,一般只需要使用 Docker CE 即可,我们选择安装 ...
计算机网络之 TCP 协议
TCP 协议作为 TCP/IP 协议栈中最重要的一个协议之一,是因特网的基础。
端口与进程TCP 的包是不包含 IP 地址信息的,那是 IP 层上的事,但是有源端口和目的端口。就是说,端口这一东西,是属于 TCP 知识范畴的。
我们知道两个进程,在计算机内部进行通信,可以有管道、内存共享、信号量、消息队列等方法。而两个进程如果需要进行通讯最基本的一个前提是能够唯一的标识一个进程,在本地进程通讯中我们可以使用 「PID (进程标识符)」 来唯一标识一个进程。但 PID 只在本地唯一,如果把两个进程放到了不同的两台计算机,然后他们要通信的话,PID 就不够用了,这样就需要另外一种手段了。
解决这个问题的方法就是在运输层使用 「协议端口号 (protocol port number)」,简称 「端口 (port)」.我们知道 IP 层的 ip 地址可以唯一标识主机,而 TCP 层协议和端口号可以唯一标识主机的一个进程,这样我们可以利用:「ip 地址+协议+端口号」 唯一标示网络中的一个进程。在一些场合,也把这种唯一标识的模式称为 「套接字 (Socket)」。
这就是说,虽然通信的重点是应 ...
tcpdump 抓包 mysql 验证三次握手
TCP 的三次握手、4 次挥手是老生常谈的东西,那么具体的包数据传输过程你是否真正的试过呢?我们今天就通过具体的 mysql 建联实践来看看是怎么传递数据包的。
网络嗅探器和 tcpdump在共享式的网络中,数据的传输是怎么完成的呢?又是怎么找到对应的机器来进行数据交互的呢?
一般来说,在网络中,信息报会广播到网络中所有主机的网络接口,主机的网络设备通过 IP 和 MAC 地址等信息判断该信息包是否应该接收,通过抛弃与自己无关的数据包,这样就达到互联网中我们与指定机器通信的目的。
但是在众多的黑客技术中,嗅探器 (sniffer) 是一种很常见的技术,它使主机的网络设备接收所有到达的信息包,从而达到网络监听的目的。在共享式的局域网中,嗅探器可以对该网络中的流量一览无余。除了黑客,网络管理员也应该学会使用嗅探器来随时掌握网络的使用情况,在网络性能急剧下降时,找到网络阻塞和问题的根源。
具体的嗅探器工具在 Windows 平台上有 netxray 和 sniffer pro 软件,在 Linux 平台上有 tcpdump。我们今天要介绍的就是 tcpdump sniffer 嗅探器工具。 ...
用 jsDelivr 来改善网站响应速度
今天树莓派上的服务检测脚本忽然告警了,博客出现了大量资源 down 掉的情况,赶紧上线查看,页面都刷不出来,原来是 cdn.bootcss.com 这个 CDN down 掉了,我的 jquery,fontawesome 等 JS 库还有一些 CSS 库都引用这个 CDN 导致页面崩坏。坑爹呢 (; ̄Д ̄)
我心中顿时出现了一个解决方案,维护一个 CDN 列表,然后服务器上跑一个性能监测脚本,对这些 CDN 进行可达性和性能测试,然后在网站里去根据这个脚本动态修改依赖的 CDN。
等等好像有什么问题,服务器上进行性能监测好像没啥卵用啊,我们要保证客户端可达,这个好像是 CDN 要做的工作啊。
难道要在客户端去跑这个脚本? =͟͟͞͞(꒪⌓꒪*) 算了算了还是搜一个靠谱的 CDN 吧。
在 StackOverflow 搜索了一下发现有人推荐 jsDelivr 作为 CDN。
试验了一下,发现效果相当给力。推荐一下~
What is jsDelivr
jsDelivr - Open Source CDN free fast and reliable
它是一个高性能的 CDN,通过
H ...
常用的 macOS 命令行命令
记录下常用的 macOS 命令。
open - 打开文件、目录或执行程序open 其实等同于我们在 GUI 下面执行双击命令
12345open /Applications/Dictionary.app #Dictionary 应用 open ~/Movies # 开当前用户 Movies 目录 touch ~/1.txt # 创建 1.txtopen -e ~/1.txt # 打开 1.txt 并用 TextEdit 编辑
我们也可以直接把文件夹拖入 Terminal 就会在命令行直接出现该文件夹路径。
say - 文字转语音say 是命令行上的 VoiceOver:
1$ say "Never trust a computer you can't lift."
用 -f 选项朗读特定文本文件,-o 选项将朗读结果存为音频文件而不是播放:
1$ say -f mynovel.txt -o myaudiobook.aiff
say 命令也可以用于在脚本中播放警告或提示可以在系统设置(System Preferences)的字典 ...
探秘 socket
我们经常在网络编程接触 socket 这个概念,简而言之,socket 就是网络套接字,提供一个网络通信的接口给通信的进程,但这样讲了等于没讲,今天就来好好研究研究。
啥是 socket虽然 socket 平时还是相当常用的,每当需要做网络编程的时候都会用到它,但深究起来,似乎还真的没办法说的很清楚。计算机里边有许多概念就是这样,比较抽象,解释了跟没解释一样。在此我们用大白话描述一下,争取让” 街上卖煎饼果子的大叔 “都能听懂。
简单来说,socket 是对底层网络通信的一层抽象,让程序员可以像文件那样操作网络上发送和接收的数据。
veryone knows what a files is… It’s that “photo”, “document”, or “music” that you use. Programs are made of files, in fact, the whole Linux operating system is just a collection of files… But, now for the weird part. Not only is ...
Linux 中的 lsof
lsof - list open fileslsof(list open files)是一个查看当前系统文件的工具。在 linux 环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,该文件描述符提供了大量关于这个应用程序本身的信息。
文件类型lsof 打开的文件可以是:
普通文件
目录
网络文件系统的文件
字符或设备文件
(函数) 共享库
管道,命名管道
符号链接
网络文件(例如:NFS file、网络 socket,unix 域名 socket)
还有其它类型的文件,等等
命令参数
-a 列出打开文件存在的进程
-i < 条件 > 列出符合条件的进程。(4、6、协议、: 端口、 @ip )
-c < 进程名 > 列出指定进程所打开的文件
-p < 进程号 > 列出指定进程号所打开的文件
-d < 文件号 > 列出占用该文件号的进程
+d < 目录 > 列出目录下被 ...
探秘 http 请求报文结构
HTTP 请求报文由客户端发出,在发送报文之前要先与服务器建立 TCP 连接,如果使用 HTTPS 协议还需要建立 TLS/SSL 加密隧道连接,HTTP 请求报文是由三部分组成: 请求行 , 请求报头 和 请求正文 。
实例举个例子,下面是对 www.google.com 发出的请求报文。我们可以在 Google Dev Tools 中查看。
12345678910GET / HTTP/1.2accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8accept-encoding: gzip, deflate, braccept-language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6cache-control: no-cachecookie: OTZ=4569705_24_24__24_; _ga=GA1.1.1839148291.1537105919; HSID=AOuQZEx7qIgK ...