安卓5.1正式发布!安卓5.1系统映像下载

【PConline 资讯】安卓5.1正式发布了!Google已经发布了安卓5.1,对安卓5.0中存在的大量问题进行了修正,并加入了不少新特性。同时,Google在官方站点上放出了安卓5.1的系统镜像下载,如果你是Nexus 5和Nexus 10的用户,可以手动下载安卓5.1的系统镜像刷入!相信不久后,安卓5.1的OTA推送也会到来。

棒棒糖进化到安卓5.1!

Google在之前已经为AndroidOne推送了安卓5.1,不过并没有放出相应的系统镜像等资源,也没有将代码加入安卓开源项目AOSP。这次Google面向Nexus设备发布了安卓5.1,同时在AOSP中公开了相应的代码。Nexus用户如果要第一时间升级安卓5.1,可以下载系统镜像后解压,执行批处理文件即可完成刷机。

Google放出了安卓5.1的相关资源

根据之前的消息,安卓5.1改善了安卓5.0的内存泄漏问题,资源占用大大减少。同时,安卓5.1还带来了静音模式的回归,并加入了更强力的远程锁定功能。总的来说这是一个用来修复问题的版本,比安卓5.0更加完善,还是非常值得升级的。

Google目前放出了Nexus 5和Nexus 10的安卓5.1系统镜像,其他Nexus设备的镜像相信很快也会出现。Nexus 5和Nexus 10的安卓5.1系统镜像下载地址如下,可能需要科学上网才能下载。

Nexus 5安卓5.1系统镜像:点此下载

Nexus 10安卓5.1系统镜像:点此下载

更多安卓5.1镜像可以。

【推荐】用PConline官方客户端下载

谷歌推出了新版本的桌面网络磁盘客户端,以取代以前的备份和同步服务

通过新推出的 Google Drive 云端硬盘桌面客户端,谷歌正在积极简化用户在 Mac 和 Windows 平台上的同步体验。按照计划,新版应用程序将在 9 月份取代之前的备份(Backup)与同步(Sync)服务。

作为一项云端文档存储与同步服务,Google Drive 可在大多数平台和网络上使用,且企业与普通消费级用户都可通过桌面上的两款应用程序来访问该服务。

然而从周一开始,谷歌将开始提供更加统一的体验。谷歌表示,新应用可提供更佳的在线体验,类似于直接在文件系统中访问资源。本地文件可在后台自动同步到云端,且用户无需等待手动同步相关文件。

Drive for Desktop 桌面应用程序目前正在陆续推出,随着旧版应用程序的停用(2021 年 10 月截止),当前的 Backup 与 Sync 客户端用户也将被敦促尽快迁移至新软件。

如图所示,新版 Google Drive 桌面客户端主要提供了三项功能:

● 将照片和视频上传并同步到 Google 相册和 / 或 Google 云端硬盘;

● 将外部存储设备同步到云端,包括闪存 / 外部硬盘驱动器;

● 提供网盘文件的桌面镜像,以便在本地更快地访问相关内容。

10月17日发布的Android 5.0棒棒糖预览图片

Google 终于确认了新一代 Android 被命名为 Android 5.0 Lollipop,而正式版发布日期尚未确定,喜欢尝鲜的用户可以 17 日下载预览版体验。

尽管 Nexus 6 和 Nexus 9 已经发布,但 Android 5.0 Lollipop 的开发工作尚未完成,这一变化巨大的新版 Android 系统仍需时日。10 月 17 日,Google 将释出 Android 5.0 SDK 和预览版镜像。

请注意,明天释出的仍然是「预览版」,这意味着系统可能仍然不够稳定,而正式版发布的日期尚未确定。此外,预览版镜像可以通过 Google 开发者页面下载。

支持机型

Android 5.0 将支持 Nexus 家族中的 Nexus 4, 5, 6, 7, 9, 10 和所有 Google Play Edition 设备。

此外,摩托罗拉确认 Moto X (第1、2代)、Moto G (第1、2代)、LTE 版 Moto G、Moto E、Droid Ultra、Droid Maxx、Droid Mini 也将支持 Android 5.0,其他厂商的升级计划有待确认。

Nexus5/nexus7 Android l图像更新

IT之家(www.ithome.com):Nexus5/Nexus7版Android L镜像获更新

一段时间以来,有猜测认为谷歌不会更新为开发者和科技迷推出的Android L预览版镜像,不过今天谷歌还是带来了惊喜:谷歌今天升级了Nexus5智能手机和Nexus7(2013)平板电脑Android L预览版的镜像。

本次升级并不是一个大幅更新,其版本号由此前的LPV79升至LPV81C,这意味着这是头版Android L推出两天后的型号。考虑到谷歌今天刚刚发布了Fit SDK,本次更新的重点是Google Fit API;用户需要运行这个新版的Android L来试用采用Google Fit API打造的应用;此外,本次更新多是BUG修复和性能的提升,不过这至少表明Android L进一步做好准备向公众发布。

需要一提的是,用户试用这个新升级时,最好进行数据备份。(via:PhoneArena)

每日安全新闻:谷歌分析了Triada Android病毒,并在手机出售前感染了系统图像

谷歌安全博客发文称通过他们的供应链已经确认部分 Android 设备的固件更新已经被感染,以便于黑客安装恶意程序。黑客利用名为“Triada”的恶意程序感染这些固件

作者/来源: 安华金和

继俄罗斯安全公司卡巴斯基 3 年前首次公开报告之后,今天谷歌安全博客发文称通过他们的供应链已经确认部分 Android 设备的固件更新已经被感染,以便于黑客安装恶意程序。黑客利用名为“Triada”的恶意程序感染这些固件,卡巴斯基于 2016 年 3 月的官方博客中首次描述了这种恶意软件。

该恶意程序可以和众多命令、控制中心进行通信,并允许安装可用于发送垃圾邮件和显示广告的应用程序。2017 年 7 月,反病毒厂商 Dr Web 发现 Triada 被内置到许多 Android 设备的固件中,其中包括 Leagoo M5 Plus,Leagoo M8,Nomu S10 和 Nomu S20 等等。而且由于该恶意程序属于操作系统本身,因此无法轻松删除。

谷歌 Android 安全和隐私团队成员 Lukasz Siewierski 于周四发布了一篇详细的博客文章,证实了 Dr Web 近两年前的报道。他在博文中写道 “Triada 应用程序的主要目的是在显示广告的设备上安装垃圾应用程序。”

谷歌在博文中写道:“Triada 的创建者通过垃圾应用上显示的广告来牟利。和其他同类恶意软件相比,Triada 更加复杂且不常见。Triada 是从 rooting trojans 木马发展而来的,但随着 Google Play Protect 对防御这种攻击的增强,Triada 恶意程序被迫转型以系统镜像后门方式进行感染。但是,由于 OEM 合作和我们的推广工作,原始设备制造商准备了系统映像,其安全更新消除了 Triada 感染。”

尽管 Siewierski 在博文中并未提及具体的手机型号,但是提到了几家已经受到感染的手机厂商名称。他表示:“Triada 在量产环节中通过第三方来感染设备系统镜像。有时 OEM 厂商希望包含不属于 Android 开源项目的功能,例如面部解锁等。……OEM可能会与可以开发所需功能的第三方合作,并将整个系统映像发送给该供应商进行开发。基于分析,我们认为使用 Yehuo 或 Blazefire 的供应商返回了感染 Triada 恶意程序的系统固件。”

来源:cnBeta.COM

更多资讯

苹果悄然发布 CryptoKit:未来将 iPhone 或 Mac 变成加密钱包在 WWDC 2019 开幕演讲中苹果介绍了诸多重量级更新,除了 iOS 13、macOS Catalina、iPadOS 等软件更新和性能怪兽 Mac Pro 之外,还引入了 Project Catalyst 等诸多开发者工具,能够轻松将 iPad 应用转换成为 Mac 应用。除了上述这些重磅更新之外,苹果还悄然推出了 CryptoKit 框架,允许开发者在他们的 APP 中创建加密货币操作。

来源: cnBeta.COM

详情: https://www.dbsec.cn/zx/20190608-2.html

商业用途遭曝光后 微软删除包含 1000 万张人脸图像的数据库据外媒 OnMSFT 报道,微软已经悄然删除了 MS Celeb。这是一个包括 1000 万张图像的训练数据库,其目的是被用于识别人脸图像。根据英国《金融时报》的一份报告,包含来自一百万名名人的图片的数据库已经成为问题,因为它还包括来自“有争议的个人”的图像。

来源: cnBeta.COM

详情: https://www.dbsec.cn/zx/20190608-3.html

学生升学资料等 100 个窃取用户个人信息恶意程序变种被发现新华社天津 6 月 7 日电(记者周润健)记者 7 日从国家互联网应急中心天津分中心获悉,通过自主监测和样本交换形式,学生升学资料等 100 个窃取用户个人信息的恶意程序变种近日被发现,该类病毒通过短信进行传播,会私自窃取用户短信和通讯录,对用户信息安全造成严重安全威胁。

来源: 新华网

详情: https://www.dbsec.cn/zx/20190608-4.html

缅因州州长签署美国最严格的互联网隐私保护法案缅因州州长周四签署了一部新的法律,这是美国最严格的互联网隐私保护法案之一。“保护在线消费者信息隐私法”将要求缅因州的互联网服务提供商在向第三方出售或共享数据之前获得其客户的许可。该法律于 7 月 1 日生效,自此之后,该州也禁止互联网服务供应商向客户提供折扣以换取销售数据。

来源: cnBeta.COM

详情: https://www.dbsec.cn/zx/20190608-5.html

(信息来源于网络,安华金和搜集整理)

点击“了解更多”可访问文内链接

ISO映像下载:运行Android 9.0的x86 PC,完全免费

Android早已超过Windows,坐拥全球用户量最大的操作系统宝座。这么高的人气,当然会有很多可玩性,比如Android -x86项目,即在x86处理器平台上运行Android。

据悉,底层升级为Android 9 Pie(android-9.0.0_r50)的x86项目已经取得开发成果,第一版RC候选ISO镜像日前开放下载,32位(685MB)和64位(865MB)平台均支持。

Android-x86演进到现在早已不是单纯、无脑地将谷歌原版系统移植到PC,以9.0为例,添加了大量高级特性,比如适配AMD、Intel、NVIDIA的OpenGL ES 3.x硬件加速、OpenGL ES 3.0 GPU渲染支持、QEMU模拟器等。

此外还有Intel HD/G45核显硬件加速、UEFI启动和对大量型号的蓝牙、音频、相机、网口、多点触控、WiFi等芯片的兼容。

Android 9 Pie x86基于Linux 4.19.80长期支持版内核,下载使用完全免费。

谷歌正式发布了Android 5.0,用于Nexus7.1镜像更新

在五月初,谷歌为Nexus 7/Nexus 10推出了Android 5.1.1首版官方镜像,今日谷歌又悄然为Nexus 7 (2013 Wi-Fi) 机型增加了Android 5.1.1官方镜像的更新版本,具体版本号为LMY48G,之前的镜像版本号LMY47V。谷歌仍未为该版本发布更新日志,推测可能为小幅更新及漏洞修复。

目前该版本已经可以从谷歌开发者官方镜像网站下载到,仅适用于Nexus 7(2013,Wi-Fi)。

简单docker映像

技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!

作为云计算的当红明星Docker 来势汹汹,它就像一场森林大火,烧到了我们中间。因为工作的原因,每天都会和容器云打交道。但是,我发现经常会有些新加入的同事在理解Docker命令方面存在一些问题,尤其是在Docker 镜像底层的工作原理和容器与容器镜像的关系上。

通常情况下一项新的技术诞生时往往会伴随着较多的媒体宣传甚至炒作,且在推广产品的过程中往往会出现一些新的技术名词,让人感觉云里雾里。Docker 的诞生和推广正是在这种情况下进行的。

对于产品本身而言媒体的宣传和炒作可以帮助他们快速的在市场中进行推广,但是这种宣传和炒作也会导致很多用户很难看清被宣传产品的技术的本质,不利于用户对技术的掌握,更加不利于用户对产品的深度使用。

一般情况下只有真正理解了某门技术的原理才能真正掌握这一门技术,接下来才能去深入的使用这门技术。下面我们会由浅入深出的带大家了解下Docker 镜像及其相关技术的原理和本质。

容器 VS 容器镜像

在说Docker 镜像的原理知识之前,我们先看下docker 容器和docker 镜像的区别,因为这部分我们后面会涉及到。

简单说来,我们可以将Docker 镜像看成是Docker 容器的静态时,也可将Docker 容器看成是Docker镜像的运行时。

从Docker 的官方文档来看,Docker 容器的定义和 Docker 镜像的定义几乎是相同,Docker 容器和Docker 镜像的区别主要在于docker 容器多出了一个可写层。

容器中的进程就运行在这个可写层,这个可写层有两个状态,即运行态和退出态。当我们docker run 运行容器后,docker 容器就进入了运行态,当我们停止正在运行中的容器时,docker 容器就进入了退出态。

我们将容器从运行态转为退出态时,期间发生的变更都会写入到容器的文件系统中(需要注意的是,此处不是写入到了docker 镜像中),这方面的变化下文中我们还会再细说。

Docker 存储简介

简单说来Docker 镜像就是一组只读的目录,或者叫只读的 Docker 容器模板,镜像中含有一个Docker 容器运行所需要的文件系统,所以我们说Docker 镜像是启动一个Docker 容器的基础。

如果这样不是很好理解,我们可以通过一个图一起看下:

从图中可以看出除了最上面的一层为读写层之外,下面的其他的层都是只读的镜像层,并且除了最下面的一层外,其他的层都有会有一个指针指向自己下面的一层镜像。

虽然统一文件系统(union file system)技术将不同的镜像层整合成一个统一的文件系统,为构成一个完整容器镜像的层提供了一个统一的视角,隐藏了多个层的复杂性,对用户来说只存在一个文件系统,但图中的这些层并不是不能看到的,如果需要查看的话可以进入运行Docker的机器上进行查看,从这些层中可以看到Docker 内部实现的一些细节,接下来我们一起看下。

一般刚接触Docker 不久的话可能会不太清楚Docker 的存储方式是怎样的,并且可能也不太清楚Docker 容器的镜像到底存储在什么路径下,比较迷茫。

有些同学想了解下Docker 的镜像数据存储在什么位置,然后谷歌了下几篇博文,说是在/var/lib/docker 下有个aufs目录,结果在自己机器上进到这个路径后发现没有aufs相关的目录,然后以为是版本的问题,其实不然。

以Linux服务器为例,其实Docker 的容器镜像和容器本身的数据都存放在服务器的 /var/lib/docker/ 这个路径下。不过不同的linux发行版存储方式上有差别,比如,在ubuntu发行版上存储方式为AUFS,CentOS发行版上的存储方式为device mapper。

/var/lib/docker 路径下的信息在不同的阶段会有变化,从笔者个人经验来看,了解这几个阶段中新增的数据以及容器与镜像的存储结构的变化非常有利于我们对Docker容器以及Docker镜像的理解。

接下来我们一起看下Docker运行后、下载镜像后、运行容器后三个阶段中Docker 存储的变化。

环境信息:

系统发行版:CentOS7.2。

内核版本:3.10.0-327.36.1.el7.x86_64

Docker 版本:1.8

启动Docker后

在此我们假设大家已经安装好了Docker环境,具体安装的过程不再赘述。

# 启动Docker 服务

[root@influxdb ~]# systemctl start docker

# 查看/var/lib/docker路径下的文件结构

[root@localhost docker]# tree .

├── containers

├── devicemapper

│ ├── devicemapper

│ │ ├── data

│ │ └── metadata

│ └── metadata

│ ├── base

│ ├── deviceset-metadata

│ └── transaction-metadata

├── graph

├── linkgraph.db

├── repositories-devicemapper

├── tmp

├── trust

└── volumes

8 directories, 7 files

注:必须启动Docker 服务后查看,如果没有启动Docker 进程则路径/var/lib/docker 不存在。

前文中我们已经提到过,CentOS发行版中Docker 服务使用的存储方式为devicemapper,所以我们从前面tree命令的结果中可以看到出现了目录devicemapper。

有些同学可能会问什么是devicemapper?

太阳底下无新鲜事,devicemapper 并不是伴随着Docker 才出现的,早在linux2.6版本的内核时其实就已经引入了devicemapper,且当时是作为一个很重要的技术出现的。

简单说来devicemapper 就是Docker 服务的一个存储驱动,或者叫Docker 服务的存储后端。Devicemapper 其实是一个基于内核的框架,这个框架中对linux上很多的功能进行了增强,比如对linux上高级卷管理功能的增强。

Devicemapper 存储驱动将我们的每个docker镜像和docker容器都存在在自己的虚拟设备中,devicemapper的这些设备相当于我们常见的一般的写时复制快照设备的超配版本。通过上面的介绍,有些同学可能以为devicemapper 存储驱动是工作在块级别的,但是devicempper 实际是工作在文件级别的,也就是说devicemapper 存储驱动和写时复制操作都是直接操作块,而不是对文件进行操作。

以上是我们关于Docker 服务的devicemapper 存储驱动的一个简单的介绍,Docker 官方文档中提供了很多的有关Docker 存储驱动的介绍,感兴趣的同学可以自行查阅。

进一步的查看的话,可以看到路径/var/lib/docker/devicemapper下面有两个目录,分别为devicemapper和data,其中目录devicemapper 下存在两个名为data和metadata的文件,两个文件从名称即可看出一个是镜像数据的存储池,一个为镜像相关的元数据。接下去我们会逐个看下这个路径下的文件。

进入上面提到的目录metadata下,可以看到这个目录中已经存在三个文件,分别为:base、deviceset-metadata和transction-metadata,这三个文分别用来存放上文中我们提到的元数据的id、大小和uuid等信息。

[root@localhost metadata]# pwd

/var/lib/docker/devicemapper/metadata

[root@localhost metadata]# ls

base deviceset-metadata transaction-metadata

除了上面提到的几个目录,上文中tree的结果中还有几个目录,分别为:containers、devicemapper、graph、linkgraph.db、repositories-devicemapper、tmp、trust和volumes。这几个文件对于docker 的镜像存储来说都很重要,我们以文件repositories-devicemapper为例,看下这个文件对于镜像存储所起到的作用。

[root@localhost docker]# pwd

/var/lib/docker

[root@localhost docker]# ls

containers devicemapper graph linkgraph.db repositories-devicemapper tmp trust volumes

我们可以先看下repositories-devicemapper 这个文件中在当前的阶段中有什么:

root@localhost docker]# cat repositories-devicemapper

{“Repositories”:{}}[root@localhost docker]#

从上面cat的结果中我们不难看出,文件repositories-devicemapper 中其实记录的就是docker 镜像的属性信息,比如镜像名称、镜像标签、镜像的ID等信息,如果镜像刚好没有标签的话默认会以lastet作为标签。

以上是对Docker 服务运行后pull镜像之前/var/lib/docker 路径下数据的一个简单的解读,相信大家通过上面的描述已经对docker镜像有了一些更深入的认识。下面我们看下在我们pull 自己的第一个docker镜像之后路径/var/lib/docker 之下的数据会发生怎样的变化。

Pull 镜像后

在此我们以一个nginx镜像为例一起看下这个阶段的变化。

# pull 示例镜像

[root@localhost docker]# docker pull nginx

Using default tag: latest

latest: Pulling from library/nginx

22f3bf58cd09: Pull complete

ea2fc476f5f0: Pull complete

81d728438afe: Pull complete

303a6dec1190: Pull complete

d43816b44a22: Pull complete

dc02db50a25a: Pull complete

6f650a34b308: Pull complete

a634e96a9de9: Pull complete

72f3ebe1e4d7: Pull complete

c2c9e418b22c: Pull complete

Digest: sha256:a82bbaf63c445ee9b854d182254c62e34e6fa92f63d7b4fdf6cea7e76665e06e

Status: Downloaded newer image for nginx:latest

# 查看镜像是否已经在本地

[root@localhost docker]# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

nginx latest c2c9e418b22c 2 weeks ago 109.3 MB

[root@localhost docker]#

在此我们没有指定nginx镜像的tag,因此默认拉去了最新的版本。然后我们看下路径/var/lib/docker 下是否有变化:

[root@localhost docker]# tree .

.

├── containers

├── devicemapper

│ ├── devicemapper

│ │ ├── data

│ │ └── metadata

……

省略若干数据

……

│ │ ├── checksum

│ │ ├── json

│ │ ├── layersize

│ │ ├── tar-data.json.gz

│ │ └── v1Compatibility

│ ├── 303a6dec11900c97f5d7555d31adec02d2e5e4eaa1a77537e7a5ebd45bb7fcd2

│ │ ├── checksum

│ │ ├── json

│ │ ├── layersize

│ │ ├── tar-data.json.gz

│ │ └── v1Compatibility

│ ├── 6f650a34b3083c96cf8b7babc7a391227c0f78e0d07067071c46e31bd834de3a

│ │ ├── checksum

│ │ ├── json

│ │ ├── layersize

│ │ ├── tar-data.json.gz

│ │ └── v1Compatibility

│ ├── 72f3ebe1e4d793a50836d4e070c94ef7497c80111d178e867014981f64696a39

│ │ ├── checksum

│ │ ├── json

│ │ ├── layersize

│ │ ├── tar-data.json.gz

│ │ └── v1Compatibility

│ ├── 81d728438afe98602e2e692c20299ecf41b93173fb12351c1b59820b17fb16b9

│ │ ├── checksum

│ │ ├── json

│ │ ├── layersize

│ │ ├── tar-data.json.gz

│ │ └── v1Compatibility

│ ├── a634e96a9de9f1e280efaecdd43c7273ac43e109a42ab6c76ab2d2261c8cdc50

│ │ ├── checksum

│ │ ├── json

│ │ ├── layersize

│ │ ├── tar-data.json.gz

│ │ └── v1Compatibility

│ ├──

……

省略若干数据

……

│ ├── ea2fc476f5f055f9e44963987903ecfe0cb480b7e387d8b5cb64006832110afc

│ │ ├── checksum

│ │ ├── json

│ │ ├── layersize

│ │ ├── tar-data.json.gz

│ │ └── v1Compatibility

│ └── _tmp

├── linkgraph.db

├── repositories-devicemapper

├── tmp

├── trust

└── volumes

30 directories, 67 files

[root@localhost docker]#

从结尾的目录数和文件数也可以看出,在我们拉取镜像后/var/lib/docker 下多出了很多的文件(拉取镜像之前,只有8个目录,7个文件),下面我们一步步的分析。

如果这个时候看下路径/var/lib/docker下的文件的话,可以很容易的看到发生变化的主要是下面这三个文件:/var/lib/docker/devicemapper/metadata、/var/lib/docker/devicemapper/mnt以及/var/lib/docker/graph。我们先看下metadata这个文件:

从结果可以看出除了上一个阶段中已经有的base、deviceset-metadata等几个文件外,还多出了一些名字较长的文件,我们挨个看下这几个文件中的数据:

[root@localhost metadata]# cat base

{“device_id”:1,”size”:107374182400,”transaction_id”:1,”initialized”:true} [root@localhost metadata]# cat 22f3bf58cd0949b57df2dc161e7026a8cc77699b6a8be7d0e3085e252a5439c3

{“device_id”:2,”size”:107374182400,”transaction_id”:2,”initialized”:false}

[root@localhost metadata]# cat ea2fc476f5f055f9e44963987903ecfe0cb480b7e387d8b5cb64006832110afc

{“device_id”:3,”size”:107374182400,”transaction_id”:3,”initialized”:false}

[root@localhost metadata]# cat 81d728438afe98602e2e692c20299ecf41b93173fb12351c1b59820b17fb16b9

{“device_id”:4,”size”:107374182400,”transaction_id”:4,”initialized”:false} [root@localhost metadata]# cat d43816b44a2280148da8d9b6ce2f357bff9b2e59ef386181f36a4a433a9aad6c

{“device_id”:6,”size”:107374182400,”transaction_id”:6,”initialized”:false} [root@localhost metadata]# cat 303a6dec11900c97f5d7555d31adec02d2e5e4eaa1a77537e7a5ebd45bb7fcd2

{“device_id”:5,”size”:107374182400,”transaction_id”:5,”initialized”:false} [root@localhost metadata]# cat a634e96a9de9f1e280efaecdd43c7273ac43e109a42ab6c76ab2d2261c8cdc50

{“device_id”:9,”size”:107374182400,”transaction_id”:9,”initialized”:false} [root@localhost metadata]# cat dc02db50a25a87ca227492197721e97d19f1822701fe3ec73533a0811a6393a7

{“device_id”:7,”size”:107374182400,”transaction_id”:7,”initialized”:false} [root@localhost metadata]# cat 6f650a34b3083c96cf8b7babc7a391227c0f78e0d07067071c46e31bd834de3a

{“device_id”:8,”size”:107374182400,”transaction_id”:8,”initialized”:false} [root@localhost metadata]# cat 72f3ebe1e4d793a50836d4e070c94ef7497c80111d178e867014981f64696a39

{“device_id”:10,”size”:107374182400,”transaction_id”:10,”initialized”:false} [root@localhost metadata]# cat c2c9e418b22ca5a0b02ef0c2bd02c34ad792d1fc271e5580fdb3252979ccc092

{“device_id”:11,”size”:107374182400,”transaction_id”:11,”initialized”:false}

从上面的结果可以看出上面的几个文件中的device_id数值是按照顺序排列下来的,换句话说就是除了上一个阶段中已经存在的base文件,上面结果中其他的几个文件都是nginx镜像的中间镜像层,也就是我们经常执行的命令docker images –a 的结果中看到的构成当前镜像的各个镜像层。

接下来我们再看一个变化较大的文件/var/lib/docker/graph。

[root@localhost graph]# tree .

.

├── 22f3bf58cd0949b57df2dc161e7026a8cc77699b6a8be7d0e3085e252a5439c3

│ ├── checksum

│ ├── json

│ ├── layersize

│ ├── tar-data.json.gz

│ └── v1Compatibility

├── 303a6dec11900c97f5d7555d31adec02d2e5e4eaa1a77537e7a5ebd45bb7fcd2

│ ├── checksum

│ ├── json

│ ├── layersize

│ ├── tar-data.json.gz

│ └── v1Compatibility

├── 6f650a34b3083c96cf8b7babc7a391227c0f78e0d07067071c46e31bd834de3a

│ ├── checksum

│ ├── json

│ ├── layersize

│ ├── tar-data.json.gz

│ └── v1Compatibility

├── 72f3ebe1e4d793a50836d4e070c94ef7497c80111d178e867014981f64696a39

│ ├── checksum

│ ├── json

│ ├── layersize

│ ├── tar-data.json.gz

│ └── v1Compatibility

├── 81d728438afe98602e2e692c20299ecf41b93173fb12351c1b59820b17fb16b9

│ ├── checksum

│ ├── json

│ ├── layersize

│ ├── tar-data.json.gz

│ └── v1Compatibility

├── a634e96a9de9f1e280efaecdd43c7273ac43e109a42ab6c76ab2d2261c8cdc50

│ ├── checksum

│ ├── json

│ ├── layersize

│ ├── tar-data.json.gz

│ └── v1Compatibility

├── c2c9e418b22ca5a0b02ef0c2bd02c34ad792d1fc271e5580fdb3252979ccc092

│ ├── checksum

│ ├── json

│ ├── layersize

│ ├── tar-data.json.gz

│ └── v1Compatibility

├── d43816b44a2280148da8d9b6ce2f357bff9b2e59ef386181f36a4a433a9aad6c

│ ├── checksum

│ ├── json

│ ├── layersize

│ ├── tar-data.json.gz

│ └── v1Compatibility

├── dc02db50a25a87ca227492197721e97d19f1822701fe3ec73533a0811a6393a7

│ ├── checksum

│ ├── json

│ ├── layersize

│ ├── tar-data.json.gz

│ └── v1Compatibility

├── ea2fc476f5f055f9e44963987903ecfe0cb480b7e387d8b5cb64006832110afc

│ ├── checksum

│ ├── json

│ ├── layersize

│ ├── tar-data.json.gz

│ └── v1Compatibility

└── _tmp

11 directories, 50 files

从上面的结果中可以很明显的看到我们的镜像nginx及其每一个nginx镜像的中间层对应的目录下都包含如下几个文件:checksum、json、layerrize、tar-data.json.gz和v1Compatibility。我们任意找一个文件看下这几个文件中存放了什么数据。

(1) Checksum

其实从文件名称即可看出每个镜像层中的checksum文件存放的是当前镜像层的md5值,用于核对当前镜像层的数据是否完整。

(2) json

从cat 的结果中可以看出json文件中存放的数据较多,比如Hostname、Domainname、User、Image等信息,而且很多参数和我们经常接触的Dockerfile中的参数相似。相比较前面的checksum文件这个文件中的内容相对较复杂,在此我们也解释下。

此处的json文件中一般主要用于存放镜像中涉及的动态信息,但需要注意的是此处的json文件并不仅仅被用于存储docker镜像的动态信息(很多同学可能会认为此处的json文件只是被用来描述Docker容器的动态信息的),我们在使用Dockerfile 构建镜像时,Dockerfile 构建过程中涉及到的所有操作基本都被记录到这个json文件中。

说到这儿,有些同学可能会问这个json是在什么阶段被使用到的,好问题。通过下面这个图我想大家应该就能看明白了:

从图中我们可以看出每个镜像层的json文件其实是由Docker 守护进程进行解析的。Docker 守护进程通过json文件可以解析出运行容器需要的各种数据,比如环境变量、workdir以及容器启动时需要执行的ENTRYPOINT或者CMD命令等。Docker 守护进程从json文件中获取到这些数据后,接下来就开始进行容器进程的初始化。

(3) layersize

从文件名称即可看出,这个文件中存放的为当前镜像层的占用空间大小:

(4) repositories-devicemapper

上一阶段中我们解释过这个文件中记录的为当前镜像层的属性信息,比如镜像名称信息、镜像标签信息、镜像的ID信息等:

以上是对pull镜像之后运行容器之前镜像存储信息的简单介绍,相信大家在看下之后对docker容器镜像已经有了更加深入的认识。下面我们看下本文中我们要说的最后一个阶段,即运行容器后docker 的存储又发生了哪些变化。

运行容器后

我们运行下前面从dockerhub pull的镜像nginx:latest:

[root@localhost metadata]# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

nginx latest c2c9e418b22c 2 weeks ago 109.3 MB

[root@localhost metadata]#

[root@localhost metadata]#

[root@localhost metadata]#

[root@localhost metadata]# docker run –name nginx -d nginx:latest

814ec80839669e235c94978ed3d07eab0e2b2bebd7d7a64fd6488cddca51be41

[root@localhost metadata]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

814ec8083966 nginx:latest “nginx -g ‘daemon off” 3 seconds ago Up 2 seconds 80/tcp nginx

按照惯例,然后我们看下/var/lib/docker路径下的文件结构:

和上一阶段不同,这个阶段发生变化的文件主要是:/var/lib/docker/devicemapper/metadata、/var/lib/docker/devicemapper/mnt以及/var/lib/docker/container,下面我们逐个看下。

(1) metadata

我们看下metadata这个目录下的文件:

从图中的结果可以看出,相比上一个阶段,当前阶段中metadata目录下多出了两个文件,即以51be4e和51b44e-init结尾的两个文件。

我们都知道docker 借助容器镜像运行起容器之后,会在当前镜像的最顶层添加一个特殊的层,和其他的层相比这个层不但有可读的权限还有可写的权限。说到这,相信多出的两个文件的功能就不难理解了。

(2) mnt

在查看mnt下的数据之前,我们先看下这个目录下的文件结构:

对比上面说过的metadata目录,发现这两个目录下的文件是一样的,相比前一个阶段的话也是新增了两个文件,即以51be4e和51b44e-init结尾的两个文件。

(3) container

我们先看下当前目录下的文件结构:

Container目录为容器本身的目录,此目录中存放了诸如容器的配置文件等文件。如果我们删掉这个目录(docker 进程hang死导致docker rm、docker kill杀不掉容器时常用此种方式处理)的话正在运行的容器就会被删掉,我们看下这几个文件都存放了什么数据。

(1) xxx.json.log、config.json

从文件名称即可看出,这两个文件存放的为当前容器的配置信息及其数据:

(2) hosts

hosts配置信息,在此不再赘述。

(3) hostname

容器host名称,可以cat查看后再进入容器查看hostname,核对下看是否是一样的。

(4) resolv.conf

dns配置信息。

小结

前面分析了那么多涉及到docker 存储的文件,在查阅各个文件或者目录作用时可能不是很方便,在此我们给大家总结了一下各个文件的作用(每个文件都是在/var/lib/docker路径下):

(1) devicemapper/devicemapper/data

存储存储池相关的数据。

(2) devicemapper/devicemapper/metdata

存储元数据。

(3) devicemapper/metadata/

存储device_id、layersize等信息。

(4) devicemapper/mnt

存储挂载相关的信息。

(5) container/

存储容器本身的信息。

(6) graph/

存储各个镜像层的详细信息。

(7) repositores-devicemapper

存储镜像的一些基本信息。

(8) tmp

存储docker的临时目录。

(9) trust

存储docker的信任目录。

(10) volumes

存储docker的卷目录。

升级Android l factory的图像并添加Google fit支持

既然是开发者预览的版本,那么就肯定能看到最新的行业发展趋势,尤其是在前段时间发布的下一代 Android 系统身上,任何趋势的变化都会反映在这个不断变化的产品身上。近日,谷歌悄然更新了 Android L 开发者预览版,目前在谷歌开发者站点中,新的工厂镜像的版本号已经从原先的 LPV79 版本升级至 LPV81C 版本。而最显著的变化在于加入了对 Google Fit 的支持。

新的镜像的出现表明谷歌依旧在不断地为 Android L 增加新的功能,而作为未来谷歌针对个人健康以及可穿戴设备领域的一次大胆尝试,Google fit 的竞争对手将会是苹果即将发布的 Healthkit,而后者也将会在今年秋季的 iOS 8 中正式对外发布。所以在新版的 Android L 出现这样的新功能也就不足为奇了。

与此同时,谷歌还发布了有关 Google Fit 的预览版 SDK,开发者可以在获取整套新系统镜像的同时,下载 Google Play services for Fit Preview 获得完整支持,先期将会有包含记录运动数据,运动传感器以及运动历史记录方面的 API 供开发者调用。

本文部分内容编译自 AndroidPolice

如何在centos7中安装Google Chrome浏览器

1. download:Chrome linux安装包

https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

2. 配置yum, 原始的centOS官网地址访问不了,要改成阿里云镜像

vi /etc/yum.repos.d/CentOS-Base.repo

把所有的mirrorlist注释掉

把所有的baseurl打开

把mirrors.centos.org替换成mirrors.aliyun.com

#mirrorlist=https://#mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra

baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/

3. 使用yum来安装

yum install redhat-lsb

yum install libXScrnSaver*

yum install epel-release

yum install liberation-fonts

yum localinstall google-chrome-stable_current_x86_64.rpm

4. 把安装好的Chrome设置到桌面快捷方式

cp -rf /usr/share/applications/google-chrome.desktop ./桌面/

cd 桌面/

chmod 750 google-chrome.desktop