wsl安装samba共享文件

在wsl里面可以直接访问修改windows的文件

windows下面只能读wsl目录里面的文件, 如果修改, 会导致这个文件在wsl下面权限出错.

通过samba修改文件就没有这个问题了.

另外, samba也可以代替windows自带的文件共享.

关闭win10自带的文件共享

在cmd下面输入 netstat -an | findstr /r "139 445" 可以看到当前445 端口已经被占用(win10 以前有用到139端口, win10只用445).

……

Continue reading

Debian 9 修改GRUB默认启动内核

debian testing 更新掉进systemd-240的坑里了
重启开机Missing modules (cat /proc/modules; ls /dev), 找不到硬盘.
只能降到systemd-239或者降内核.
想想还是降内核方便, 记录下修改步骤.

1. 查看当前内核的启动顺序

$ cat /boot/grub/grub.cfg

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  set have_grubenv=true
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default=0
fi

### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
	set gfxpayload="${1}"
}
set linux_gfx_mode=
export linux_gfx_mode
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-d689cedc-8dc2-4ebb-919f-fe47b628db44' {
	load_video
	insmod gzio
	if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
	insmod part_msdos
	insmod ext2
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  d689cedc-8dc2-4ebb-919f-fe47b628db44
	else
	  search --no-floppy --fs-uuid --set=root d689cedc-8dc2-4ebb-919f-fe47b628db44
	fi
	echo	'Loading Linux 4.19.0-1-amd64 ...'
	linux	/boot/vmlinuz-4.19.0-1-amd64 root=UUID=d689cedc-8dc2-4ebb-919f-fe47b628db44 ro  quiet
	echo	'Loading initial ramdisk ...'
	initrd	/boot/initrd.img-4.19.0-1-amd64
}
submenu 'Advanced options for Debian GNU/Linux' $menuentry_id_option 'gnulinux-advanced-d689cedc-8dc2-4ebb-919f-fe47b628db44' {
	menuentry 'Debian GNU/Linux, with Linux 4.19.0-1-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.0-1-amd64-advanced-d689cedc-8dc2-4ebb-919f-fe47b628db44' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos1'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  d689cedc-8dc2-4ebb-919f-fe47b628db44
		else
		  search --no-floppy --fs-uuid --set=root d689cedc-8dc2-4ebb-919f-fe47b628db44
		fi
		echo	'Loading Linux 4.19.0-1-amd64 ...'
		linux	/boot/vmlinuz-4.19.0-1-amd64 root=UUID=d689cedc-8dc2-4ebb-919f-fe47b628db44 ro  quiet
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-4.19.0-1-amd64
	}
	menuentry 'Debian GNU/Linux, with Linux 4.19.0-1-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.0-1-amd64-recovery-d689cedc-8dc2-4ebb-919f-fe47b628db44' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos1'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  d689cedc-8dc2-4ebb-919f-fe47b628db44
		else
		  search --no-floppy --fs-uuid --set=root d689cedc-8dc2-4ebb-919f-fe47b628db44
		fi
		echo	'Loading Linux 4.19.0-1-amd64 ...'
		linux	/boot/vmlinuz-4.19.0-1-amd64 root=UUID=d689cedc-8dc2-4ebb-919f-fe47b628db44 ro single 
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-4.19.0-1-amd64
	}
	menuentry 'Debian GNU/Linux, with Linux 4.18.0-3-amd64' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-3-amd64-advanced-d689cedc-8dc2-4ebb-919f-fe47b628db44' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos1'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  d689cedc-8dc2-4ebb-919f-fe47b628db44
		else
		  search --no-floppy --fs-uuid --set=root d689cedc-8dc2-4ebb-919f-fe47b628db44
		fi
		echo	'Loading Linux 4.18.0-3-amd64 ...'
		linux	/boot/vmlinuz-4.18.0-3-amd64 root=UUID=d689cedc-8dc2-4ebb-919f-fe47b628db44 ro  quiet
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-4.18.0-3-amd64
	}
	menuentry 'Debian GNU/Linux, with Linux 4.18.0-3-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-3-amd64-recovery-d689cedc-8dc2-4ebb-919f-fe47b628db44' {
		load_video
		insmod gzio
		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos1'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  d689cedc-8dc2-4ebb-919f-fe47b628db44
		else
		  search --no-floppy --fs-uuid --set=root d689cedc-8dc2-4ebb-919f-fe47b628db44
		fi
		echo	'Loading Linux 4.18.0-3-amd64 ...'
		linux	/boot/vmlinuz-4.18.0-3-amd64 root=UUID=d689cedc-8dc2-4ebb-919f-fe47b628db44 ro single 
		echo	'Loading initial ramdisk ...'
		initrd	/boot/initrd.img-4.18.0-3-amd64
	}
}

2. 修改grub文件

假设要修改为4.18.0-3内核启动, 修改文件文件/etc/default/grub

……

Continue reading

从git中永久删除文件

有时候历史提交添加过比较大的文件或者敏感文件, 后面也删掉了, 可是git历史记录里面还有, 也会占用空间.
这时候就要用下面的方法来永久删除了.

  1. 运行底层命令git verify-pack以识别出大对象, 对输出的第三列信息即文件大小进行排序
$git verify-pack -v .git/objects/pack/pack-6d6...b0b.idx -v | sort -n -k 3 | tail -5
034...2c4 blob   8943 3472 21832
ec2...08b blob   11117 3081 29005
270...9e8 blob   12687 4841 14122
d57...91a blob   17888 5654 41757
829...3e7 blob   25644 5743 65787

或者直接看全部idx文件

……

Continue reading

Debian 增加 add-apt-repository 命令用来添加 PPA 源

更新:
使用software-properties-common 代替脚本

sudo apt install -y apt-transport-https ca-certificates gnupg2 software-properties-common

==============================================================================

#!/bin/bash

if [ "$#" -ge "1" ]; then
    ppa_name=`echo "$1" | awk -F ':' '{print $2}'`
    app_name=`echo "$ppa_name" | cut -d '/' -f2-`

    if [ -z "$ppa_name" ]; then
        echo "PPA name not found"
        echo "Utility to add PPA repositories in your debian machine"
        echo "$0 ppa:user/ppa-name"
    else
        echo "$ppa_name" " $app_name"
        if [ "$2" != "" ]; then
            version=$2
        else
            version="xenial"
        fi  
        echo "deb http://ppa.launchpad.net/$ppa_name/ubuntu $version main" > /etc/apt/sources.list.d/$app_name.list
        apt-get update > /dev/null 2> /tmp/apt_add_key.txt    
        key=`cat /tmp/apt_add_key.txt | awk -F ":" '{print $6}'  | awk '{print $2}'`
        apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv $key
        rm -rf /tmp/apt_add_key.txt
    fi  
else
    echo "Utility to add PPA repositories in your debian machine"
    echo "$0 ppa:user/ppa-name"
fi

保存这个脚本到/usr/bin目录下,名称为add-apt-repository,然后执行下列命令即可:

……

Continue reading

[转]关于mklink的 /D /J 区别

mklink 其他我就不介绍了

由于/d /j 实在太像,所以这里实验和总结一下。

区别1:创建

/d 可以使用相对路径方式创建

/j 必须绝对路径方式创建

此区别意义不大,建议所有的mklink目录均用绝对路径创建

区别2:复制和剪切

复制:/d /j 均生成源目录的内容副本,变为一般文件夹

剪切/移动:
/d 生成的目录,移动到其他地方,仍旧保持链接。对源目录无影响,/d生成的目录消失

……

Continue reading

wsl开机启动ssh服务并开启32bit支持

在开机启动目录C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp加入vbs脚本

Set ws = WScript.CreateObject("WScript.Shell")
cmd = "C:\Windows\System32\bash.exe -c ""bash /home/init.sh"""
' 运行命令不显示cmd窗口
ws.Run cmd, 0, false
Set ws = Nothing
WScript.quit

创建/home/init.sh文件

#!/bin/bash

# 自动输入sudo密码
sudo -S service ssh start << EOF
.
EOF

# 启用32bit支持
sudo service binfmt-support start

# 运行bash.exe不退出
while true
do
    sleep 600
done

开启wsl 32bit支持(通过qemu模拟, 参考https://github.com/Microsoft/WSL/issues/2468#issuecomment-374904520)

……

Continue reading

Repo 常用命令

repo介绍

Android 使用 Git 作为代码管理工具, 开发了 Gerrit 进行代码审核以便更好的对代码进行集中式管理, 
还开发了 Repo 命令行工具,对 Git 部分命令封装,将百多个 Git 库有效的进行组织.

源代码标记和细分版本

https://source.android.google.cn/setup/start/build-numbers#source-code-tags-and-builds

使用国内源

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
export REPO_URL='https://gerrit-googlesource.proxy.ustclug.org/git-repo'

建立本地镜像

repo init -u git://mirrors.ustc.edu.cn/aosp/mirror/manifest --mirror
repo sync
/usr/bin/git daemon --verbose --export-all --base-path=/mnt /mnt/mirror-aosp

初始化repo

repo init -u git://127.0.0.1/mirror-aosp/platform/manifest
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-8.0.0_r1

下载代码

repo sync

查看全部版本

cd .repo/manifests
git branch --all

查看分支

repo branch

创建并切换分支

repo init -b android-8.0.0_r23
repo start --all android-8.0.0_r23

切换分支

对 git checkout 的封装,但不能带-b参数,所以不能用此命令来创建特性分支
repo checkout android-8.0.0_r23

查看工作区文件差异

git diff 的封装,用于分别显示各个项目工作区下的文件差异
repo diff                                 ---查看所有项目
repo diff platform/build platform/bionic  ---只查看其中两个项目

把文件添加到index表中

对 git add --interactive 的封装, 用于挑选各个项目工作区中的改动以加入暂存区
repo stage -i [<project>…]
    -i 代表 git add --interactive 命令中的 --interactive, 给出个界面供用户选择

删除已经合并分支

对 git branch –d 的封装,该命令用于扫面项目的各个分支,并删除已经合并的分支
repo prune [<project>…]

删除指定分支

对git branch –D 的封装
repo abandon <branchname> [<project>…]

查看文件状态

repo status
对 git diff-index, git diff-filse 的封装, 同时显示暂存区的状态和本地文件修改的状态
每个小节的首行显示羡慕名称,以及所在分支的名称,

第一个字母表示暂存区的文件修改状态
    -:没有改变
    A:添加(不在HEAD中,在暂存区中)
    M:修改(在HEAD中,在暂存区中,内容不同)
    D:删除(在HEAD中,不在暂存区)
    R:重命名(不在HEAD中,在暂存区,路径修改)
    C:拷贝(不在HEAD中,在暂存区,从其他文件拷贝)
    T:文件状态改变(在HEAD中,在暂存区,内容相同)
    U:未合并,需要冲突解决

第二个字母表示工作区文件的更改状态
    -:新/未知(不在暂存区,在工作区)
    m:修改(在暂存区,在工作区,被修改)
    d:删除(在暂存区,不在工作区)

两个表示状态的字母后面,显示文件名信息。如果有文件重名还会显示改变前后的文件名及文件的相似度

设置远程仓库

这个指令是根据xml文件添加的远程分支, 方便于向服务器提交代码, 执行之后的build目录下看到新的远程分支org
repo remote add <remotename>  <url> [<project>…]
repo remote rm <remotename>  [<project>…]

向服务器提交代码

repo push <remotename> [--all |<project>…]
repo会自己查询需要向服务器提交的项目并提示用户.

repo forall

repo forall [<project>…] –c <command>
迭代器,可以在所有指定的项目中执行同一个shell指令
Options:
    -c:后面所带的参数着是shell指令
    -p:在shell指令输出之前列出项目名称
    -v:列出执行shell指令输出的错误信息

additional environment variables:
    REPO_PROJECT:指定项目的名称
    REPO_PATH:指定项目在工作区的相对路径
    REPO_REMOTE:指定项目远程仓库的名称
    REPO_LREV:指定项目最后一次提交服务器仓库对应的哈希值
    REPO_RREV:指定项目在克隆时的指定分支,manifest里的revision属性

如果-c后面所带的shell指令中有上述环境变量,则需要用单引号把shell指令括起来.
    repo forall –c 'echo $REPO_PROJECT'

清除所有修改及更新命令

repo forall -c "pwd;git clean -f;git checkout -f";repo sync -c --no-tags;repo sync -l;

merge(合并多个分支)

把所有项目多切换到master分支,执行以下指令将topic分支合并到master分支
repo forall –p –c git merge topic

tag(打标签)

在所有项目下打标签
repo forall –c git tag crane-stable-1.6

remote (设置远程仓库)

引用环境变量REPO_PROJECT添加远程仓库:
repo forall –c ‘git remote add korg ssh://[email protected]/$REPO_PROJECT.git’

删除远程仓库:

repo forall –c git remote add korg

branch(创建特性分支)

repo forall –c git branch crane-dev
repo forall –c git checkout –b crane-dev

repo的额外命令集

repo grep

对 git grep 的封装,用于在项目文件中进行内容查找

显示manifest文件内容

repo manifest –o android.xml

显示repo的版本号

repo version

repo upload

repo upload相当于git push,但是又有很大的不同,它不是将版本库改动推送到克隆时的远程服务器,
而是推送到代码审核服务器(Gerrit软件架设)的特殊引用上,使用SSH协议.
代码审核服务器会对推送的提交进行特殊处理,将新的提交显示为一个待审核的修改集,并进入代码审查流程,
只有当审核通过后,才会合并到官方正式的版本库中.

repo upload [--re --cc] {[<project>]… | --replace <project>}
 Options:
    -h, --help:显示帮助信息
    -t:发送本地分支名称到Gerrit代码审核服务器
    --replace:发送此分支的更新补丁集
    --re=REVIEWERS:要求指定的人员进行审核
    --cc=CC:同时发送通知到如下邮件地址

repo download

主要用于代码审核者下载和评估贡献者提交的修订
repo download {project change [patchset]}…

repo selfupdate

用于repo自身的更新

参考:

……

Continue reading

ubuntu 16.04 vsftp配置

添加用户
useradd -d /home/xmarks -s /usr/sbin/nologin -m xmarks

local_enable=YES
write_enable=YES

限制系统用户锁定在家目录
chroot_local_user=YES
allow_writeable_chroot=YES

530 Login incorrect
/etc/vsftpd.conf: pam_service_name=ftp

550 Create directory operation failed
chmod 777 /home/xmarks

允许匿名用户读写
local_root=/home/ftp
anon_root=/home/ftp
anon_upload_enable=YES
anon_mkdir_write_enable=yes
local_enable=NO
write_enable=YES
/home/ftp root root 755
里面建个pub 目录, ftp root 755
就可以在pub 目录里上传文件了

……

Continue reading

ubuntu 16.04 + lnmp1.3 搭建 owncloud

360倒下后, 百度越来越慢了, 坚果云用起来很不习惯,只能自己搭个同步盘用用了

开始试了seafile, 很容易搭建, 就是免费版本少了搜索功能-_- 没这功能没法忍啊…

转向owncloud, 虽然看网上的评价说是慢了点, 实际体验配合php7感觉速度还行, 安装过程还算顺利, 记录下搭建过程中碰到的几个问题.

……

Continue reading