linux创建启动盘

  1. 磁盘必须具备 boot, lba标识
  2. 挂载(这里是第一个分区,fat32格式,磁盘沿用上一篇的磁盘镜像格式, 当前目录创建了一个boot的目录作为挂载点)
mount /dev/loop0p1 boot
  1. EFI可选,不知道具体效果,不知道如何测试区别
efibootmgr -w

其他的解释: 如果不做这一步,那么在主板 CSM 开启的混合模式下可能无法UEFI启动。

  1. efi 安装(需要64位efi安装的linux?),没有的话直接复制也可。efi的启动盘相对简单: 磁盘分区为boot+lba标识的fat32分区,自动加载efi/boot/bootx64.efi
grub-install --boot-directory boot/boot --efi-directory boot --removable /dev/loop0
  1. 由于第4步在efi平台只安装efi相关的内容,不将启动代码写入到相关的启动分区中,所以还需要在非efi启动的情况下重复第4点的操作。使用livecd也可以完成这一步
grub-install --boot-directory boot/boot --efi-directory boot --removable /dev/loop0
  1. 对于loop设备,比如目前用的其实是一个img文件,需要使用下面的方式
grub-install --boot-directory=boot/boot --efi-directory boot --removable --modules="ext2 part_msdos" /dev/loop0

注意第4点和第5点在不同环境下的输出

至此,同时支持bios和uefi的启动盘就制作完成了。

linux制作磁盘镜像

过程很简单,就几条语句

创建一个磁盘镜像

dd if=/dev/zero of=disk.img bs=512M count=1

如果不存在 /dev/loop0,一般都有

modprobe loop
losetup -f

关联loop0和镜像文件

losetup -Pf /dev/loop0 disk.img

然后可以将/dev/loop0作为普通磁盘磁盘一样进行操作。比如使用gparted进行操作

gparted /dev/loop0

取消关联

losetup -d /dev/loop0

绕口令: msys2中的emacs支持bash on windows的bash

这个是偶然发现的。

过程是这样的。

我知道emacs 25.2已经出来一段时间了。只是太忙,懒的换了。昨天有点时间,就决定升级下。

在gnu emacs的官方网站上,提到了msys2中如何安装emacs。

我在windows上用的是msys,大约是6年前左右的版本,现在是win10上的bash on windows的linux环境,因为很多脚本只能在完整的linux下运行,依赖太多。

msys2是个什么鬼,比msys更好吧,看着这么容易安装,就试试。

确实很容易安装,竟然有软件管理器,竟然可以安装emacs,试试。

安装后的emacs可以直接在windows上运行,非常不错。既然这样,我就将之前的emacs删除了,然后,将启动emacs的配置中关于msys的bash的路径删除了(exec-path),只所以删除,是因为我认为在msys2中安装的emacs已经解决了bash的问题,会使用msys2的bash了。

一个美丽的误会就这样产生了。

emacs启动的非常完美,shell的启动也非常的完美,但等等,为什么shell提示的路径是/mnt/c/work,而不是/c/work,而lsb_release -a出来竟然是ubuntu 16.04!!!.

然后,我可以在emacs的shell中运行我想要的任何命令。几乎和在linux上一样。

bash on windows在处理链接上,是有区别的。于是,我是用了下magit,或者直接用快捷键在emacs下调用make,发现emacs中提示的路径格式还是C:/这样的windows格式,于是,这种模式下就无法继续进行了。

python笔记: 运行方式和from import

初步学习python,简单写了个代码

def test():
  from . import main
  main.test()

if __name__ == '__main__':
  test()

第二句话,在直接运行的时候一直报错:

SystemError: Parent module '' not loaded, cannot perform relative import

网上的解释是需要用模块的方式来运行。可我就随便写个test,如何以模块的方式运行?纠结了半天,原来在这个文件的上一级目录,目录 名称就是模块的名称。

比如,我这个文件放在test目录下,则需要在上一级目录中,直接以下面的方式运行

python -m test

但如果以这种方式运行,则需要将程序的入口放在目录的__main__.py中。比如,上面的代码保存在test/__main__.py中。

或许,默认以这种方式运行的话,会更适合模块开发吧。

linux 软件推荐 tsocks

很多时候,需要在命令行下使用代理,比如登录阿里的ecs后,需要下载被屏蔽的软件,或者更新docker等等,tsocks就是做这个事情的。

由于是临时应用,因此,ssh -D 1234 user@server 是最简单便捷的方式。

配置好/etc/tsocks.conf之后, 在要用代理的操作前,直接添加个tsocks即可。比如:

tsocks apt upgrade