├── .github └── workflows │ ├── alpine.yml │ ├── ci.yml │ ├── cross-compile-mingw-w64.yml │ ├── cross-compile-ndk.yml │ ├── cygwin.yml │ ├── freebsd.yml │ ├── msys2.yml │ ├── netbsd.yml │ └── openbsd.yml ├── GNUstep ├── HelloOC │ ├── GNUmakefile │ └── HelloOC.m └── setup-on-gnu-linux.sh ├── OpenArkCompiler └── Dockerfile ├── README.md ├── android └── sdk │ ├── Dockerfile │ ├── Dockerfile-deprecated │ ├── setup-on-gnu-linux.sh │ └── setup-on-macos.sh ├── bash-completion └── setup.sh ├── brew └── setup.sh ├── development-env └── setup-on-macos.sh ├── fbterm ├── download_libx86.sh └── setup.sh ├── gentoo ├── genfstab ├── install-before-chroot.sh └── install-in-chroot.sh ├── gifts ├── cake │ ├── .zip │ ├── data.json │ └── images │ │ ├── img_0.png │ │ ├── img_1.png │ │ ├── img_10.png │ │ ├── img_11.png │ │ ├── img_12.png │ │ ├── img_13.png │ │ ├── img_14.png │ │ ├── img_15.png │ │ ├── img_16.png │ │ ├── img_17.png │ │ ├── img_18.png │ │ ├── img_19.png │ │ ├── img_2.png │ │ ├── img_20.png │ │ ├── img_21.png │ │ ├── img_22.png │ │ ├── img_23.png │ │ ├── img_24.png │ │ ├── img_25.png │ │ ├── img_26.png │ │ ├── img_27.png │ │ ├── img_28.png │ │ ├── img_3.png │ │ ├── img_4.png │ │ ├── img_5.png │ │ ├── img_6.png │ │ ├── img_7.png │ │ ├── img_8.png │ │ └── img_9.png ├── car │ ├── .zip │ ├── data.json │ └── images │ │ ├── img_0.png │ │ ├── img_1.png │ │ ├── img_10.png │ │ ├── img_11.png │ │ ├── img_12.png │ │ ├── img_13.png │ │ ├── img_14.png │ │ ├── img_15.png │ │ ├── img_16.png │ │ ├── img_17.png │ │ ├── img_18.png │ │ ├── img_19.png │ │ ├── img_2.png │ │ ├── img_20.png │ │ ├── img_21.png │ │ ├── img_22.png │ │ ├── img_23.png │ │ ├── img_24.png │ │ ├── img_25.png │ │ ├── img_26.png │ │ ├── img_27.png │ │ ├── img_28.png │ │ ├── img_3.png │ │ ├── img_4.png │ │ ├── img_5.png │ │ ├── img_6.png │ │ ├── img_7.png │ │ ├── img_8.png │ │ └── img_9.png └── package-gift.sh ├── git ├── git-2.30.0-linux-glibc.xz └── setup-latest.sh ├── ios ├── archive.plist └── tool.sh ├── kmscon └── setup.sh ├── nvm └── setup.sh ├── oh-my-fish └── setup.sh ├── oh-my-tmux └── setup.sh ├── oh-my-zsh └── setup.sh ├── redex └── Dockerfile ├── vcpkg └── setup.sh ├── xwiki └── setup-on-gnu-linux.sh ├── yum └── repository.sh ├── zentao └── setup-on-gnu-linux.sh └── zhcon └── setup.sh /.github/workflows/alpine.yml: -------------------------------------------------------------------------------- 1 | name: AlpineLinux 2 | on: [push] 3 | jobs: 4 | build-on-alpine: 5 | container: alpine:3.13.2 6 | 7 | steps: 8 | - uses: actions/checkout@v2 9 | 10 | - run: pwd && ls 11 | - run: apk add libc-dev gcc make automake autoconf pkgconf git file diffutils 12 | 13 | - run: cc --version 14 | 15 | - run: git clone https://github.com/universal-ctags/ctags 16 | - run: cd ctags 17 | - run: ./autogen.sh 18 | - run: ./configure --prefix=/usr 19 | - run: make 20 | - run: sudo make install 21 | - run: file /usr/bin/ctags 22 | - run: ctags --version 23 | - run: make check 24 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: ci workflow 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | build: 11 | # https://docs.github.com/en/free-pro-team@latest/actions/reference/specifications-for-github-hosted-runners#supported-runners-and-hardware-resources 12 | strategy: 13 | matrix: 14 | os: [ubuntu-16.04, ubuntu-18.04, ubuntu-20.04, macos-11.0, macos-10.15] 15 | 16 | runs-on: ${{ matrix.os }} 17 | 18 | env: 19 | HOMEBREW_NO_INSTALL_CLEANUP: set 20 | 21 | steps: 22 | - run: export -p 23 | 24 | - run: brew list --formula 25 | 26 | - if: matrix.os == 'macos-11.0' || matrix.os == 'macos-10.15' 27 | run: brew install coreutils 28 | 29 | - name: list all bins 30 | run: | 31 | for path in $(echo "$PATH" | tr : ' ') 32 | do 33 | for item in $(ls "$path" 2> /dev/null) 34 | do 35 | COMMAND="$path/$item" 36 | if [ -f "$COMMAND" -a -x "$COMMAND" ] ; then 37 | REALPATH=$(realpath "$COMMAND") 38 | if [ "$COMMAND" = "$REALPATH" ] ; then 39 | printf "|%15s|%s|\n" "$item" "$COMMAND" 40 | else 41 | printf "|%15s|%s -> %s|\n" "$item" "$COMMAND" "$REALPATH" 42 | fi 43 | fi 44 | done 45 | done 46 | 47 | - name: brew install ... 48 | run: | 49 | #brew upgrade python@3.9 || brew link --overwrite python@3.9 50 | brew install libxml2 automake pkg-config jansson libyaml bash gdb docutils 51 | -------------------------------------------------------------------------------- /.github/workflows/cross-compile-mingw-w64.yml: -------------------------------------------------------------------------------- 1 | name: cross compile with mingw-w64 2 | on: [push] 3 | jobs: 4 | compile: 5 | strategy: 6 | fail-fast: false 7 | matrix: 8 | build-machine-os: [ubuntu-16.04, ubuntu-18.04, ubuntu-20.04, macos-10.15] 9 | target-arch: [i686,x86_64] 10 | env: 11 | TARGET: ${{ matrix.target-arch }}-w64-mingw32 12 | CC: ${{ matrix.target-arch }}-w64-mingw32-gcc 13 | AR: ${{ matrix.target-arch }}-w64-mingw32-ar 14 | RANLIB: ${{ matrix.target-arch }}-w64-mingw32-ranlib 15 | WINDRES: ${{ matrix.target-arch }}-w64-mingw32-windres 16 | CFLAGS: -v 17 | 18 | runs-on: ${{ matrix.build-machine-os }} 19 | 20 | steps: 21 | #- uses: actions/checkout@v2 22 | 23 | - run: brew install mingw-w64 gcc make automake autoconf file 24 | 25 | - run: git clone https://github.com/universal-ctags/ctags 26 | - run: mv ctags/* . 27 | - run: ./autogen.sh 28 | - run: ./configure --host=$TARGET --disable-iconv --disable-xml --disable-json --disable-yaml CC=$CC CFLAGS=$CFLAGS AR=$AR RANLIB=$RANLIB WINDRES=$WINDRES 29 | - run: make V=1 30 | - run: file ctags.exe | grep PE32 31 | -------------------------------------------------------------------------------- /.github/workflows/cross-compile-ndk.yml: -------------------------------------------------------------------------------- 1 | name: cross compile with ndk 2 | on: [push] 3 | jobs: 4 | compile: 5 | strategy: 6 | fail-fast: false 7 | matrix: 8 | build-machine-os: [ubuntu-16.04, ubuntu-18.04, ubuntu-20.04, macos-10.15] 9 | 10 | runs-on: ${{ matrix.build-machine-os }} 11 | 12 | steps: 13 | #- uses: actions/checkout@v2 14 | 15 | - run: brew install gcc make automake autoconf file 16 | 17 | - run: git clone https://github.com/universal-ctags/ctags 18 | - run: mv ctags/* . && rm -rf ctags 19 | - run: ./autogen.sh 20 | - run: | 21 | BUILD_MACHINE_OS_TYPE=$(uname | tr A-Z a-z) 22 | BUILD_MACHINE_OS_ARCH=$(uname -m) 23 | 24 | TOOLCHAIN_BASE_DIR=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/$BUILD_MACHINE_OS_TYPE-$BUILD_MACHINE_OS_ARCH 25 | TOOLCHAIN_BIN_DIR=$TOOLCHAIN_BASE_DIR/bin 26 | SYSROOT=$TOOLCHAIN_BASE_DIR/sysroot 27 | 28 | export CC=$TOOLCHAIN_BIN_DIR/armv7a-linux-androideabi21-clang 29 | export AR=$TOOLCHAIN_BIN_DIR/arm-linux-androideabi-ar 30 | export RANLIB=$TOOLCHAIN_BIN_DIR/arm-linux-androideabi-ranlib 31 | 32 | export CFLAGS="--sysroot $SYSROOT -Qunused-arguments -Os -fpic" 33 | export CPPFLAGS="--sysroot $SYSROOT -Qunused-arguments" 34 | export LDFLAGS="--sysroot $SYSROOT" 35 | 36 | TARGET=armv7a-linux-androideabi 37 | 38 | COLOR_PURPLE='\033[0;35m' # Purple 39 | COLOR_GREEN='\033[0;32m' # Green 40 | COLOR_OFF='\033[0m' # Reset 41 | 42 | run() { 43 | echo "$COLOR_PURPLE==>$COLOR_OFF $COLOR_GREEN$@$COLOR_OFF" 44 | eval "$*" 45 | } 46 | 47 | run ./configure --host=$TARGET --disable-iconv --disable-xml --disable-json --disable-yaml CC="$CC" CFLAGS="\"$CFLAGS\"" CPPFLAGS="\"$CPPFLAGS\"" LDFLAGS="\"$LDFLAGS\"" AR=$AR RANLIB=$RANLIB 48 | - run: make V=1 49 | - run: file ctags | grep 'ELF 32-bit LSB shared object, ARM, EABI5' 50 | -------------------------------------------------------------------------------- /.github/workflows/cygwin.yml: -------------------------------------------------------------------------------- 1 | name: Cygwin 2 | on: [push] 3 | jobs: 4 | build-on-Cygwin: 5 | runs-on: windows-latest 6 | 7 | defaults: 8 | run: 9 | shell: C:\tools\cygwin\bin\bash.exe -l -i {0} 10 | 11 | steps: 12 | - uses: actions/checkout@v2 13 | 14 | - run: choco install -y --source cygwin gcc-g++ make automake autoconf pkg-config dos2unix libiconv-devel libjansson-devel libxml2-devel libyaml-devel 15 | shell: pwsh 16 | 17 | - run: git config --global core.autocrlf input 18 | 19 | - run: git clone https://github.com/universal-ctags/ctags 20 | 21 | - run: mv ctags/* . 22 | 23 | - run: ./autogen.sh 24 | - run: ./configure --prefix=/usr 25 | - run: make V=1 26 | - run: make install 27 | - run: file /usr/bin/ctags 28 | - run: /usr/bin/ctags --version 29 | - run: make check V=1 APPVEYOR=1 30 | - run: make roundtrip 31 | -------------------------------------------------------------------------------- /.github/workflows/freebsd.yml: -------------------------------------------------------------------------------- 1 | name: FreeBSD 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | testing: 11 | runs-on: macos-10.15 12 | 13 | steps: 14 | - uses: actions/checkout@v2 15 | 16 | - uses: vmactions/freebsd-vm@v0.1.0 17 | with: 18 | usesh: true 19 | run: | 20 | run() { 21 | printf "\033[0;35m==>\033[0m \033[0;32m%b\n\033[0m" "$*" 22 | $@ 23 | } 24 | run pkg install -y git automake pkgconf 25 | run freebsd-version 26 | run cc --version 27 | run git clone https://github.com/universal-ctags/ctags 28 | run cd ctags 29 | run ./autogen.sh 30 | run ./configure --prefix=/usr 31 | run make 32 | run make install 33 | run file ctags 34 | run ctags --version 35 | run make check 36 | run make roundtrip 37 | -------------------------------------------------------------------------------- /.github/workflows/msys2.yml: -------------------------------------------------------------------------------- 1 | name: MSYS2 2 | on: [push] 3 | jobs: 4 | build-on-MSYS2: 5 | runs-on: windows-latest 6 | 7 | strategy: 8 | fail-fast: false 9 | matrix: 10 | msystem: [MSYS, MINGW32, MINGW64] 11 | 12 | defaults: 13 | run: 14 | shell: msys2 {0} 15 | 16 | steps: 17 | - uses: actions/checkout@v2 18 | 19 | - uses: msys2/setup-msys2@v2 20 | with: 21 | msystem: ${{ matrix.msystem }} 22 | update: true 23 | install: git make automake autoconf pkg-config python dos2unix 24 | 25 | - if: matrix.msystem == 'MSYS' 26 | run: pacman -S --noconfirm gcc libiconv-devel 27 | 28 | - if: matrix.msystem == 'MINGW32' 29 | run: pacman -S --noconfirm mingw-w64-i686-toolchain 30 | 31 | - if: matrix.msystem == 'MINGW64' 32 | run: pacman -S --noconfirm mingw-w64-x86_64-toolchain 33 | 34 | - run: | 35 | run() { 36 | printf "\033[0;35m==>\033[0m \033[0;32m%b\n\033[0m" "$*" 37 | $@ 38 | } 39 | run git clone https://github.com/universal-ctags/ctags 40 | run cd ctags 41 | 42 | run ./autogen.sh 43 | run ./configure --prefix=/usr 44 | run make V=1 45 | run file ./ctags.exe 46 | run ./ctags.exe --version 47 | run make check V=1 APPVEYOR=1 48 | run make roundtrip 49 | -------------------------------------------------------------------------------- /.github/workflows/netbsd.yml: -------------------------------------------------------------------------------- 1 | name: NetBSD 2 | on: [push] 3 | jobs: 4 | build-on-netbsd: 5 | runs-on: macos-latest 6 | steps: 7 | - uses: actions/checkout@v2 8 | 9 | - uses: leleliu008/github-actions-vagrant@v1 10 | with: 11 | mem: 2048 12 | box: generic/netbsd9 13 | run: | 14 | run pwd 15 | run ls 16 | 17 | run sudo pkgin -y install mozilla-rootcerts git automake pkg-config 18 | 19 | run sudo mozilla-rootcerts install 20 | 21 | run cc --version 22 | 23 | run git clone https://github.com/universal-ctags/ctags 24 | run cd ctags 25 | run ./autogen.sh 26 | run ./configure --prefix=/usr 27 | run make 28 | run sudo make install 29 | run file /usr/bin/ctags 30 | run ctags --version 31 | run make check 32 | -------------------------------------------------------------------------------- /.github/workflows/openbsd.yml: -------------------------------------------------------------------------------- 1 | name: OpenBSD 2 | on: [push] 3 | jobs: 4 | build-on-openbsd: 5 | runs-on: macos-latest 6 | steps: 7 | - uses: actions/checkout@v2 8 | 9 | - uses: leleliu008/github-actions-vagrant@v1 10 | with: 11 | mem: 2048 12 | box: generic/openbsd6 13 | run: | 14 | export AUTOCONF_VERSION=2.69 15 | export AUTOMAKE_VERSION=1.16 16 | 17 | export CFLAGS='-I/usr/local/include -L/usr/local/lib' 18 | 19 | if [ ! -f /usr/local/lib/libiconv.so ] ; then 20 | sudo ln -s /usr/local/lib/libiconv.so.* /usr/local/lib/libiconv.so 21 | fi 22 | 23 | run pwd 24 | run ls 25 | 26 | run sudo pkg_add git automake-1.16.2 27 | 28 | run cc --version 29 | 30 | run git clone https://github.com/universal-ctags/ctags 31 | run cd ctags 32 | run ./autogen.sh 33 | run ./configure --prefix=/usr 34 | run make 35 | run sudo make install 36 | run file /usr/bin/ctags 37 | run ctags --version 38 | run make check 39 | -------------------------------------------------------------------------------- /GNUstep/HelloOC/GNUmakefile: -------------------------------------------------------------------------------- 1 | GNUSTEP_MAKEFILES = /usr/share/GNUstep/Makefiles 2 | 3 | include $(GNUSTEP_MAKEFILES)/common.make 4 | 5 | TOOL_NAME = HelloOC 6 | HelloOC_OBJC_FILES = HelloOC.m 7 | 8 | include $(GNUSTEP_MAKEFILES)/tool.make 9 | -------------------------------------------------------------------------------- /GNUstep/HelloOC/HelloOC.m: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | int main(int argc, const char * argv[]) { 4 | NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 5 | 6 | NSLog(@"Hello Objective-C"); 7 | 8 | [pool drain]; 9 | 10 | return 0; 11 | } 12 | -------------------------------------------------------------------------------- /GNUstep/setup-on-gnu-linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | [ "$(whoami)" = "root" ] || sudo=sudo 4 | 5 | Color_Purple='\033[0;35m' # Purple 6 | Color_Off='\033[0m' # Reset 7 | 8 | msg() { 9 | printf "%b\n" "$1" 10 | } 11 | 12 | info() { 13 | msg "${Color_Purple}[❉]${Color_Off} $1$2" 14 | } 15 | 16 | # GNUstep的v1版(不支持Objectie-C 2.0) 17 | installViaApt() { 18 | $sudo apt-get -y update && 19 | $sudo apt-get -y install bash make gobjc gnustep gnustep-devel && 20 | $sudo sh /usr/share/GNUstep/Makefiles/GNUstep.sh 21 | } 22 | 23 | URL=http://ftpmain.gnustep.org/pub/gnustep/core/gnustep-startup-0.32.0.tar.gz 24 | FILENAME=$(basename "$URL") 25 | 26 | downloadIfNeed() { 27 | [ -f "$FILENAME" ] && tar -tf "$FILENAME" > /dev/null 2>&1 && return 0 28 | info "Downloading $URL" 29 | curl -C - -LO "$URL" 30 | } 31 | 32 | setEnv() { 33 | str=". /usr/GNUstep/System/Library/Makefiles/GNUstep.sh" 34 | [ -f "$1" ] && grep "$str" "$1" || return 0 35 | printf "%s\n" "$str" "$1" 36 | } 37 | 38 | # GNUstep的v1版(不支持Objectie-C 2.0) 39 | installViaYum() { 40 | $sudo yum -y update && 41 | $sudo yum -y install bash which make gcc gcc-objc libobjc libjpeg libjpeg-devel libpng libpng-devel libtiff libtiff-devel libxml2 libxml2-devel libX11-devel libXt-devel libxslt libxslt-devel libicu libicu-devel gnutls gnutls-devel libffi-devel 42 | downloadIfNeed && 43 | tar zvxf "$FILENAME" && 44 | cd "$(basename "$FILENAME" .tar.gz)" && 45 | info "Installing ..." && 46 | ./configure && 47 | printf "\n\n" | make && 48 | $sudo sh /usr/GNUstep/System/Library/Makefiles/GNUstep.sh 49 | setEnv "$HOME/.bashrc" 50 | setEnv "$HOME/.zshrc" 51 | } 52 | 53 | main() { 54 | command -v apt-get > /dev/null && { 55 | installViaApt 56 | exit 57 | } 58 | 59 | command -v yum > /dev/null && { 60 | installViaYum 61 | exit 62 | } 63 | 64 | info "not support your os."; 65 | exit 1 66 | } 67 | 68 | main 69 | -------------------------------------------------------------------------------- /OpenArkCompiler/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:16.04 2 | 3 | MAINTAINER 792793182@qq.com 4 | 5 | RUN rm /etc/apt/sources.list && \ 6 | echo "\ 7 | deb http://mirrors.huaweicloud.com/ubuntu/ bionic main restricted universe multiverse\n\ 8 | deb http://mirrors.huaweicloud.com/ubuntu/ bionic-security main restricted universe multiverse\n\ 9 | deb http://mirrors.huaweicloud.com/ubuntu/ bionic-updates main restricted universe multiverse\n\ 10 | deb http://mirrors.huaweicloud.com/ubuntu/ bionic-proposed main restricted universe multiverse\n\ 11 | deb http://mirrors.huaweicloud.com/ubuntu/ bionic-backports main restricted universe multiverse" \ 12 | >> /etc/apt/sources.list && \ 13 | apt-get update && \ 14 | apt-get install -y curl tar gzip openjdk-8-jdk && \ 15 | apt-get clean && \ 16 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ 17 | curl -L https://www.openarkcompiler.cn/download/OpenArkCompiler-0.2-ubuntu-16.04-x86_64.tar.gz | tar zxv 18 | 19 | WORKDIR /OpenArkCompiler-0.2-ubuntu-16.04-x86_64 20 | 21 | ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 22 | ENV PATH ${PATH}:/OpenArkCompiler-0.2-ubuntu-16.04-x86_64/bin 23 | ENV LANG C.UTF-8 24 | 25 | CMD [ "bash" ] 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # auto 2 | 自动化脚本集合,提高工作效率,解放你的双手,让你有更多的时间喝茶 3 | 4 | |一级路径|二级路径|说明| 5 | |-|-|-| 6 | |GNUstep|[setup-on-gnu-linux.sh](https://github.com/leleliu008/auto/blob/master/GNUstep/setup-on-gnu-linux.sh)|在[GNU/Linux](http://blog.fpliu.com/it/os/Unix-like/GNU-Linux)上搭建[GNUstep](http://blog.fpliu.com/it/software/GNUstep)的[POSIX Shell](http://blog.fpliu.com/it/software/sh)脚本| 7 | |zentao|[setup-on-gnu-linux.sh](https://github.com/leleliu008/auto/blob/master/zentao/setup-on-gnu-linux.sh)|在[GNU/Linux](http://blog.fpliu.com/it/os/Unix-like/GNU-Linux)上搭建[禅道](http://blog.fpliu.com/it/software/zentao)的[POSIX Shell](http://blog.fpliu.com/it/software/sh)安装脚本| 8 | |xwiki|[setup-on-gnu-linux.sh](https://github.com/leleliu008/auto/blob/master/xwiki/setup-on-gnu-linux.sh)|在[GNU/Linux](http://blog.fpliu.com/it/os/Unix-like/GNU-Linux)上搭建[XWiki](http://blog.fpliu.com/it/software/XWiki)的[POSIX Shell](http://blog.fpliu.com/it/software/sh)安装脚本| 9 | |git|[setup-latest.sh](https://github.com/leleliu008/auto/blob/master/git/setup-latest.sh)|最新版本[git](http://blog.fpliu.com/it/software/git)的[POSIX Shell](http://blog.fpliu.com/it/software/sh)安装脚本| 10 | |bash-completion|[setup.sh](https://github.com/leleliu008/auto/blob/master/bash-completion/setup.sh)|[bash-completion](http://blog.fpliu.com/it/software/bash-completion)的[POSIX Shell](http://blog.fpliu.com/it/software/sh)安装脚本| 11 | |brew|[setup.sh](https://github.com/leleliu008/auto/blob/master/brew/setup.sh)|[HomeBrew](http://blog.fpliu.com/it/os/macOS/software/HomeBrew)和[LinuxBrew](http://blog.fpliu.com/it/software/LinuxBrew)的[POSIX Shell](http://blog.fpliu.com/it/software/sh)安装脚本| 12 | |nvm|[setup.sh](https://github.com/leleliu008/auto/blob/master/nvm/setup.sh)|[nvm](http://blog.fpliu.com/it/software/nvm)的[POSIX Shell](http://blog.fpliu.com/it/software/sh)安装脚本| 13 | |oh-my-tmux|[setup.sh](https://github.com/leleliu008/auto/blob/master/oh-my-tmux/setup.sh)|[oh-my-tmux](http://blog.fpliu.com/it/software/Tmux#conf)的[POSIX Shell](http://blog.fpliu.com/it/software/sh)安装脚本| 14 | |oh-my-zsh|[setup.sh](https://github.com/leleliu008/auto/blob/master/oh-my-zsh/setup.sh)|[oh-my-zsh](http://blog.fpliu.com/it/software/Oh-My-Zsh)的[POSIX Shell](http://blog.fpliu.com/it/software/sh)安装脚本| 15 | |oh-my-fish|[setup.sh](https://github.com/leleliu008/auto/blob/master/oh-my-fish/setup.sh)|[oh-my-fish](http://blog.fpliu.com/it/software/Oh-My-Fish)的[POSIX Shell](http://blog.fpliu.com/it/software/sh)安装脚本| 16 | |vcpkg|[setup.sh](https://github.com/leleliu008/auto/blob/master/vcpkg/setup.sh)|[vcpkg](http://blog.fpliu.com/it/software/vcpkg)的[POSIX Shell](http://blog.fpliu.com/it/software/sh)安装脚本| 17 | |OpenArkCompiler|[Dockerfile](https://github.com/leleliu008/auto/blob/master/OpenArkCompiler/Dockerfile)|[华为方舟编译器](http://blog.fpliu.com/it/software/华为方舟编译器)的[Docker](http://blog.fpliu.com/it/software/Docker)镜像构建脚本| 18 | |redex|[Dockerfile](https://github.com/leleliu008/auto/blob/master/redex/Dockerfile)|[ReDex](http://blog.fpliu.com/it/software/ReDex)的[Docker](http://blog.fpliu.com/it/software/Docker)镜像构建脚本| 19 | |android/sdk|[Dockerfile](https://github.com/leleliu008/auto/blob/master/android/sdk/Dockerfile)|[AndroidSDK](http://blog.fpliu.com/it/software/AndroidSDK)的[Docker](http://blog.fpliu.com/it/software/Docker)镜像构建脚本| 20 | |android/sdk|[setup-on-gnu-linux.sh](https://github.com/leleliu008/auto/blob/master/android/sdk/setup-on-gnu-linux.sh)|在[GNU/Linux](http://blog.fpliu.com/it/os/Unix-like/GNU-Linux)上搭建[AndroidSDK](http://blog.fpliu.com/it/software/AndroidSDK)的[POSIX Shell](http://blog.fpliu.com/it/software/sh)脚本| 21 | |android/sdk|[setup-on-macos.sh](https://github.com/leleliu008/auto/blob/master/android/sdk/setup-on-macos.sh)|在[macOS](http://blog.fpliu.com/it/os/macOS)上搭建[AndroidSDK](http://blog.fpliu.com/it/software/AndroidSDK)的[POSIX Shell](http://blog.fpliu.com/it/software/sh)脚本| 22 | |ios|[tool.sh](https://github.com/leleliu008/auto/blob/master/ios/tool.sh)|[iOS](http://blog.fpliu.com/it/os/iOS)的[POSIX Shell](http://blog.fpliu.com/it/software/sh)自动构建脚本| 23 | 24 | ## other resources 25 | - [oh-my-vim](https://github.com/leleliu008/oh-my-vim) 26 | - [autogen.sh](https://github.com/leleliu008/autogen.sh) 27 | - [cmakew](https://github.com/leleliu008/cmakew) 28 | - [zpkg](https://github.com/leleliu008/zpkg) 29 | - [ipkg](https://github.com/leleliu008/ipkg) 30 | - [ndk-pkg](https://github.com/leleliu008/ndk-pkg) 31 | - [androidx](https://github.com/leleliu008/androidx) 32 | -------------------------------------------------------------------------------- /android/sdk/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:18.04 2 | 3 | MAINTAINER 792793182@qq.com 4 | 5 | # Android SDK Tools下载地址:https://developer.android.google.cn/studio 6 | RUN rm /etc/apt/sources.list && \ 7 | echo "\ 8 | deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse\n\ 9 | deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse\n\ 10 | deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse\n\ 11 | deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse\n\ 12 | deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" \ 13 | >> /etc/apt/sources.list && \ 14 | apt-get update && \ 15 | apt-get install -y curl unzip openjdk-8-jdk && \ 16 | apt-get clean && \ 17 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ 18 | mkdir -p /usr/local/share/android-sdk && \ 19 | cd /usr/local/share/android-sdk && \ 20 | curl -LO https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip && \ 21 | unzip sdk-tools-linux-4333796.zip && \ 22 | rm sdk-tools-linux-4333796.zip && \ 23 | cd tools/bin && \ 24 | echo y | ./sdkmanager "platforms;android-28" && \ 25 | echo y | ./sdkmanager "platform-tools" && \ 26 | echo y | ./sdkmanager "build-tools;28.0.3" 27 | 28 | ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 29 | ENV ANDROID_HOME /usr/local/share/android-sdk 30 | ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/build-tools/28.0.3 31 | ENV LANG C.UTF-8 32 | 33 | CMD [ "bash" ] 34 | -------------------------------------------------------------------------------- /android/sdk/Dockerfile-deprecated: -------------------------------------------------------------------------------- 1 | #参考:https://hub.docker.com/r/jacekmarchwicki/android/dockerfile 2 | #此方式已经失效,参考:https://launchpad.net/~webupd8team/+archive/ubuntu/java 3 | 4 | FROM ubuntu:18.04 5 | 6 | MAINTAINER 792793182@qq.com 7 | 8 | # Android SDK Tools下载地址:https://developer.android.google.cn/studio 9 | RUN rm /etc/apt/sources.list && \ 10 | echo "\ 11 | deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse\n\ 12 | deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse\n\ 13 | deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse\n\ 14 | deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse\n\ 15 | deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse"\ 16 | >> /etc/apt/sources.list && \ 17 | apt-get update && \ 18 | apt-get install -y curl unzip software-properties-common && \ 19 | add-apt-repository -y ppa:webupd8team/java && \ 20 | (echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && \ 21 | apt-get update && \ 22 | apt-get install -y oracle-java8-installer && \ 23 | apt-get clean && \ 24 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ 25 | mkdir -p /usr/local/share/android-sdk && \ 26 | cd /usr/local/share/android-sdk && \ 27 | curl -LO https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip && \ 28 | unzip sdk-tools-linux-4333796.zip && \ 29 | rm sdk-tools-linux-4333796.zip && \ 30 | cd tools/bin && \ 31 | echo y | ./sdkmanager "platforms;android-28" && \ 32 | echo y | ./sdkmanager "platform-tools" && \ 33 | echo y | ./sdkmanager "build-tools;28.0.3" 34 | 35 | ENV JAVA_HOME /usr/lib/jvm/java-8-oracle 36 | ENV ANDROID_HOME /usr/local/share/android-sdk 37 | ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/build-tools/28.0.3 38 | ENV LANG C.UTF-8 39 | 40 | CMD [ "bash" ] 41 | -------------------------------------------------------------------------------- /android/sdk/setup-on-gnu-linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | #------------------------------------------------------------------------------# 4 | # Android开发环境搭建脚本 5 | # 只支持GNU/Linux 64bit 系统 6 | #------------------------------------------------------------------------------# 7 | 8 | JDK_URL=https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u192-b12/OpenJDK8U-jdk_x64_linux_hotspot_8u192b12.tar.gz 9 | 10 | # https://developer.android.google.cn/studio/index.html 11 | ANDROID_SDK_URL=https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip 12 | 13 | # http://tools.android.com/download/studio/canary 14 | # https://developer.android.google.cn/studio/index.html 15 | ANDROID_STUDIO_URL=https://dl.google.com/dl/android/studio/ide-zips/3.3.2.0/android-studio-ide-182.5314842-linux.zip 16 | 17 | # Android SDK Framework API Level 18 | ANDROID_SDK_FRAMEWORK_VERSION=28 19 | 20 | # 构建工具的版本 21 | ANDROID_SDK_BUILD_TOOLS_VERSION=28.0.3 22 | 23 | # 安装目录 24 | DEST_DIR=/usr/local/opt 25 | 26 | export ANDROID_HOME="${DEST_DIR}/android-sdk" 27 | 28 | #------------------------------------------------------------------------------# 29 | 30 | JDK_FILE_NAME=$(basename "$JDK_URL") 31 | ANDROID_SDK_FILE_NAME=$(basename "$ANDROID_SDK_URL") 32 | ANDROID_STUDIO_FILE_NAME=$(basename "$ANDROID_STUDIO_URL") 33 | 34 | Color_Purple='\033[0;35m' # Purple 35 | Color_Off='\033[0m' # Reset 36 | 37 | msg() { 38 | printf "%b\n" "$1" 39 | } 40 | 41 | info() { 42 | msg "${Color_Purple}[❉]${Color_Off} $1$2" 43 | } 44 | 45 | writeJDKEnv() { 46 | cat > "$1" << EOF 47 | export JAVA_HOME=$JAVA_HOME 48 | export PATH=\$JAVA_HOME/bin:\$PATH 49 | export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar 50 | EOF 51 | } 52 | 53 | # 配置JDK环境变量 54 | configJDKEnv() { 55 | dirName=$(tar -tf "$JDK_FILE_NAME" | awk -F/ '{print $2}' | sort | uniq) 56 | 57 | export JAVA_HOME=${DEST_DIR}/${dirName} 58 | export PATH=$JAVA_HOME/bin:$PATH 59 | export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 60 | 61 | writeJDKEnv "$HOME/.bashrc" 62 | writeJDKEnv "$HOME/.zshrc" 63 | } 64 | 65 | # 下载文件 66 | downloadFile() { 67 | info "Downloading $1" 68 | fileName=$(basename "$1") 69 | extension=$(echo "$fileName" | awk -F. '{print $NF}') 70 | if [ -f "$fileName" ] ; then 71 | if [ "$extension" = "zip" ] ; then 72 | unzip -t "$fileName" > /dev/null || curl -C - -LO "$1" 73 | elif [ "$extension" = "gz" ] ; then 74 | tar -tf "$fileName" > /dev/null || curl -C - -LO "$1" 75 | fi 76 | else 77 | curl -C - -LO "$1" 78 | fi 79 | } 80 | 81 | # 更新Android SDK 82 | updateAndroidSDK() { 83 | info "Updating AndroidSDK..." 84 | sdkmanager="$ANDROID_HOME/tools/bin/sdkmanager" 85 | echo y | $sdkmanager "platforms;android-${ANDROID_SDK_FRAMEWORK_VERSION}" && \ 86 | echo y | $sdkmanager "platform-tools" && \ 87 | echo y | $sdkmanager "build-tools;${ANDROID_SDK_BUILD_TOOLS_VERSION}" 88 | echo y | $sdkmanager "ndk-bundle" 89 | } 90 | 91 | writeAndroidSDKEnv() { 92 | cat > "$1" << EOF 93 | export ANDROID_HOME=$ANDROID_HOME 94 | export PATH=\$ANDROID_HOME/tools:\$ANDROID_HOME/tools/bin:\$ANDROID_HOME/platform-tools:\$ANDROID_HOME/build-tools/${ANDROID_SDK_BUILD_TOOLS_VERSION}:\$PATH 95 | export ANDROID_NDK_HOME=\$ANDROID_HOME/ndk-bundle 96 | export PATH=\$PATH:\$ANDROID_NDK_HOME 97 | EOF 98 | } 99 | 100 | # 配置Android SDK的环境变量 101 | configAndroidSDKEnv() { 102 | export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools/${ANDROID_SDK_BUILD_TOOLS_VERSION}:$PATH 103 | export ANDROID_NDK_HOME=$ANDROID_HOME/ndk-bundle 104 | export PATH=$PATH:$ANDROID_NDK_HOME 105 | 106 | writeAndroidSDKEnv "$HOME/.bashrc" 107 | writeAndroidSDKEnv "$HOME/.zshrc" 108 | } 109 | 110 | checkDependencies() { 111 | info "Checking Dependencies" 112 | command -v git > /dev/null || pkgNames="git" 113 | command -v curl > /dev/null || pkgNames="$pkgNames curl" 114 | command -v zip > /dev/null || pkgNames="$pkgNames zip" 115 | command -v unzip > /dev/null || pkgNames="$pkgNames unzip" 116 | command -v grep > /dev/null || pkgNames="$pkgNames grep" 117 | } 118 | 119 | installDependencies() { 120 | info "Installing Dependencies $pkgNames" 121 | 122 | command -v apt-get > /dev/null && { 123 | $sudo apt-get -y update && 124 | $sudo apt-get -y install $@ 125 | return 0 126 | } 127 | 128 | command -v dnf > /dev/null && { 129 | $sudo dnf -y update && 130 | $sudo dnf -y install $@ 131 | return 0 132 | } 133 | 134 | command -v yum > /dev/null && { 135 | $sudo yum -y update && 136 | $sudo yum -y install $@ 137 | return 0 138 | } 139 | 140 | command -v zypper > /dev/null && { 141 | $sudo zypper update -y && 142 | $sudo zypper install -y $@ 143 | return 0 144 | } 145 | 146 | command -v apk > /dev/null && { 147 | $sudo apk update && 148 | $sudo apk add $@ 149 | return 0 150 | } 151 | 152 | command -v pacman > /dev/null && { 153 | $sudo pacman -Syyuu --noconfirm && 154 | $sudo pacman -S --noconfirm $@ 155 | return 0 156 | } 157 | } 158 | 159 | main() { 160 | [ "$(uname -s)" = "Linux" ] || { 161 | printf "%s\n" "your os is not GNU/Linux!!" 162 | exit 1 163 | } 164 | 165 | [ "$(whoami)" = "root" ] || sudo=sudo 166 | 167 | checkDependencies 168 | 169 | [ -z "$pkgNames" ] || installDependencies "$pkgNames" 170 | 171 | [ -d "$DEST_DIR" ] || $sudo install -d -o "$(whoami)" "$DEST_DIR" 172 | [ -d "$ANDROID_HOME" ] || $sudo install -d -o "$(whoami)" "$ANDROID_HOME" 173 | 174 | cd "$DEST_DIR" || exit 1 175 | 176 | downloadFile "$JDK_URL" && 177 | tar zvxf "$JDK_FILE_NAME" && 178 | configJDKEnv 179 | 180 | downloadFile "$ANDROID_SDK_URL" && 181 | unzip -o "$ANDROID_SDK_FILE_NAME" -d "$ANDROID_HOME" && 182 | configAndroidSDKEnv && 183 | updateAndroidSDK 184 | 185 | downloadFile "$ANDROID_STUDIO_URL" && 186 | unzip -o "$ANDROID_STUDIO_FILE_NAME" 187 | } 188 | 189 | main 190 | -------------------------------------------------------------------------------- /android/sdk/setup-on-macos.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | #------------------------------------------------------------------------------# 4 | # Android开发环境搭建脚本 5 | # 该脚本只支持Mac OS X 系统 6 | # 所有软件均通过HomeBrew进行安装 7 | #------------------------------------------------------------------------------# 8 | 9 | installBrewIfNeeded() { 10 | if command -v brew > /dev/null ; then 11 | brew update 12 | else 13 | printf "\n\n" | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 14 | fi 15 | } 16 | 17 | installByBrew() { 18 | command -v "$1" > /dev/null || brew install "$1" 19 | } 20 | 21 | main() { 22 | [ "$(uname -s)" = "Darwin" ] || { 23 | printf "your os is not macOS!!\n" 24 | exit 1 25 | } 26 | 27 | installBrewIfNeeded 28 | 29 | installByBrew curl 30 | installByBrew httpie 31 | installByBrew vim 32 | 33 | brew cask reinstall adoptopenjdk8 34 | brew cask reinstall android-sdk 35 | brew cask reinstall android-ndk 36 | brew cask reinstall android-studio 37 | brew cask reinstall virtualbox 38 | brew cask reinstall virtualbox-extension-pack 39 | brew cask reinstall genymotion 40 | brew cask reinstall iterm2 41 | } 42 | 43 | main 44 | -------------------------------------------------------------------------------- /bash-completion/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | osType=$(uname -s) 4 | [ "$(whoami)" = "root" ] || sudo=sudo 5 | 6 | # 在Mac OSX上安装HomeBrew 7 | installHomeBrewIfNeeded() { 8 | if command -v brew > /dev/null ; then 9 | brew update 10 | else 11 | printf "\n\n" | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 12 | fi 13 | } 14 | 15 | # 安装额外的一些扩展支持 16 | installBashCompletionExt() { 17 | if [ "$osType" = "Darwin" ] ; then 18 | str=/usr/local/etc/bash_completion.d 19 | else 20 | str=/etc/bash_completion.d 21 | fi 22 | cd "$str" || exit 1 23 | $sudo curl -LO https://raw.github.com/git/git/master/contrib/completion/git-completion.bash 24 | } 25 | 26 | writeEnv() { 27 | if [ "$osType" = "Darwin" ] ; then 28 | str=/usr/local/etc/bash_completion 29 | else 30 | str=/usr/share/bash-completion/bash_completion 31 | fi 32 | $sudo printf "%s\n" "[ -f $str ] && . $str" >> /etc/profile 33 | } 34 | 35 | main() { 36 | if [ "$osType" = "Darwin" ] ; then 37 | installHomeBrewIfNeeded && 38 | brew install curl bash-completion && 39 | writeEnv && 40 | installBashCompletionExt 41 | elif [ "$osType" = "Linux" ] ; then 42 | command -v apt-get > /dev/null && { 43 | $sudo apt-get -y update && 44 | $sudo apt-get -y install curl bash-completion && 45 | writeEnv && 46 | installBashCompletionExt 47 | exit $? 48 | } 49 | 50 | command -v dnf > /dev/null && { 51 | $sudo dnf -y update && 52 | $sudo dnf -y install curl bash-completion && 53 | writeEnv && 54 | installBashCompletionExt 55 | exit $? 56 | } 57 | 58 | command -v yum > /dev/null && { 59 | $sudo yum -y update && 60 | $sudo yum -y install curl bash-completion && 61 | writeEnv && 62 | installBashCompletionExt 63 | exit $? 64 | } 65 | 66 | command -v zypper > /dev/null && { 67 | $sudo zypper update -y && 68 | $sudo zypper install -y curl bash-completion && 69 | writeEnv && 70 | installBashCompletionExt 71 | exit $? 72 | } 73 | 74 | command -v pacman > /dev/null && { 75 | $sudo pacman -Syyuu --noconfirm && 76 | $sudo zypper -S --noconfirm curl bash-completion && 77 | writeEnv && 78 | installBashCompletionExt 79 | exit $? 80 | } 81 | 82 | command -v apk > /dev/null && { 83 | $sudo apk update && 84 | $sudo apk add curl bash-completion && 85 | writeEnv && 86 | installBashCompletionExt 87 | exit $? 88 | } 89 | fi 90 | } 91 | 92 | main 93 | -------------------------------------------------------------------------------- /brew/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | Color_Purple='\033[0;35m' # Purple 4 | Color_Off='\033[0m' # Reset 5 | 6 | msg() { 7 | printf "%b\n" "$1" 8 | } 9 | 10 | info() { 11 | msg "${Color_Purple}[❉]${Color_Off} $1$2" 12 | } 13 | 14 | sudo() { 15 | if [ "$(whoami)" = 'root' ] ; then 16 | $@ 17 | else 18 | command sudo $@ 19 | fi 20 | } 21 | 22 | install_dependencies_if_needed() { 23 | for item in $@ 24 | do 25 | command -v "$item" > /dev/null && continue 26 | install_dependencies "$item" 27 | done 28 | } 29 | 30 | install_dependencies() { 31 | command -v apt-get > /dev/null && { 32 | sudo apt-get -y update && 33 | sudo apt-get -y install $@ && 34 | return $? 35 | } 36 | 37 | command -v dnf > /dev/null && { 38 | sudo dnf -y update && 39 | sudo dnf -y install $@ && 40 | return $? 41 | } 42 | 43 | command -v yum > /dev/null && { 44 | sudo yum -y update && 45 | sudo yum -y install $@ && 46 | return $? 47 | } 48 | 49 | command -v zypper > /dev/null && { 50 | sudo zypper update -y && 51 | sudo zypper install -y $@ && 52 | return $? 53 | } 54 | 55 | command -v pacman > /dev/null && { 56 | sudo pacman -Syyuu --noconfirm && 57 | sudo pacman -S --noconfirm $@ && 58 | return $? 59 | } 60 | 61 | info "not find a package manager to install $@" 62 | return 1 63 | } 64 | 65 | install_homebrew_on_macos() { 66 | bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 67 | } 68 | 69 | install_homebrew_on_linux() { 70 | install_dependencies_if_needed git curl && 71 | install -d /home/linuxbrew/.linuxbrew/bin && 72 | git clone https://github.com/Homebrew/brew /home/linuxbrew/.linuxbrew/Homebrew && 73 | ln -sf /home/linuxbrew/.linuxbrew/Homebrew/bin/brew /home/linuxbrew/.linuxbrew/bin && 74 | eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv) && { 75 | for item in .profile .bashrc .zshrc 76 | do 77 | printf "%s\n" "eval \$($(brew --prefix)/bin/brew shellenv)" >> "$HOME/$item" || return 1 78 | done 79 | } && { 80 | if [ -z "$SHELL" ] ; then 81 | if command -v zsh > /dev/null ; then 82 | SHELL=zsh 83 | elif command -v bash > /dev/null ; then 84 | SHELL=bash 85 | else 86 | SHELL=sh 87 | fi 88 | fi 89 | exec "$SHELL" 90 | } 91 | } 92 | 93 | install_homebrew() { 94 | case "$(uname -s)" in 95 | Darwin) install_homebrew_on_macos ;; 96 | Linux) install_homebrew_on_linux ;; 97 | *) info "HomeBrew only support macOS and Linux." 98 | esac 99 | } 100 | 101 | main() { 102 | if command -v brew > /dev/null ; then 103 | echo "Homebrew already installed." 104 | else 105 | echo "installing Homebrew." 106 | install_homebrew || return 1 107 | fi 108 | 109 | if [ "$(git -C "$(brew --repo)" remote get-url origin)" = "https://github.com/Homebrew/brew" ] ; then 110 | git -C "$(brew --repo)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git 111 | fi 112 | } 113 | 114 | main 115 | -------------------------------------------------------------------------------- /development-env/setup-on-macos.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | #------------------------------------------------------------------------------# 4 | # 开发环境搭建脚本,只支持Mac OSX系统 5 | # 搭建的环境包括Java、Android、iOS、Node.js、Web前端 6 | # 7 | # 特殊说明: 8 | # 1、npm的源使用的是淘宝的 9 | # 2、对于vim,安装了Vundle插件管理工具和一些常用插件,并修改了当前用户的配置 10 | #------------------------------------------------------------------------------# 11 | 12 | # 安装HomeBrew 13 | installOrUpdateHomeBrew() { 14 | if command -v brew > /dev/null ; then 15 | brew update 16 | else 17 | printf "\n\n" | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/linuxbrew/go/install)" 18 | fi 19 | } 20 | 21 | installViaHomeBrew() { 22 | for name in $@ 23 | do 24 | brew install $name 25 | done 26 | } 27 | 28 | installViaHomeBrewCask() { 29 | for name in $@ 30 | do 31 | brew cask install $name 32 | done 33 | } 34 | 35 | main() { 36 | installOrUpdateHomeBrew || { 37 | printf "%s\n" "installBrew occur error!" 38 | exit 1 39 | } 40 | 41 | installViaHomeBrew "curl wget zip unzip tree vim node npm httpie tomcat jenkins maven gradle apktool" 42 | 43 | npm config set registry https://registry.npm.taobao.org 44 | 45 | installViaHomeBrewCask "iterm2 firefox google-chrome sublime webstorm eclipse-jee docker android-sdk android-ndk android-studioi genymotion skitch" 46 | } 47 | 48 | main 49 | -------------------------------------------------------------------------------- /fbterm/download_libx86.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | curl -LO http://www.codon.org.uk/~mjg59/libx86/downloads/libx86-1.1.tar.gz 4 | -------------------------------------------------------------------------------- /fbterm/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | git clone https://github.com/zhangyuanwei/fbterm.git 4 | -------------------------------------------------------------------------------- /gentoo/genfstab: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | shopt -s extglob 4 | 5 | # generated from util-linux source: libmount/src/utils.c 6 | declare -A pseudofs_types=([anon_inodefs]=1 7 | [autofs]=1 8 | [bdev]=1 9 | [binfmt_misc]=1 10 | [cgroup]=1 11 | [configfs]=1 12 | [cpuset]=1 13 | [debugfs]=1 14 | [devfs]=1 15 | [devpts]=1 16 | [devtmpfs]=1 17 | [dlmfs]=1 18 | [fuse.gvfs-fuse-daemon]=1 19 | [fusectl]=1 20 | [hugetlbfs]=1 21 | [mqueue]=1 22 | [nfsd]=1 23 | [none]=1 24 | [pipefs]=1 25 | [proc]=1 26 | [pstore]=1 27 | [ramfs]=1 28 | [rootfs]=1 29 | [rpc_pipefs]=1 30 | [securityfs]=1 31 | [sockfs]=1 32 | [spufs]=1 33 | [sysfs]=1 34 | [tmpfs]=1) 35 | 36 | # generated from: pkgfile -vbr '/fsck\..+' | awk -F. '{ print $NF }' | sort 37 | declare -A fsck_types=([cramfs]=1 38 | [exfat]=1 39 | [ext2]=1 40 | [ext3]=1 41 | [ext4]=1 42 | [ext4dev]=1 43 | [jfs]=1 44 | [minix]=1 45 | [msdos]=1 46 | [reiserfs]=1 47 | [vfat]=1 48 | [xfs]=1) 49 | 50 | out() { printf "$1 $2\n" "${@:3}"; } 51 | error() { out "==> ERROR:" "$@"; } >&2 52 | msg() { out "==>" "$@"; } 53 | msg2() { out " ->" "$@";} 54 | die() { error "$@"; exit 1; } 55 | 56 | ignore_error() { 57 | "$@" 2>/dev/null 58 | return 0 59 | } 60 | 61 | in_array() { 62 | local i 63 | for i in "${@:2}"; do 64 | [[ $1 = "$i" ]] && return 0 65 | done 66 | return 1 67 | } 68 | 69 | chroot_add_mount() { 70 | mount "$@" && CHROOT_ACTIVE_MOUNTS=("$2" "${CHROOT_ACTIVE_MOUNTS[@]}") 71 | } 72 | 73 | chroot_maybe_add_mount() { 74 | local cond=$1; shift 75 | if eval "$cond"; then 76 | chroot_add_mount "$@" 77 | fi 78 | } 79 | 80 | chroot_setup() { 81 | CHROOT_ACTIVE_MOUNTS=() 82 | [[ $(trap -p EXIT) ]] && die '(BUG): attempting to overwrite existing EXIT trap' 83 | trap 'chroot_teardown' EXIT 84 | 85 | chroot_maybe_add_mount "! mountpoint -q '$1'" "$1" "$1" --bind && 86 | chroot_add_mount proc "$1/proc" -t proc -o nosuid,noexec,nodev && 87 | chroot_add_mount sys "$1/sys" -t sysfs -o nosuid,noexec,nodev,ro && 88 | ignore_error chroot_maybe_add_mount "[[ -d '$1/sys/firmware/efi/efivars' ]]" \ 89 | efivarfs "$1/sys/firmware/efi/efivars" -t efivarfs -o nosuid,noexec,nodev && 90 | chroot_add_mount udev "$1/dev" -t devtmpfs -o mode=0755,nosuid && 91 | chroot_add_mount devpts "$1/dev/pts" -t devpts -o mode=0620,gid=5,nosuid,noexec && 92 | chroot_add_mount shm "$1/dev/shm" -t tmpfs -o mode=1777,nosuid,nodev && 93 | chroot_add_mount run "$1/run" -t tmpfs -o nosuid,nodev,mode=0755 && 94 | chroot_add_mount tmp "$1/tmp" -t tmpfs -o mode=1777,strictatime,nodev,nosuid 95 | } 96 | 97 | chroot_teardown() { 98 | umount "${CHROOT_ACTIVE_MOUNTS[@]}" 99 | unset CHROOT_ACTIVE_MOUNTS 100 | } 101 | 102 | try_cast() ( 103 | _=$(( $1#$2 )) 104 | ) 2>/dev/null 105 | 106 | valid_number_of_base() { 107 | local base=$1 len=${#2} i= 108 | 109 | for (( i = 0; i < len; i++ )); do 110 | try_cast "$base" "${2:i:1}" || return 1 111 | done 112 | 113 | return 0 114 | } 115 | 116 | mangle() { 117 | local i= chr= out= 118 | 119 | unset {a..f} {A..F} 120 | 121 | for (( i = 0; i < ${#1}; i++ )); do 122 | chr=${1:i:1} 123 | case $chr in 124 | [[:space:]\\]) 125 | printf -v chr '%03o' "'$chr" 126 | out+=\\ 127 | ;; 128 | esac 129 | out+=$chr 130 | done 131 | 132 | printf '%s' "$out" 133 | } 134 | 135 | unmangle() { 136 | local i= chr= out= len=$(( ${#1} - 4 )) 137 | 138 | unset {a..f} {A..F} 139 | 140 | for (( i = 0; i < len; i++ )); do 141 | chr=${1:i:1} 142 | case $chr in 143 | \\) 144 | if valid_number_of_base 8 "${1:i+1:3}" || 145 | valid_number_of_base 16 "${1:i+1:3}"; then 146 | printf -v chr '%b' "${1:i:4}" 147 | (( i += 3 )) 148 | fi 149 | ;; 150 | esac 151 | out+=$chr 152 | done 153 | 154 | printf '%s' "$out${1:i}" 155 | } 156 | 157 | optstring_match_option() { 158 | local candidate pat patterns 159 | 160 | IFS=, read -ra patterns <<<"$1" 161 | for pat in "${patterns[@]}"; do 162 | if [[ $pat = *=* ]]; then 163 | # "key=val" will only ever match "key=val" 164 | candidate=$2 165 | else 166 | # "key" will match "key", but also "key=anyval" 167 | candidate=${2%%=*} 168 | fi 169 | 170 | [[ $pat = "$candidate" ]] && return 0 171 | done 172 | 173 | return 1 174 | } 175 | 176 | optstring_remove_option() { 177 | local o options_ remove=$2 IFS=, 178 | 179 | read -ra options_ <<<"${!1}" 180 | 181 | for o in "${!options_[@]}"; do 182 | optstring_match_option "$remove" "${options_[o]}" && unset 'options_[o]' 183 | done 184 | 185 | declare -g "$1=${options_[*]}" 186 | } 187 | 188 | optstring_normalize() { 189 | local o options_ norm IFS=, 190 | 191 | read -ra options_ <<<"${!1}" 192 | 193 | # remove empty fields 194 | for o in "${options_[@]}"; do 195 | [[ $o ]] && norm+=("$o") 196 | done 197 | 198 | # avoid empty strings, reset to "defaults" 199 | declare -g "$1=${norm[*]:-defaults}" 200 | } 201 | 202 | optstring_append_option() { 203 | if ! optstring_has_option "$1" "$2"; then 204 | declare -g "$1=${!1},$2" 205 | fi 206 | 207 | optstring_normalize "$1" 208 | } 209 | 210 | optstring_prepend_option() { 211 | local options_=$1 212 | 213 | if ! optstring_has_option "$1" "$2"; then 214 | declare -g "$1=$2,${!1}" 215 | fi 216 | 217 | optstring_normalize "$1" 218 | } 219 | 220 | optstring_get_option() { 221 | local opts o 222 | 223 | IFS=, read -ra opts <<<"${!1}" 224 | for o in "${opts[@]}"; do 225 | if optstring_match_option "$2" "$o"; then 226 | declare -g "$o" 227 | return 0 228 | fi 229 | done 230 | 231 | return 1 232 | } 233 | 234 | optstring_has_option() { 235 | local "${2%%=*}" 236 | 237 | optstring_get_option "$1" "$2" 238 | } 239 | 240 | dm_name_for_devnode() { 241 | read dm_name <"/sys/class/block/${1#/dev/}/dm/name" 242 | if [[ $dm_name ]]; then 243 | printf '/dev/mapper/%s' "$dm_name" 244 | else 245 | # don't leave the caller hanging, just print the original name 246 | # along with the failure. 247 | print '%s' "$1" 248 | error 'Failed to resolve device mapper name for: %s' "$1" 249 | fi 250 | } 251 | 252 | fstype_is_pseudofs() { 253 | (( pseudofs_types["$1"] )) 254 | } 255 | 256 | fstype_has_fsck() { 257 | (( fsck_types["$1"] )) 258 | } 259 | 260 | 261 | write_source() { 262 | local src=$1 spec= label= uuid= comment=() 263 | 264 | label=$(lsblk -rno LABEL "$1" 2>/dev/null) 265 | uuid=$(lsblk -rno UUID "$1" 2>/dev/null) 266 | 267 | # bind mounts do not have a UUID! 268 | 269 | case $bytag in 270 | '') 271 | [[ $uuid ]] && comment=("UUID=$uuid") 272 | [[ $label ]] && comment+=("LABEL=$(mangle "$label")") 273 | ;; 274 | LABEL) 275 | spec=$label 276 | [[ $uuid ]] && comment=("$src" "UUID=$uuid") 277 | ;; 278 | UUID) 279 | spec=$uuid 280 | comment=("$src") 281 | [[ $label ]] && comment+=("LABEL=$(mangle "$label")") 282 | ;; 283 | *) 284 | [[ $uuid ]] && comment=("$1" "UUID=$uuid") 285 | [[ $label ]] && comment+=("LABEL=$(mangle "$label")") 286 | [[ $bytag ]] && spec=$(lsblk -rno "$bytag" "$1" 2>/dev/null) 287 | ;; 288 | esac 289 | 290 | [[ $comment ]] && printf '# %s\n' "${comment[*]}" 291 | 292 | if [[ $spec ]]; then 293 | printf '%-20s' "$bytag=$(mangle "$spec")" 294 | else 295 | printf '%-20s' "$(mangle "$src")" 296 | fi 297 | } 298 | 299 | optstring_apply_quirks() { 300 | local varname=$1 fstype=$2 301 | 302 | # SELinux displays a 'seclabel' option in /proc/self/mountinfo. We can't know 303 | # if the system we're generating the fstab for has any support for SELinux (as 304 | # one might install Arch from a Fedora environment), so let's remove it. 305 | optstring_remove_option "$varname" seclabel 306 | 307 | case $fstype in 308 | f2fs) 309 | # These are Kconfig options for f2fs. Kernels supporting the options will 310 | # only provide the negative versions of these (e.g. noacl), and vice versa 311 | # for kernels without support. 312 | optstring_remove_option "$varname" noacl,acl,nouser_xattr,user_xattr 313 | ;; 314 | vfat) 315 | # Before Linux v3.8, "cp" is prepended to the value of the codepage. 316 | if optstring_get_option "$varname" codepage && [[ $codepage = cp* ]]; then 317 | optstring_remove_option "$varname" codepage 318 | optstring_append_option "$varname" "codepage=${codepage#cp}" 319 | fi 320 | ;; 321 | esac 322 | } 323 | 324 | usage() { 325 | cat </dev/null; then 397 | # this is root. we can't possibly have more than one... 398 | pass=1 foundroot=1 399 | fi 400 | 401 | # if there's no fsck tool available, then only pass=0 makes sense. 402 | if ! fstype_has_fsck "$fstype"; then 403 | pass=0 404 | fi 405 | 406 | if [[ $fsroot != / ]]; then 407 | if [[ $fstype = btrfs ]]; then 408 | opts+=,subvol=${fsroot#/} 409 | else 410 | # it's a bind mount 411 | src=$(findmnt -funcevo TARGET "$src")$fsroot 412 | if [[ $src -ef $target ]]; then 413 | # hrmm, this is weird. we're probably looking at a file or directory 414 | # that was bound into a chroot from the host machine. Ignore it, 415 | # because this won't actually be a valid mount. Worst case, the user 416 | # just re-adds it. 417 | continue 418 | fi 419 | fstype=none 420 | opts+=,bind 421 | pass=0 422 | fi 423 | fi 424 | 425 | # filesystem quirks 426 | case $fstype in 427 | fuseblk) 428 | # well-behaved FUSE filesystems will report themselves as fuse.$fstype. 429 | # this is probably NTFS-3g, but let's just make sure. 430 | if ! newtype=$(lsblk -no FSTYPE "$src") || [[ -z $newtype ]]; then 431 | # avoid blanking out fstype, leading to an invalid fstab 432 | error 'Failed to derive real filesystem type for FUSE device on %s' "$target" 433 | else 434 | fstype=$newtype 435 | fi 436 | ;; 437 | esac 438 | 439 | optstring_apply_quirks "opts" "$fstype" 440 | 441 | # write one line 442 | write_source "$src" 443 | printf '\t%-10s' "/$(mangle "${target#/}")" "$fstype" "$opts" 444 | printf '\t%s %s' "$dump" "$pass" 445 | printf '\n\n' 446 | done 447 | 448 | # handle swaps devices 449 | { 450 | # ignore header 451 | read 452 | 453 | while read -r device type _ _ prio; do 454 | options=defaults 455 | if [[ $prio != -1 ]]; then 456 | options+=,pri=$prio 457 | fi 458 | 459 | # skip files marked deleted by the kernel 460 | [[ $device = *'\040(deleted)' ]] && continue 461 | 462 | if [[ $type = file ]]; then 463 | printf '%-20s' "$device" 464 | elif [[ $device = /dev/dm-+([0-9]) ]]; then 465 | # device mapper doesn't allow characters we need to worry 466 | # about being mangled, and it does the escaping of dashes 467 | # for us in sysfs. 468 | write_source "$(dm_name_for_devnode "$device")" 469 | else 470 | write_source "$(unmangle "$device")" 471 | fi 472 | 473 | printf '\t%-10s\t%-10s\t%-10s\t0 0\n\n' 'none' 'swap' "$options" 474 | done 475 | } sudo fdisk -t dos /dev/sda <> /etc/wpa_supplicant.conf && 118 | wpa_supplicant -B -c /etc/wpa_supplicant.conf -i lwan0 119 | } 120 | 121 | #step13 122 | downloadStage3TarballAndUncompress() { 123 | stage3Tarball=$(curl $stage3TarballDownloadUrl/ | grep "href=\"stage3-amd64-[0-9]\{8\}T[0-9]\{6\}Z.tar.xz\"" | sed 's/.*href="\([^"]*\)".*/\1/') 124 | curl -LO "$stage3TarballDownloadUrl/$stage3Tarball" && 125 | tar Jvxf "$stage3Tarball" -C /mnt/gentoo 126 | } 127 | 128 | #step14 129 | configMakeConf() { 130 | cat >> /mnt/gentoo/etc/portage/make.conf < /mnt/gentoo/etc/portage/repos.conf < /etc/timezone 60 | ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 61 | } 62 | 63 | #step23 64 | genLocales() { 65 | sed -i 's/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen && 66 | locale-gen && 67 | eselect locale set en_US.UTF-8 && 68 | env-update && . /etc/profile 69 | } 70 | 71 | #step24 72 | configfstab() { 73 | curl -o /sbin/genfstab https://raw.githubusercontent.com/YangMame/Gentoo-Installer/master/genfstab 74 | chmod o+x /sbin/genfstab 75 | genfstab -U / >> /etc/fstab 76 | } 77 | 78 | #step24 79 | downloadLinuxKernelSources() { 80 | emerge sys-kernel/gentoo-sources 81 | emerge sys-kernel/genkernel 82 | emerge sys-kernel/linux-firmware 83 | emerge sys-apps/pciutils 84 | } 85 | 86 | #step25 87 | compileLinuxKernelSources() { 88 | [ -d /usr/src/linux ] || error "sys-kernel/gentoo-sources not installed" 89 | #cd /usr/src/linux 90 | genkernel all 91 | } 92 | 93 | #step26 94 | configHostname() { 95 | prompt "please set hostname:" 96 | read -r hostname 97 | sed -i "s/127.0.0.1\slocalhost/127.0.0.1\\tlocalhost ${hostname}/g" /etc/hosts 98 | sed -i "s@hostname=\"localhost\"@hostname=\"${hostname}\"@g" /etc/conf.d/hostname 99 | } 100 | 101 | #step27 102 | setRootPassword() { 103 | print "%s" "set root " 104 | passwd 105 | } 106 | 107 | #step28 108 | newUserAndSetPassword() { 109 | prompt "please set none-root username:" 110 | read -r username 111 | useradd -m -G wheel -s /bin/bash "$username" 112 | passwd "$username" 113 | } 114 | 115 | #step29 116 | installAndConfigGrub2() { 117 | emerge sys-boot/grub:2 118 | grub-install /dev/sda 119 | grub-mkconfig -o /boot/grub/grub.cfg 120 | } 121 | 122 | #step30 123 | exitChroot() { 124 | exit 125 | } 126 | 127 | main() { 128 | syncPortageTree 129 | selectProfile 130 | updateWorldSet 131 | setTimeZone 132 | genLocales 133 | configfstab 134 | downloadLinuxKernelSources 135 | compileLinuxKernelSources 136 | configHostname 137 | setRootPassword 138 | newUserAndSetPassword 139 | installAndConfigGrub2 140 | exitChroot 141 | } 142 | 143 | main "$@" 144 | -------------------------------------------------------------------------------- /gifts/cake/.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/.zip -------------------------------------------------------------------------------- /gifts/cake/data.json: -------------------------------------------------------------------------------- 1 | {"v":"4.9.0","fr":25,"ip":0,"op":58,"w":426,"h":756,"nm":"预合成 1","ddd":0,"assets":[{"id":"image_0","w":426,"h":756,"u":"images/","p":"img_0.png"},{"id":"image_1","w":426,"h":756,"u":"images/","p":"img_1.png"},{"id":"image_2","w":426,"h":756,"u":"images/","p":"img_2.png"},{"id":"image_3","w":426,"h":756,"u":"images/","p":"img_3.png"},{"id":"image_4","w":426,"h":756,"u":"images/","p":"img_4.png"},{"id":"image_5","w":426,"h":756,"u":"images/","p":"img_5.png"},{"id":"image_6","w":426,"h":756,"u":"images/","p":"img_6.png"},{"id":"image_7","w":426,"h":756,"u":"images/","p":"img_7.png"},{"id":"image_8","w":426,"h":756,"u":"images/","p":"img_8.png"},{"id":"image_9","w":426,"h":756,"u":"images/","p":"img_9.png"},{"id":"image_10","w":426,"h":756,"u":"images/","p":"img_10.png"},{"id":"image_11","w":426,"h":756,"u":"images/","p":"img_11.png"},{"id":"image_12","w":426,"h":756,"u":"images/","p":"img_12.png"},{"id":"image_13","w":426,"h":756,"u":"images/","p":"img_13.png"},{"id":"image_14","w":426,"h":756,"u":"images/","p":"img_14.png"},{"id":"image_15","w":426,"h":756,"u":"images/","p":"img_15.png"},{"id":"image_16","w":426,"h":756,"u":"images/","p":"img_16.png"},{"id":"image_17","w":426,"h":756,"u":"images/","p":"img_17.png"},{"id":"image_18","w":426,"h":756,"u":"images/","p":"img_18.png"},{"id":"image_19","w":426,"h":756,"u":"images/","p":"img_19.png"},{"id":"image_20","w":426,"h":756,"u":"images/","p":"img_20.png"},{"id":"image_21","w":426,"h":756,"u":"images/","p":"img_21.png"},{"id":"image_22","w":426,"h":756,"u":"images/","p":"img_22.png"},{"id":"image_23","w":426,"h":756,"u":"images/","p":"img_23.png"},{"id":"image_24","w":426,"h":756,"u":"images/","p":"img_24.png"},{"id":"image_25","w":426,"h":756,"u":"images/","p":"img_25.png"},{"id":"image_26","w":426,"h":756,"u":"images/","p":"img_26.png"},{"id":"image_27","w":426,"h":756,"u":"images/","p":"img_27.png"},{"id":"image_28","w":426,"h":756,"u":"images/","p":"img_28.png"}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"img_0.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":0,"op":2,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"img_1.png","cl":"png","refId":"image_1","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":2,"op":4,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"img_2.png","cl":"png","refId":"image_2","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":4,"op":6,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":2,"nm":"img_3.png","cl":"png","refId":"image_3","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":6,"op":8,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":2,"nm":"img_4.png","cl":"png","refId":"image_4","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":8,"op":10,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":2,"nm":"img_5.png","cl":"png","refId":"image_5","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":10,"op":12,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":2,"nm":"img_6.png","cl":"png","refId":"image_6","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":12,"op":14,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":2,"nm":"img_7.png","cl":"png","refId":"image_7","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":14,"op":16,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":2,"nm":"img_8.png","cl":"png","refId":"image_8","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":16,"op":18,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":2,"nm":"img_9.png","cl":"png","refId":"image_9","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":18,"op":20,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":2,"nm":"img_10.png","cl":"png","refId":"image_10","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":20,"op":22,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":2,"nm":"img_11.png","cl":"png","refId":"image_11","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":22,"op":24,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":2,"nm":"img_12.png","cl":"png","refId":"image_12","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":24,"op":26,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":2,"nm":"img_13.png","cl":"png","refId":"image_13","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":26,"op":28,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":2,"nm":"img_14.png","cl":"png","refId":"image_14","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":28,"op":30,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":2,"nm":"img_15.png","cl":"png","refId":"image_15","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":30,"op":32,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":2,"nm":"img_16.png","cl":"png","refId":"image_16","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":32,"op":34,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":2,"nm":"img_17.png","cl":"png","refId":"image_17","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":34,"op":36,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":2,"nm":"img_18.png","cl":"png","refId":"image_18","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":36,"op":38,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":2,"nm":"img_19.png","cl":"png","refId":"image_19","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":38,"op":40,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":2,"nm":"img_20.png","cl":"png","refId":"image_20","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":40,"op":42,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":2,"nm":"img_21.png","cl":"png","refId":"image_21","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":42,"op":44,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":2,"nm":"img_22.png","cl":"png","refId":"image_22","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":44,"op":46,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":2,"nm":"img_23.png","cl":"png","refId":"image_23","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":46,"op":48,"st":0,"bm":0},{"ddd":0,"ind":25,"ty":2,"nm":"img_24.png","cl":"png","refId":"image_24","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":48,"op":50,"st":0,"bm":0},{"ddd":0,"ind":26,"ty":2,"nm":"img_25.png","cl":"png","refId":"image_25","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":50,"op":52,"st":0,"bm":0},{"ddd":0,"ind":27,"ty":2,"nm":"img_26.png","cl":"png","refId":"image_26","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":52,"op":54,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":2,"nm":"img_27.png","cl":"png","refId":"image_27","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":54,"op":56,"st":0,"bm":0},{"ddd":0,"ind":29,"ty":2,"nm":"img_28.png","cl":"png","refId":"image_28","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":56,"op":58,"st":1,"bm":0}]} -------------------------------------------------------------------------------- /gifts/cake/images/img_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_0.png -------------------------------------------------------------------------------- /gifts/cake/images/img_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_1.png -------------------------------------------------------------------------------- /gifts/cake/images/img_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_10.png -------------------------------------------------------------------------------- /gifts/cake/images/img_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_11.png -------------------------------------------------------------------------------- /gifts/cake/images/img_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_12.png -------------------------------------------------------------------------------- /gifts/cake/images/img_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_13.png -------------------------------------------------------------------------------- /gifts/cake/images/img_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_14.png -------------------------------------------------------------------------------- /gifts/cake/images/img_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_15.png -------------------------------------------------------------------------------- /gifts/cake/images/img_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_16.png -------------------------------------------------------------------------------- /gifts/cake/images/img_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_17.png -------------------------------------------------------------------------------- /gifts/cake/images/img_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_18.png -------------------------------------------------------------------------------- /gifts/cake/images/img_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_19.png -------------------------------------------------------------------------------- /gifts/cake/images/img_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_2.png -------------------------------------------------------------------------------- /gifts/cake/images/img_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_20.png -------------------------------------------------------------------------------- /gifts/cake/images/img_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_21.png -------------------------------------------------------------------------------- /gifts/cake/images/img_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_22.png -------------------------------------------------------------------------------- /gifts/cake/images/img_23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_23.png -------------------------------------------------------------------------------- /gifts/cake/images/img_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_24.png -------------------------------------------------------------------------------- /gifts/cake/images/img_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_25.png -------------------------------------------------------------------------------- /gifts/cake/images/img_26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_26.png -------------------------------------------------------------------------------- /gifts/cake/images/img_27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_27.png -------------------------------------------------------------------------------- /gifts/cake/images/img_28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_28.png -------------------------------------------------------------------------------- /gifts/cake/images/img_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_3.png -------------------------------------------------------------------------------- /gifts/cake/images/img_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_4.png -------------------------------------------------------------------------------- /gifts/cake/images/img_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_5.png -------------------------------------------------------------------------------- /gifts/cake/images/img_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_6.png -------------------------------------------------------------------------------- /gifts/cake/images/img_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_7.png -------------------------------------------------------------------------------- /gifts/cake/images/img_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_8.png -------------------------------------------------------------------------------- /gifts/cake/images/img_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/cake/images/img_9.png -------------------------------------------------------------------------------- /gifts/car/.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/.zip -------------------------------------------------------------------------------- /gifts/car/data.json: -------------------------------------------------------------------------------- 1 | {"v":"4.9.0","fr":25,"ip":0,"op":58,"w":426,"h":756,"nm":"预合成 1","ddd":0,"assets":[{"id":"image_0","w":426,"h":756,"u":"images/","p":"img_0.png"},{"id":"image_1","w":426,"h":756,"u":"images/","p":"img_1.png"},{"id":"image_2","w":426,"h":756,"u":"images/","p":"img_2.png"},{"id":"image_3","w":426,"h":756,"u":"images/","p":"img_3.png"},{"id":"image_4","w":426,"h":756,"u":"images/","p":"img_4.png"},{"id":"image_5","w":426,"h":756,"u":"images/","p":"img_5.png"},{"id":"image_6","w":426,"h":756,"u":"images/","p":"img_6.png"},{"id":"image_7","w":426,"h":756,"u":"images/","p":"img_7.png"},{"id":"image_8","w":426,"h":756,"u":"images/","p":"img_8.png"},{"id":"image_9","w":426,"h":756,"u":"images/","p":"img_9.png"},{"id":"image_10","w":426,"h":756,"u":"images/","p":"img_10.png"},{"id":"image_11","w":426,"h":756,"u":"images/","p":"img_11.png"},{"id":"image_12","w":426,"h":756,"u":"images/","p":"img_12.png"},{"id":"image_13","w":426,"h":756,"u":"images/","p":"img_13.png"},{"id":"image_14","w":426,"h":756,"u":"images/","p":"img_14.png"},{"id":"image_15","w":426,"h":756,"u":"images/","p":"img_15.png"},{"id":"image_16","w":426,"h":756,"u":"images/","p":"img_16.png"},{"id":"image_17","w":426,"h":756,"u":"images/","p":"img_17.png"},{"id":"image_18","w":426,"h":756,"u":"images/","p":"img_18.png"},{"id":"image_19","w":426,"h":756,"u":"images/","p":"img_19.png"},{"id":"image_20","w":426,"h":756,"u":"images/","p":"img_20.png"},{"id":"image_21","w":426,"h":756,"u":"images/","p":"img_21.png"},{"id":"image_22","w":426,"h":756,"u":"images/","p":"img_22.png"},{"id":"image_23","w":426,"h":756,"u":"images/","p":"img_23.png"},{"id":"image_24","w":426,"h":756,"u":"images/","p":"img_24.png"},{"id":"image_25","w":426,"h":756,"u":"images/","p":"img_25.png"},{"id":"image_26","w":426,"h":756,"u":"images/","p":"img_26.png"},{"id":"image_27","w":426,"h":756,"u":"images/","p":"img_27.png"},{"id":"image_28","w":426,"h":756,"u":"images/","p":"img_28.png"}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"img_0.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":0,"op":2,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"img_1.png","cl":"png","refId":"image_1","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":2,"op":4,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"img_2.png","cl":"png","refId":"image_2","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":4,"op":6,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":2,"nm":"img_3.png","cl":"png","refId":"image_3","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":6,"op":8,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":2,"nm":"img_4.png","cl":"png","refId":"image_4","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":8,"op":10,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":2,"nm":"img_5.png","cl":"png","refId":"image_5","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":10,"op":12,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":2,"nm":"img_6.png","cl":"png","refId":"image_6","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":12,"op":14,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":2,"nm":"img_7.png","cl":"png","refId":"image_7","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":14,"op":16,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":2,"nm":"img_8.png","cl":"png","refId":"image_8","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":16,"op":18,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":2,"nm":"img_9.png","cl":"png","refId":"image_9","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":18,"op":20,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":2,"nm":"img_10.png","cl":"png","refId":"image_10","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":20,"op":22,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":2,"nm":"img_11.png","cl":"png","refId":"image_11","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":22,"op":24,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":2,"nm":"img_12.png","cl":"png","refId":"image_12","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":24,"op":26,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":2,"nm":"img_13.png","cl":"png","refId":"image_13","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":26,"op":28,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":2,"nm":"img_14.png","cl":"png","refId":"image_14","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":28,"op":30,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":2,"nm":"img_15.png","cl":"png","refId":"image_15","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":30,"op":32,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":2,"nm":"img_16.png","cl":"png","refId":"image_16","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":32,"op":34,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":2,"nm":"img_17.png","cl":"png","refId":"image_17","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":34,"op":36,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":2,"nm":"img_18.png","cl":"png","refId":"image_18","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":36,"op":38,"st":0,"bm":0},{"ddd":0,"ind":20,"ty":2,"nm":"img_19.png","cl":"png","refId":"image_19","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":38,"op":40,"st":0,"bm":0},{"ddd":0,"ind":21,"ty":2,"nm":"img_20.png","cl":"png","refId":"image_20","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":40,"op":42,"st":0,"bm":0},{"ddd":0,"ind":22,"ty":2,"nm":"img_21.png","cl":"png","refId":"image_21","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":42,"op":44,"st":0,"bm":0},{"ddd":0,"ind":23,"ty":2,"nm":"img_22.png","cl":"png","refId":"image_22","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":44,"op":46,"st":0,"bm":0},{"ddd":0,"ind":24,"ty":2,"nm":"img_23.png","cl":"png","refId":"image_23","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":46,"op":48,"st":0,"bm":0},{"ddd":0,"ind":25,"ty":2,"nm":"img_24.png","cl":"png","refId":"image_24","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":48,"op":50,"st":0,"bm":0},{"ddd":0,"ind":26,"ty":2,"nm":"img_25.png","cl":"png","refId":"image_25","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":50,"op":52,"st":0,"bm":0},{"ddd":0,"ind":27,"ty":2,"nm":"img_26.png","cl":"png","refId":"image_26","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":52,"op":54,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":2,"nm":"img_27.png","cl":"png","refId":"image_27","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":54,"op":56,"st":0,"bm":0},{"ddd":0,"ind":29,"ty":2,"nm":"img_28.png","cl":"png","refId":"image_28","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[213,378,0]},"a":{"a":0,"k":[213,378,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":56,"op":58,"st":1,"bm":0}]} -------------------------------------------------------------------------------- /gifts/car/images/img_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_0.png -------------------------------------------------------------------------------- /gifts/car/images/img_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_1.png -------------------------------------------------------------------------------- /gifts/car/images/img_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_10.png -------------------------------------------------------------------------------- /gifts/car/images/img_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_11.png -------------------------------------------------------------------------------- /gifts/car/images/img_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_12.png -------------------------------------------------------------------------------- /gifts/car/images/img_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_13.png -------------------------------------------------------------------------------- /gifts/car/images/img_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_14.png -------------------------------------------------------------------------------- /gifts/car/images/img_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_15.png -------------------------------------------------------------------------------- /gifts/car/images/img_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_16.png -------------------------------------------------------------------------------- /gifts/car/images/img_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_17.png -------------------------------------------------------------------------------- /gifts/car/images/img_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_18.png -------------------------------------------------------------------------------- /gifts/car/images/img_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_19.png -------------------------------------------------------------------------------- /gifts/car/images/img_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_2.png -------------------------------------------------------------------------------- /gifts/car/images/img_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_20.png -------------------------------------------------------------------------------- /gifts/car/images/img_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_21.png -------------------------------------------------------------------------------- /gifts/car/images/img_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_22.png -------------------------------------------------------------------------------- /gifts/car/images/img_23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_23.png -------------------------------------------------------------------------------- /gifts/car/images/img_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_24.png -------------------------------------------------------------------------------- /gifts/car/images/img_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_25.png -------------------------------------------------------------------------------- /gifts/car/images/img_26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_26.png -------------------------------------------------------------------------------- /gifts/car/images/img_27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_27.png -------------------------------------------------------------------------------- /gifts/car/images/img_28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_28.png -------------------------------------------------------------------------------- /gifts/car/images/img_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_3.png -------------------------------------------------------------------------------- /gifts/car/images/img_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_4.png -------------------------------------------------------------------------------- /gifts/car/images/img_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_5.png -------------------------------------------------------------------------------- /gifts/car/images/img_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_6.png -------------------------------------------------------------------------------- /gifts/car/images/img_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_7.png -------------------------------------------------------------------------------- /gifts/car/images/img_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_8.png -------------------------------------------------------------------------------- /gifts/car/images/img_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/gifts/car/images/img_9.png -------------------------------------------------------------------------------- /gifts/package-gift.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | osType=`uname -s` 4 | echo "osType=$osType" 5 | 6 | BUILD_DIR="$(cd $(dirname $0); pwd)/build" 7 | SOURCE_DIR=$BUILD_DIR/source 8 | ZIP_DIR=$BUILD_DIR/zip 9 | 10 | function main() { 11 | #如果存在build目录,就删除掉 12 | if [ -d $BUILD_DIR ] ; then 13 | rm -rf $BUILD_DIR 14 | fi 15 | 16 | #获得所有的礼物文件夹 17 | giftDirs=`ls -F | grep "/$"` 18 | 19 | #重新创建build目录及其子目录 20 | mkdir -p $SOURCE_DIR 21 | mkdir -p $ZIP_DIR 22 | 23 | #复制所有的礼物文件夹到build/source目录 24 | for giftDir in $giftDirs 25 | do 26 | giftDir=`basename $giftDir` 27 | rm ${giftDir}/.DS_Store 28 | cp -r $giftDir $SOURCE_DIR/ 29 | done 30 | 31 | cd $SOURCE_DIR 32 | 33 | for dir in $giftDirs 34 | do 35 | dir=`basename ${dir}` 36 | for imageFile in `ls ${dir}/images` 37 | do 38 | #修改成新的名字 39 | mv ${dir}/images/${imageFile} ${dir}/images/${dir}_${imageFile} 40 | #将data.json中图片名称替换成新的 41 | if [ $osType = 'Darwin' ] ; then 42 | sed -i "" "s#${imageFile}#${dir}_${imageFile}#g" ${dir}/data.json 43 | else 44 | sed -i "s#${imageFile}#${dir}_${imageFile}#g" ${dir}/data.json 45 | fi 46 | done 47 | #打zip包 48 | zip -r $ZIP_DIR/${dir}.zip $dir 49 | done 50 | echo "Success Done" 51 | } 52 | 53 | main 54 | -------------------------------------------------------------------------------- /git/git-2.30.0-linux-glibc.xz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leleliu008/auto/33436b543fa9fdcea22a7719c7c34687e2519a94/git/git-2.30.0-linux-glibc.xz -------------------------------------------------------------------------------- /git/setup-latest.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | sudo=$(command -v sudo 2> /dev/null); 4 | osType=$(uname -s); 5 | 6 | Color_Purple='\033[0;35m' # Purple 7 | Color_Off='\033[0m' # Reset 8 | 9 | msg() { 10 | printf "%b\n" "$1" 11 | } 12 | 13 | info() { 14 | msg "${Color_Purple}[❉]${Color_Off} $1$2" 15 | } 16 | 17 | downloadLatestGitSourceTarballAndInstall() { 18 | info "Fetching the latest git version info..."; 19 | 20 | URL=https://mirrors.edge.kernel.org/pub/software/scm/git 21 | latestFileName=$(curl -sSL# "$URL" | grep "git-[0-9]\{1,2\}.[0-9]\{1,2\}.[0-9]\{1,2\}.tar.xz" | awk -F\" '{print $2}' | sort -V | awk 'END{print}'); 22 | URL=$URL/$latestFileName 23 | 24 | [ -f "$latestFileName" ] && rm -rf "$latestFileName" 25 | 26 | info "the latest git version is $latestFileName" 27 | info "Downloading $URL" 28 | 29 | curl -LO "$URL" && { 30 | fileExtension="$(printf "%s\n" "$latestFileName" | awk -F. '{print $NF}')"; 31 | if [ "$fileExtension" = "gz" ] ; then 32 | tar zvxf "$latestFileName" 33 | elif [ "$fileExtension" = "xz" ] ; then 34 | tar Jvxf "$latestFileName" 35 | fi 36 | 37 | cd "$(tar -tf "$latestFileName" | sed -n "1p")" && 38 | destDir=/usr/local/opt/git && 39 | make prefix="$destDir" all && 40 | $sudo make prefix="$destDir" install && 41 | $sudo ln -sfF "$destDir/bin/git" /usr/local/bin/git && 42 | info "git has been installed into $destDir" 43 | } 44 | } 45 | 46 | checkDependencies() { 47 | info "Checking Dependencies..." 48 | 49 | command -v curl > /dev/null || pkgNames="$pkgNames curl" 50 | command -v sed > /dev/null || pkgNames="$pkgNames sed" 51 | command -v tar > /dev/null || pkgNames="$pkgNames tar" 52 | command -v gzip > /dev/null || pkgNames="$pkgNames gzip" 53 | command -v awk > /dev/null || pkgNames="$pkgNames gawk" 54 | command -v make > /dev/null || pkgNames="$pkgNames make" 55 | command -v gcc > /dev/null || pkgNames="$pkgNames gcc" 56 | } 57 | 58 | installDependencies() { 59 | info "Installing Dependencies $pkgNames" 60 | 61 | command -v apt-get > /dev/null && { 62 | $sudo apt-get -y update 63 | $sudo apt-get -y install $@ xz-utils libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev 64 | return 0 65 | } 66 | 67 | command -v dnf > /dev/null && { 68 | $sudo dnf -y update 69 | $sudo dnf -y install $@ xz libcurl-devel expat-devel gettext gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker 70 | return 0 71 | } 72 | 73 | command -v yum > /dev/null && { 74 | $sudo yum -y update 75 | $sudo yum -y install $@ xz libcurl-devel expat-devel gettext gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker 76 | return 0 77 | } 78 | } 79 | 80 | installHomeBrewIfNeeded() { 81 | if command -v brew > /dev/null ; then 82 | brew update 83 | else 84 | printf "\n\n" | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 85 | fi 86 | } 87 | 88 | main() { 89 | [ "$osType" = "Drawin" ] && { 90 | installHomeBrewIfNeeded 91 | if command -v git > /dev/null ; then 92 | brew upgrade git 93 | else 94 | brew install git 95 | fi 96 | exit 97 | } 98 | 99 | [ "$osType" = "Linux" ] && { 100 | checkDependencies 101 | 102 | [ -z "$pkgNames" ] || installDependencies "$pkgNames" 103 | 104 | downloadLatestGitSourceTarballAndInstall 105 | } 106 | } 107 | 108 | main 109 | -------------------------------------------------------------------------------- /ios/archive.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | method 6 | ad-hoc 7 | teamID 8 | NWLTN55N9S 9 | compileBitcode 10 | 11 | uploadSymbols 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /ios/tool.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | #================================================================# 4 | #将此脚本放置于您的iOS WorkSpace或Project的根目录下 5 | 6 | 7 | #===============下面的变量的取值根据自己的情况修改===============# 8 | 9 | # 当前登陆用户的登录密码(导入P12文件的时候需要授权使用) 10 | LOGIN_PASSWORD= 11 | 12 | # P12文件路径(P12文件是用密码进行保护的,因为它里面包含有私钥) 13 | P12_PATH=ios_development.p12 14 | 15 | # P12文件的访问密码 16 | P12_PASSWORD= 17 | 18 | # 设备描述文件路径 19 | PROVISIONING_PROFILE_PATH=ios_provisioning_profile.mobileprovision 20 | 21 | #使用的SDK和版本,用xcodebuild -showsdks可以查看到 22 | SDK='iphoneos13.1' 23 | 24 | #================================================================# 25 | 26 | currentScriptDir=$(cd "$(dirname "$0")" || exit; pwd) 27 | 28 | Color_Purple='\033[0;35m' # Purple 29 | Color_Off='\033[0m' # Reset 30 | 31 | msg() { 32 | printf "%b\n" "$1" 33 | } 34 | 35 | info() { 36 | msg "${Color_Purple}[❉]${Color_Off} $1$2" 37 | } 38 | 39 | # 钥匙串路径 40 | LOGIN_KEYCHAIN=~/Library/Keychains/login.keychain 41 | 42 | # 导入P12文件 43 | importP12() { 44 | # 解锁,否则系统会弹框等待用户输入密码 45 | security unlock-keychain -p ${LOGIN_PASSWORD} ${LOGIN_KEYCHAIN} 46 | 47 | # 导入证书 48 | security import ${P12_PATH} -k ${LOGIN_KEYCHAIN} -P ${P12_PASSWORD} -T /usr/bin/codesign 49 | } 50 | 51 | #把设备描述文件复制到指定目录下 52 | cpProvisioningProfile() { 53 | tmpFile=$(mktemp) 54 | security cms -D -i $PROVISIONING_PROFILE_PATH > "$tmpFile" 2> /dev/null 55 | provisioningProfileUUID=$(getValueFromPListFile "$tmpFile" UUID) 56 | rm -f "$tmpFile" 57 | cp "$PROVISIONING_PROFILE_PATH" "$HOME/Library/MobileDevice/Provisioning Profiles/${provisioningProfileUUID}.mobileprovision" 58 | } 59 | 60 | #从plist文件中获取指定Key的值 61 | #$1是plist文件路径 62 | #$2是key 63 | getValueFromPListFile() { 64 | /usr/libexec/PlistBuddy -c "print $2" "$1" 65 | } 66 | 67 | initVslues() { 68 | currentDate=$(date +%Y%m%d) 69 | info "currentDate : $currentDate" 70 | 71 | workspace=$(find . -name "*.xcworkspace" -d 1) 72 | 73 | if [ -z "$workspace" ] ; then 74 | project=$(find . -name "*.xcodeproj" -d 1) 75 | appName=$(basename "$project" .xcodeproj) 76 | info "project : $project" 77 | info "appName : $appName" 78 | else 79 | appName=$(basename "$workspace" .xcworkspace) 80 | info "workspace : $workspace" 81 | info "appName : $appName" 82 | fi 83 | } 84 | 85 | check() { 86 | [ -z "$LOGIN_PASSWORD" ] && error "LOGIN_PASSWORD isn't config" 87 | [ -z "$P12_PATH" ] && error "P12_PATH isn't config" 88 | [ -z "$P12_PASSWORD" ] && error "P12_PASSWORD isn't config" 89 | [ -z "$PROVISIONING_PROFILE_PATH" ] && error "PROVISIONING_PROFILE_PATH isn't config" 90 | [ -z "$SDK" ] && error "SDK isn't config" 91 | } 92 | 93 | # 运行静态代码检测 94 | runSonar() { 95 | check 96 | 97 | # 导入证书 98 | importP12 99 | 100 | # 把设备描述文件放到指定目录下 101 | cpProvisioningProfile 102 | 103 | # 编译 104 | xcodebuild -workspace "$workspace" -scheme "$appName" clean build | tee xcodebuild.log | xcpretty -t -r json-compilation-database -o compile_commands.json 105 | oclint-json-compilation-database -e Pods -e "${appName}/Vendors" -v -- -report-type pmd -o sonar-reports/oclint.xml 106 | 107 | sed -i "" "s/[0-9]\{8\}/${currentDate}/g" sonar-project.properties 108 | 109 | sonar-runner 110 | } 111 | 112 | # 构建 113 | # $1构建类型:Debug、Release 114 | runBuild() { 115 | check 116 | 117 | # 导入证书 118 | importP12 119 | 120 | # 把设备描述文件放到指定目录下 121 | cpProvisioningProfile 122 | 123 | appInfoPList=${appName}/Info.plist 124 | 125 | # 取版本号 126 | versionName=$(getValueFromPListFile "$appInfoPList" CFBundleShortVersionString) 127 | 128 | # IPA名称 129 | ipaName=${appName}_${versionName}_$(date +%Y%m%d).ipa 130 | 131 | # 获得证书签名 132 | codeSignIdentity=$(openssl pkcs12 -in $P12_PATH -passin pass:"$P12_PASSWORD" -nodes | grep "friendlyName: iPhone") 133 | codeSignIdentity=$(printf "%s\n" "$codeSignIdentity" | awk '{ string=substr($0, 19, length); print string }') 134 | 135 | buildPath="$currentScriptDir/build" 136 | archivePath="${buildPath}/${appName}.xcarchive" 137 | 138 | info "ipaName : $ipaName" 139 | 140 | # 编译并归档 141 | xcodebuild \ 142 | -workspace "$workspace" \ 143 | -scheme "$appName" \ 144 | -configuration "$1" \ 145 | -sdk "$SDK" \ 146 | -archivePath "$archivePath" \ 147 | CODE_SIGN_STYLE=Automatic \ 148 | CODE_SIGN_IDENTITY="$codeSignIdentity" \ 149 | PROVISIONING_PROFILE="$provisioningProfileUUID" \ 150 | CONFIGURATION_BUILD_DIR="$buildPath" \ 151 | VALID_ARCHS="arm64 armv7 armv7s" \ 152 | clean archive 153 | # 打包ipa 154 | xcodebuild -exportArchive -archivePath "$archivePath" -exportOptionsPlist archive.plist -exportPath "$ipaName" 155 | } 156 | 157 | showHelp() { 158 | cat < /dev/null ; then 19 | info "Updating HomeBrew..." 20 | brew update 21 | else 22 | info "Installing HomeBrew..." 23 | printf "\n\n" | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 24 | fi 25 | } 26 | 27 | checkDependencies() { 28 | info "Checking Dependencies..." 29 | command -v curl > /dev/null || pkgNames="curl" 30 | (command -v bash > /dev/null || command -v zsh > /dev/null) || pkgNames="$pkgNames zsh" 31 | } 32 | 33 | installDependencies() { 34 | info "Installing Dependencies $pkgNames" 35 | 36 | if [ "$osType" = "Darwin" ] ; then 37 | installOrUpdateHomeBrew && 38 | brew install $@ 39 | return $? 40 | elif [ "$osType" = "Linux" ] ; then 41 | # Termux 42 | if [ "$(uname -o 2> /dev/null)" = "Android" ] ; then 43 | pkg update -y && 44 | pkg install -y $@ 45 | return $? 46 | fi 47 | 48 | # ArchLinux、ManjaroLinux 49 | command -v pacman > /dev/null && { 50 | $sudo pacman -Syyuu --noconfirm && 51 | $sudo pacman -S --noconfirm $@ 52 | return $? 53 | } 54 | 55 | # AlpineLinux 56 | command -v apk > /dev/null && { 57 | $sudo apk update && 58 | $sudo apk add $@ 59 | return $? 60 | } 61 | 62 | # Debian GNU/LInux系 63 | command -v apt-get > /dev/null && { 64 | $sudo apt-get -y update && 65 | $sudo apt-get -y install $@ 66 | return $? 67 | } 68 | 69 | # Fedora、CentOS8 70 | command -v dnf > /dev/null && { 71 | $sudo dnf -y update && 72 | $sudo dnf -y install $@ 73 | return $? 74 | } 75 | 76 | # RHEL CentOS 7、6 77 | command -v yum > /dev/null && { 78 | $sudo yum -y update && 79 | $sudo yum -y install $@ 80 | return $? 81 | } 82 | 83 | # OpenSUSE 84 | command -v zypper > /dev/null && { 85 | $sudo zypper update -y && 86 | $sudo zypper install -y $@ 87 | return $? 88 | } 89 | fi 90 | 91 | # FreeBSD 92 | command -v pkg > /dev/null && { 93 | $sudo pkg update -y && 94 | $sudo pkg install -y $@ 95 | return $? 96 | } 97 | } 98 | 99 | installNVM() { 100 | info "Installing nvm..." 101 | bash=$(command -v bash) 102 | [ -z "$bash" ] && bash=$(command -v zsh) 103 | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | "$bash" 104 | } 105 | 106 | changeNPMRegistryToChineseMirrorIfPossible() { 107 | command -v npm > /dev/null || return 0 108 | if [ "$(npm config get registry)" = "https://registry.npmjs.org/" ] ; then 109 | npm config set registry "https://registry.npm.taobao.org/" && 110 | info "change npm registry to https://registry.npm.taobao.org/" 111 | fi 112 | } 113 | 114 | configEnv() { 115 | str="export NVM_DIR=~/.nvm && source \"\$NVM_DIR/nvm.sh\"" 116 | printf "%s\n" "$str" >> ~/.bashrc 117 | printf "%s\n" "$str" >> ~/.bash_profile 118 | printf "%s\n" "$str" >> ~/.zshrc 119 | } 120 | 121 | main() { 122 | command -v nvm > /dev/null && { 123 | changeNPMRegistryToChineseMirrorIfPossible 124 | info "nvm already installed!" 125 | exit 126 | } 127 | 128 | checkDependencies 129 | ([ -z "$pkgNames" ] || installDependencies "$pkgNames") && installNVM && configEnv 130 | } 131 | 132 | main 133 | -------------------------------------------------------------------------------- /oh-my-fish/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | Color_Purple='\033[0;35m' # Purple 4 | Color_Off='\033[0m' # Reset 5 | 6 | msg() { 7 | printf "%b\n" "$1" 8 | } 9 | 10 | info() { 11 | msg "${Color_Purple}[❉]${Color_Off} $1$2" 12 | } 13 | 14 | installOhMyFish() { 15 | info "Installing oh-my-fish..." 16 | curl -L https://get.oh-my.fish | fish 17 | } 18 | 19 | checkDependencies() { 20 | info "CheckDependencies" 21 | 22 | if command -v emerge > /dev/null ; then 23 | command -v git > /dev/null || pkgNames="$pkgNames dev-vcs/git" 24 | else 25 | command -v git > /dev/null || pkgNames="$pkgNames git" 26 | fi 27 | 28 | command -v curl > /dev/null || pkgNames="curl" 29 | command -v git > /dev/null || pkgNames="$pkgNames git" 30 | command -v fish > /dev/null || pkgNames="$pkgNames fish" 31 | command -v which > /dev/null || pkgNames="$pkgNames which" 32 | } 33 | 34 | installDependencies() { 35 | info "InstallDependencies $pkgNames" 36 | 37 | sudo=$(command -v sudo 2> /dev/null) 38 | osType=$(uname -s) 39 | 40 | if [ "$osType" = "Linux" ] ; then 41 | # Gentoo、Funtoo 42 | command -v emerge > /dev/null && { 43 | $sudo emerge $@ 44 | return $? 45 | } 46 | 47 | # ArchLinux、ManjaroLinux 48 | command -v pacman > /dev/null && { 49 | $sudo pacman -Syyuu --noconfirm && 50 | $sudo pacman -S --noconfirm $@ 51 | return $? 52 | } 53 | 54 | # Debian GNU/Linux系 55 | command -v apt-get > /dev/null && { 56 | $sudo apt-get -y update && 57 | $sudo apt-get -y install $@ 58 | return $? 59 | } 60 | 61 | # Fedora、CentOS8 62 | command -v dnf > /dev/null && { 63 | $sudo dnf -y update && 64 | $sudo dnf -y install $@ 65 | return $? 66 | } 67 | 68 | # CentOS7、6 69 | command -v yum > /dev/null && { 70 | $sudo yum -y update && 71 | (command -v fish > /dev/null || $sudo yum -y install epel-release) && 72 | $sudo yum -y install $@ 73 | return $? 74 | } 75 | 76 | # OpenSUSE 77 | command -v zypper > /dev/null && { 78 | $sudo zypper update -y && 79 | $sudo zypper install -y $@ 80 | return $? 81 | } 82 | 83 | # AlpineLinux 84 | command -v apk > /dev/null && { 85 | $sudo apk update && 86 | $sudo apk add $@ 87 | return $? 88 | } 89 | elif [ "$osType" = "Darwin" ] ; then 90 | if command -v brew > /dev/null ; then 91 | brew update 92 | else 93 | printf "\n" | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 94 | fi 95 | 96 | brew install $@ 97 | return $? 98 | fi 99 | } 100 | 101 | main() { 102 | checkDependencies 103 | 104 | [ -z "$pkgNames" ] || installDependencies "$pkgNames" 105 | 106 | installOhMyFish 107 | } 108 | 109 | main 110 | -------------------------------------------------------------------------------- /oh-my-tmux/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | sudo=$(command -v sudo 2> /dev/null); 4 | osType=$(uname -s); 5 | 6 | Color_Purple='\033[0;35m' # Purple 7 | Color_Off='\033[0m' # Reset 8 | 9 | msg() { 10 | printf "%b\n" "$1" 11 | } 12 | 13 | info() { 14 | msg "${Color_Purple}[❉]${Color_Off} $1$2" 15 | } 16 | 17 | installOhMyTmux() { 18 | [ -f ~/.tmux.conf ] && mv ~/.tmux.conf ~/.tmux.conf.bak 19 | curl -L -o ~/.tmux.conf https://raw.githubusercontent.com/gpakosz/.tmux/master/.tmux.conf 20 | curl -L -o ~/.tmux.conf.local https://raw.githubusercontent.com/gpakosz/.tmux/master/.tmux.conf.local 21 | } 22 | 23 | checkDependencies() { 24 | info "checkDependencies..." 25 | command -v curl > /dev/null || pkgNames="curl" 26 | command -v tmux > /dev/null || pkgNames="$pkgNames tmux" 27 | } 28 | 29 | installDependencies() { 30 | info "installDependencies $pkgNames" 31 | 32 | if [ "$osType" = "Linux" ] ; then 33 | # ArchLinux、ManjaroLinux 34 | command -v pacman > /dev/null && { 35 | $sudo pacman -Syyuu --noconfirm && 36 | $sudo pacman -S --noconfirm $@ 37 | return 0 38 | } 39 | 40 | # Debian GNU/Linux系 41 | command -v apt-get > /dev/null && { 42 | $sudo apt-get -y update && 43 | $sudo apt-get -y install $@ 44 | return 0 45 | } 46 | 47 | # Fedora、CentOS8 48 | command -v dnf > /dev/null && { 49 | $sudo dnf -y update && 50 | $sudo dnf -y install $@ 51 | return 0 52 | } 53 | 54 | # CentOS7、6 55 | command -v yum > /dev/null && { 56 | $sudo yum -y update && 57 | $sudo yum -y install $@ 58 | return 0 59 | } 60 | 61 | # OpenSUSE 62 | command -v zypper > /dev/null && { 63 | $sudo zypper update -y && 64 | $sudo zypper install -y $@ 65 | return 0 66 | } 67 | 68 | # AlpineLinux 69 | command -v apk > /dev/null && { 70 | $sudo apk update && 71 | $sudo apk add $@ 72 | return 0 73 | } 74 | elif [ "$osType" = "Darwin" ] ; then 75 | if command -v brew > /dev/null ; then 76 | brew update 77 | else 78 | printf "\n\n" | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 79 | fi 80 | brew install $@ 81 | fi 82 | } 83 | 84 | main() { 85 | checkDependencies 86 | [ -z "$pkgNames" ] || installDependencies "$pkgNames" 87 | installOhMyTmux 88 | } 89 | 90 | main 91 | -------------------------------------------------------------------------------- /oh-my-zsh/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | [ "$(whoami)" = "root" ] || sudo=$(command -v sudo) 4 | 5 | osType=$(uname -s) 6 | 7 | Color_Purple='\033[0;35m' # Purple 8 | Color_Off='\033[0m' # Reset 9 | 10 | msg() { 11 | printf "%b\n" "$1" 12 | } 13 | 14 | info() { 15 | msg "${Color_Purple}[❉]${Color_Off} $1$2" 16 | } 17 | 18 | compatibleSed() { 19 | [ -z "$sed" ] && sed=$(command -v gsed) 20 | [ -z "$sed" ] && sed=$(command -v sed) 21 | "$sed" -i "$1" "$2" 22 | } 23 | 24 | makeTempFile() { 25 | if command -v mktemp > /dev/null ; then 26 | printf "%s\n" "$(mktemp)" 27 | else 28 | printf "%s\n" "$(date +%Y%m%d%H%M%S)" 29 | fi 30 | } 31 | 32 | installOhMyZsh() { 33 | info "installOhMyZsh..." 34 | 35 | scriptFileName="$(makeTempFile)" 36 | [ -f "$scriptFileName" ] && rm "$scriptFileName" 37 | 38 | curl -fsSL -o "$scriptFileName" https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh || exit 1 39 | 40 | lineNumber=$(grep "exec zsh -l" -n "$scriptFileName" | awk -F: '{print $1}') 41 | 42 | compatibleSed "${lineNumber}d" "$scriptFileName" 43 | 44 | (sh "$scriptFileName" && rm "$scriptFileName") || exit 1 45 | 46 | pluginsDir=~/.oh-my-zsh/plugins 47 | 48 | if [ -d "$pluginsDir" ] ; then 49 | #这里不使用-C参数的因为是,CentOS里的git命令的版本比较低,没有此参数 50 | git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $pluginsDir/zsh-syntax-highlighting && \ 51 | git clone https://github.com/zsh-users/zsh-autosuggestions.git $pluginsDir/zsh-autosuggestions && \ 52 | git clone https://github.com/zsh-users/zsh-completions.git $pluginsDir/zsh-completions && { 53 | #更新插件列表 54 | lineNumber=$(grep "^plugins=(" -n ~/.zshrc | awk -F: '{print $1}') 55 | plugins=$(grep "^plugins=(" -n ~/.zshrc | sed 's/.*plugins=(\(.*\)).*/\1/') 56 | plugins="plugins=(${plugins} zsh-syntax-highlighting zsh-autosuggestions zsh-completions)" 57 | 58 | compatibleSed "${lineNumber}c ${plugins}" ~/.zshrc 59 | 60 | lineNumbers=$(grep "compinit" -n ~/.zshrc | awk -F: '{print $1}') 61 | for lineNumber in $lineNumbers 62 | do 63 | compatibleSed "${lineNumber}d" ~/.zshrc 64 | done 65 | printf "autoload -U compinit && compinit\n" >> ~/.zshrc 66 | env zsh -l 67 | } 68 | fi 69 | } 70 | 71 | checkDependencies() { 72 | info "checkDependencies..." 73 | 74 | command -v emerge > /dev/null && { 75 | command -v curl > /dev/null || pkgNames="$pkgNames net-misc/curl" 76 | command -v git > /dev/null || pkgNames="$pkgNames dev-vcs/git" 77 | command -v zsh > /dev/null || pkgNames="$pkgNames app-shells/zsh app-shells/gentoo-zsh-completions" 78 | command -v awk > /dev/null || pkgNames="$pkgNames sys-apps/gawk" 79 | command -v sed > /dev/null || pkgNames="$pkgNames sys-apps/sed" 80 | return 0 81 | } 82 | 83 | command -v curl > /dev/null || pkgNames="$pkgNames curl" 84 | command -v git > /dev/null || pkgNames="$pkgNames git" 85 | command -v zsh > /dev/null || pkgNames="$pkgNames zsh" 86 | command -v awk > /dev/null || pkgNames="$pkgNames gawk" 87 | 88 | case "$osType" in 89 | Darwin) command -v gsed > /dev/null || pkgNames="$pkgNames gnu-sed" ;; 90 | *BSD) command -v gsed > /dev/null || pkgNames="$pkgNames gsed" ;; 91 | *) command -v sed > /dev/null || pkgNames="$pkgNames sed" 92 | esac 93 | } 94 | 95 | installDependencies() { 96 | info "installDependencies $pkgNames" 97 | 98 | if [ "$osType" = "Linux" ] ; then 99 | # ArchLinux、Manjaro 100 | command -v pacman > /dev/null && { 101 | $sudo pacman -Syyuu --noconfirm && 102 | $sudo pacman -S --noconfirm $@ 103 | return 0 104 | } 105 | 106 | # Debian GNU/Linux系 107 | command -v apt-get > /dev/null && { 108 | $sudo apt-get -y update && 109 | $sudo apt-get -y install $@ 110 | return 0 111 | } 112 | 113 | # Fedora、RHEL8、CentOS8 114 | command -v dnf > /dev/null && { 115 | $sudo dnf -y update && 116 | $sudo dnf -y install $@ 117 | return 0 118 | } 119 | 120 | # CentOS7、6 121 | command -v yum > /dev/null && { 122 | $sudo yum -y update && 123 | $sudo yum -y install $@ 124 | return 0 125 | } 126 | 127 | # OpenSUSE 128 | command -v zypper > /dev/null && { 129 | $sudo zypper update -y && 130 | $sudo zypper install -y $@ 131 | return 0 132 | } 133 | 134 | # AlpineLinux 135 | command -v apk > /dev/null && { 136 | $sudo apk update && 137 | $sudo apk add $@ 138 | return 0 139 | } 140 | 141 | # Gentoo Linux 142 | command -v emerge > /dev/null && { 143 | $sudo emerge $@ 144 | return 0 145 | } 146 | elif [ "$osType" = "Darwin" ] ; then 147 | if command -v brew > /dev/null ; then 148 | brew update 149 | else 150 | printf "\n\n" | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 151 | fi 152 | brew install $@ 153 | return $? 154 | fi 155 | 156 | # FreeBSD 157 | command -v pkg > /dev/null && { 158 | $sudo pkg update && 159 | $sudo pkg install -y $@ 160 | return $? 161 | } 162 | 163 | # NetBSD、MirBSD 164 | command -v pkgin > /dev/null && { 165 | $sudo pkgin -y update && 166 | $sudo pkgin -y install $@ 167 | return $? 168 | } 169 | 170 | # OpenBSD 171 | command -v pkg_add > /dev/null && { 172 | $sudo pkg_add $@ 173 | return $? 174 | } 175 | } 176 | 177 | main() { 178 | checkDependencies 179 | 180 | [ -z "$pkgNames" ] || installDependencies "$pkgNames" 181 | 182 | installOhMyZsh 183 | } 184 | 185 | main 186 | -------------------------------------------------------------------------------- /redex/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:18.04 2 | 3 | MAINTAINER 792793182@qq.com 4 | 5 | # Android SDK Tools下载地址:https://developer.android.google.cn/studio 6 | RUN rm /etc/apt/sources.list && \ 7 | echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> /etc/apt/sources.list && \ 8 | echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list && \ 9 | echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list && \ 10 | echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list && \ 11 | echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list && \ 12 | apt-get update && \ 13 | apt-get install -y curl unzip openjdk-8-jdk git make g++ automake autoconf autoconf-archive libtool libboost-all-dev liblz4-dev liblzma-dev zlib1g-dev binutils-dev libjemalloc-dev libiberty-dev libjsoncpp-dev && \ 14 | apt-get clean && \ 15 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ 16 | mkdir -p /usr/local/share/android-sdk && \ 17 | cd /usr/local/share/android-sdk && \ 18 | curl -LO https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip && \ 19 | unzip sdk-tools-linux-4333796.zip && \ 20 | rm sdk-tools-linux-4333796.zip && \ 21 | cd tools/bin && \ 22 | echo y | ./sdkmanager "platforms;android-28" && \ 23 | echo y | ./sdkmanager "platform-tools" && \ 24 | echo y | ./sdkmanager "build-tools;28.0.3" && \ 25 | git clone https://github.com/facebook/redex.git && \ 26 | cd redex && \ 27 | autoreconf -ivf && \ 28 | ./configure && \ 29 | make && \ 30 | make install && \ 31 | cd .. && \ 32 | rm -rf redex 33 | 34 | ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 35 | ENV ANDROID_HOME /usr/local/share/android-sdk 36 | ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/platform-tools 37 | ENV LANG C.UTF-8 38 | 39 | CMD [ "bash" ] 40 | -------------------------------------------------------------------------------- /vcpkg/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | url=https://github.com/Microsoft/vcpkg.git 4 | destDir=/usr/local/opt/vcpkg 5 | sudo=$(command -v sudo 2> /dev/null) 6 | osType=$(uname -s) 7 | 8 | Color_Red='\033[0;31m' # Red 9 | Color_Green='\033[0;32m' # Green 10 | Color_Purple='\033[0;35m' # Purple 11 | Color_Off='\033[0m' # Reset 12 | 13 | msg() { 14 | printf "%b\n" "$1" 15 | } 16 | 17 | info() { 18 | msg "${Color_Purple}[❉]${Color_Off} $1$2" 19 | } 20 | 21 | success() { 22 | msg "${Color_Green}[✔]${Color_Off} $1$2" 23 | } 24 | 25 | error() { 26 | msg "${Color_Red}[✘]${Color_Off} $1$2" 27 | exit 1 28 | } 29 | 30 | install_macOS_SDK_headers_IfNeeded() { 31 | [ -d /usr/include ] || $sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target / 32 | } 33 | 34 | checkDependencies() { 35 | info "checkDependencies..." 36 | 37 | command -v curl > /dev/null || pkgNames="$pkgNames curl" 38 | command -v git > /dev/null || pkgNames="$pkgNames git" 39 | command -v unzip > /dev/null || pkgNames="$pkgNames unzip" 40 | command -v gzip > /dev/null || pkgNames="$pkgNames gzip" 41 | 42 | if [ "$osType" = "Drawin" ] ; then 43 | install_macOS_SDK_headers_IfNeeded 44 | command -v sed > /dev/null || pkgNames="$pkgNames gnu-sed" 45 | command -v tar > /dev/null || pkgNames="$pkgNames gnu-tar" 46 | command -v g++-9 > /dev/null || pkgNames="$pkgNames gcc" 47 | else 48 | command -v sed > /dev/null || pkgNames="$pkgNames sed" 49 | command -v tar > /dev/null || pkgNames="$pkgNames tar" 50 | 51 | if ( command -v dnf > /dev/null || 52 | command -v yum > /dev/null || 53 | command -v zypper > /dev/null ) ; then 54 | command -v g++ > /dev/null || pkgNames="$pkgNames gcc gcc-c++" 55 | elif command -v apt-get > /dev/null ; then 56 | command -v g++ > /dev/null || pkgNames="$pkgNames gcc g++" 57 | else 58 | command -v g++ > /dev/null || pkgNames="$pkgNames gcc" 59 | fi 60 | fi 61 | } 62 | 63 | installDependencies() { 64 | info "installDependencies $pkgNames" 65 | 66 | if [ "$osType" = "Linux" ] ; then 67 | # ArchLinux、ManjaroLinux 68 | command -v pacman > /dev/null && { 69 | $sudo pacman -Syyuu --noconfirm && 70 | $sudo pacman -S --noconfirm $@ 71 | return 0 72 | } 73 | 74 | # Debian GNU/Linux系 75 | command -v apt-get > /dev/null && { 76 | $sudo apt-get -y update && 77 | $sudo apt-get -y install $@ 78 | return 0 79 | } 80 | 81 | # Fedora、CentOS8 82 | command -v dnf > /dev/null && { 83 | $sudo dnf -y update && 84 | $sudo dnf -y install $@ 85 | return 0 86 | } 87 | 88 | # CentOS7、6 89 | command -v yum > /dev/null && { 90 | $sudo yum -y update && 91 | $sudo yum -y install $@ 92 | return 0 93 | } 94 | 95 | # OpenSUSE 96 | command -v zypper > /dev/null && { 97 | $sudo zypper update -y && 98 | $sudo zypper install -y $@ 99 | return 0 100 | } 101 | 102 | # AlpineLinux 103 | command -v apk > /dev/null && { 104 | $sudo apk update && 105 | $sudo apk add $@ 106 | return 0 107 | } 108 | elif [ "$osType" = "Darwin" ] ; then 109 | if command -v brew > /dev/null; then 110 | brew update 111 | else 112 | printf "\n\n" | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 113 | fi 114 | 115 | brew install $@ 116 | 117 | return 0 118 | fi 119 | } 120 | 121 | 122 | link() { 123 | linkedDir=/usr/local/bin 124 | if [ -d "$linkedDir" ] ; then 125 | if [ -w "$linkedDir" ] ; then 126 | ln -sf "$destDir/vcpkg" "$linkedDir/vcpkg" 127 | else 128 | sudo ln -sf "$destDir/vcpkg" "$linkedDir/vcpkg" && 129 | sudo chown "$(whoami)" "$linkedDir/vcpkg" 130 | fi 131 | else 132 | $sudo install -d -o "$(whoami)" "$linkedDir" && 133 | ln -sf "$destDir/vcpkg" "$linkedDir/vcpkg" 134 | fi 135 | } 136 | 137 | main() { 138 | if [ -d "$destDir" ] ; then 139 | if [ -d "$destDir/.git" ] ; then 140 | checkDependencies && 141 | ([ -z "$pkgNames" ] || installDependencies "$pkgNames") && 142 | cd "$destDir" && 143 | info "Updateing vcpk..." && 144 | git pull && 145 | info "Reinstalling vcpkg..." && 146 | ./bootstrap-vcpkg.sh && 147 | link && 148 | success "Done!" 149 | else 150 | error "$destDir already exsit, but not a git repo." 151 | fi 152 | else 153 | checkDependencies && 154 | ([ -z "$pkgNames" ] || installDependencies "$pkgNames") && 155 | $sudo install -d -o "$(whoami)" "$destDir" && 156 | info "Downloading vcpk..." && 157 | git clone "$url" "$destDir" && 158 | cd "$destDir" && 159 | info "Installing vcpkg..." && 160 | ./bootstrap-vcpkg.sh && 161 | link && 162 | success "Done!" 163 | fi 164 | } 165 | 166 | main 167 | -------------------------------------------------------------------------------- /xwiki/setup-on-gnu-linux.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | #--------------------------- 说明 -----------------------------# 4 | # 在Ubuntu和CentOS上安装XWiki 5 | # 6 | # 下载地址:http://www.xwiki.org/xwiki/bin/view/Download 7 | # 参考:http://platform.xwiki.org/xwiki/bin/view/Features/DistributionWizard 8 | 9 | #------------------下面的变量可以根据需要修改------------------# 10 | 11 | WORK_DIR=~/bin 12 | 13 | TOMCAT_URL=https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.27/bin/apache-tomcat-9.0.27.tar.gz 14 | 15 | XWIKI_URL=http://download.forge.ow2.org/xwiki/xwiki-enterprise-web-8.4.4.war 16 | 17 | MYSQL_URL=https://downloads.mysql.com/archives/get/file/mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz 18 | 19 | MYSQL_JDBC_DRIVER_URL=http://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.34/mysql-connector-java-5.1.34.jar 20 | 21 | # MySQL的端口 22 | MYSQL_PORT=3306 23 | 24 | # MySQL root用户的密码 25 | MYSQL_ROOT_PASSWORD=123456 26 | 27 | #--------------------------------------------------------------# 28 | 29 | [ "$(whoami)" = "root" ] || sudo=sudo 30 | 31 | Color_Red='\033[0;31m' # Red 32 | Color_Purple='\033[0;35m' # Purple 33 | Color_Off='\033[0m' # Reset 34 | 35 | msg() { 36 | printf "%b\n" "$1" 37 | } 38 | 39 | info() { 40 | msg "${Color_Purple}[❉]${Color_Off} $1$2" 41 | } 42 | 43 | error() { 44 | msg "${Color_Red}[✘]${Color_Off} $1$2" 45 | exit 1 46 | } 47 | 48 | # 设置MySQL的root用户密码 49 | configMySQL() { 50 | if [ -f /usr/local/mysql ] ; then 51 | printf "%s\n" "/usr/local/mysql already exsit, override it? y/n" 52 | read -r var 53 | if [ "$var" = 'y' ] || [ "$var" = 'Y' ] ; then 54 | $sudo mv "$WORK_DIR/$(basename "$MYSQL_URL" .tar.gz)" /usr/local/mysql 55 | else 56 | exit 57 | fi 58 | else 59 | $sudo mv "$WORK_DIR/$(basename "$MYSQL_URL" .tar.gz)" /usr/local/mysql 60 | fi 61 | 62 | info "configMySQL..." 63 | 64 | export PATH=/usr/local/mysql/bin:$PATH 65 | 66 | groupadd -f mysql 67 | useradd -r -s /bin/false -g mysql mysql 2> /dev/null 68 | 69 | $sudo chown -R mysql:mysql /usr/local/mysql 70 | 71 | #创建mysql数据库 72 | mysqld --port=$MYSQL_PORT --initialize 73 | 74 | $sudo chown -R root /usr/local/mysql 75 | $sudo chown -R mysql /usr/local/mysql/data 76 | 77 | mysqld --user=mysql --port=$MYSQL_PORT --skip-grant-tables & 78 | sleep 5 79 | 80 | #修改root账户的密码 81 | printf "%s\n" "UPDATE mysql.user SET authentication_string=Password(${MYSQL_ROOT_PASSWORD}) WHERE User='root'" | mysql 82 | 83 | $sudo pkill mysql 84 | sleep 5 85 | 86 | mysqld_safe --user=mysql --port=$MYSQL_PORT & 87 | sleep 5 88 | 89 | #创建xwiki数据库,并授权 90 | mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "create database if not exists xwiki default character set utf8 collate utf8_bin;\ 91 | grant all privileges on xwiki.* to xwiki identified by 'xwiki';\ 92 | flush privileges;" 93 | } 94 | 95 | checkDependencies() { 96 | info "Checking Dependencies..." 97 | 98 | command -v curl > /dev/null || pkgNames="curl" 99 | command -v zip > /dev/null || pkgNames="$pkgNames zip" 100 | command -v unzip > /dev/null || pkgNames="$pkgNames unzip" 101 | command -v tar > /dev/null || pkgNames="$pkgNames tar" 102 | command -v gzip > /dev/null || pkgNames="$pkgNames gzip" 103 | 104 | command -v java > /dev/null || { 105 | if command -v apt-get > /dev/null ; then 106 | pkgNames="$pkgNames openjdk-8-jdk" 107 | elif command -v dnf > /dev/null ; then 108 | pkgNames="$pkgNames java-1.8.0-openjdk" 109 | elif command -v yum > /dev/null ; then 110 | pkgNames="$pkgNames java-1.8.0-openjdk" 111 | elif command -v zypper > /dev/null ; then 112 | pkgNames="$pkgNames java-1_8_0-openjdk" 113 | elif command -v pacman > /dev/null ; then 114 | pkgNames="$pkgNames jdk8-openjdk" 115 | elif command -v apk > /dev/null ; then 116 | pkgNames="$pkgNames openjdk8" 117 | fi 118 | } 119 | 120 | ldconfig -p | grep libnuma > /dev/null || pkgNames="$pkgNames numactl" 121 | 122 | ldconfig -p | grep libaio > /dev/null || { 123 | if command -v apt-get > /dev/null ; then 124 | pkgNames="$pkgNames libaio-dev" 125 | elif command -v dnf > /dev/null ; then 126 | pkgNames="$pkgNames libaio" 127 | elif command -v yum > /dev/null ; then 128 | pkgNames="$pkgNames libaio" 129 | elif command -v zypper > /dev/null ; then 130 | pkgNames="$pkgNames libaio" 131 | elif command -v pacman > /dev/null ; then 132 | pkgNames="$pkgNames libaio" 133 | elif command -v apk > /dev/null ; then 134 | pkgNames="$pkgNames libaio" 135 | fi 136 | } 137 | } 138 | 139 | # 安装依赖 140 | installDependencies() { 141 | info "Installing Dependencies $pkgNames" 142 | 143 | if command -v apt-get > /dev/null ; then 144 | $sudo apt-get -y update && 145 | $sudo apt-get -y install $@ 146 | elif command -v dnf > /dev/null ; then 147 | $sudo dnf -y update && 148 | $sudo dnf -y install $@ 149 | elif command -v yum > /dev/null ; then 150 | $sudo yum -y update && 151 | $sudo yum -y install $@ 152 | elif command -v zypper > /dev/null ; then 153 | $sudo zypper update -y && 154 | $sudo zypper install -y $@ 155 | elif command -v apk > /dev/null ; then 156 | $sudo apk update && 157 | $sudo apk add $@ 158 | elif command -v pacman > /dev/null ; then 159 | $sudo pacman -Syyuu --noconfirm && 160 | $sudo pacman -S --noconfirm $@ 161 | fi 162 | } 163 | 164 | # 下载 165 | # $1是要下载文件的URL 166 | download() { 167 | fileName=$(basename "$1") 168 | [ -f "$fileName" ] && checkCompleteness "$fileName" && return 0 169 | info "Downloading $1" 170 | curl -C - -LO "$1" 171 | } 172 | 173 | # 下载并解压 174 | # $1是要下载文件的URL 175 | # $2是要解压到的目录 176 | downloadAndUncompress() { 177 | fileName=$(basename "$1") 178 | if [ -f "$fileName" ] ; then 179 | if checkCompleteness "$fileName" ; then 180 | uncompress "$fileName" "$2" 181 | return $? 182 | fi 183 | fi 184 | info "Downloading $1" 185 | curl -C - -LO "$1" || exit 1 186 | uncompress "$fileName" "$2" 187 | } 188 | 189 | # 检测文件的完整性 190 | # $1是文件路径 191 | checkCompleteness() { 192 | fileName=$1 193 | extension="${fileName##*.}" 194 | 195 | info "checkCompleteness $fileName" 196 | 197 | case $extension in 198 | "tgz") 199 | tar -tf "$fileName" > /dev/null 200 | ;; 201 | "gz") 202 | tar -tf "$fileName" > /dev/null 203 | ;; 204 | "zip") 205 | unzip -t "$fileName" > /dev/null 206 | ;; 207 | "war") 208 | unzip -t "$fileName" > /dev/null 209 | ;; 210 | "jar") 211 | unzip -t "$fileName" > /dev/null 212 | ;; 213 | esac 214 | } 215 | 216 | # 解压文件 217 | # $1是要解压的文件路径 218 | # $2是要解压到的目录 219 | uncompress() { 220 | info "Uncompressing $1" 221 | fileName=$1 222 | extension="${fileName##*.}" 223 | 224 | if [ -z "$2" ] ; then 225 | destDir="$WORK_DIR" 226 | else 227 | destDir="$2" 228 | fi 229 | 230 | info "uncompress $fileName extension=$extension" 231 | 232 | case $extension in 233 | "tgz") 234 | tar zvxf "$fileName" -C "$destDir" 235 | ;; 236 | "gz") 237 | tar zvxf "$fileName" -C "$destDir" 238 | ;; 239 | "zip") 240 | unzip "$fileName" -d "$destDir" 241 | ;; 242 | "war") 243 | unzip "$fileName" -d "$destDir" 244 | ;; 245 | "jar") 246 | unzip "$fileName" -d "$destDir" 247 | ;; 248 | esac 249 | } 250 | 251 | writeJDKEnv() { 252 | cat >> "$1" < /dev/null || pkgNames="curl" 38 | command -v tar > /dev/null || pkgNames="$pkgNames tar" 39 | command -v gzip > /dev/null || pkgNames="$pkgNames gzip" 40 | command -v grep > /dev/null || pkgNames="$pkgNames grep" 41 | command -v ps > /dev/null || pkgNames="$pkgNames procps procps-ng" 42 | } 43 | 44 | installDependencies() { 45 | info "installDependencies $pkgNames" 46 | 47 | command -v apt-get > /dev/null && { 48 | $sudo apt-get -y update && 49 | $sudo apt-get -y install $@ 50 | return $? 51 | } 52 | 53 | command -v dnf > /dev/null && { 54 | $sudo dnf -y update && 55 | $sudo dnf -y install $@ 56 | return $? 57 | } 58 | 59 | command -v yum > /dev/null && { 60 | $sudo yum -y update && 61 | $sudo yum -y install $@ 62 | return $? 63 | } 64 | 65 | command -v zypper > /dev/null && { 66 | $sudo zypper update -y && 67 | $sudo zypper install -y $@ 68 | return $? 69 | } 70 | 71 | command -v pacman > /dev/null && { 72 | $sudo pacman -Syyuu --noconfirm && 73 | $sudo pacman -S --noconfirm $@ 74 | return $? 75 | } 76 | 77 | command -v apk > /dev/null && { 78 | $sudo apk update && 79 | $sudo apk add $@ 80 | return $? 81 | } 82 | } 83 | 84 | downloadExtractStart() { 85 | # 32位还是64位 86 | if [ "$(uname -m)" = "x86_64" ] ; then 87 | x=64 88 | else 89 | x=32 90 | fi 91 | 92 | fileName=ZenTaoPMS.${VERSION}.zbox_${x}.tar.gz 93 | url=http://dl.cnezsoft.com/zentao/${VERSION}/${fileName} 94 | 95 | cd "$HOME" || exit 96 | 97 | [ -f "${fileName}" ] && tar -tf ${fileName} > /dev/null 2>&1 && { 98 | extractAndStartService "$fileName" 99 | exit $? 100 | } 101 | curl -C - -LO ${url} && extractAndStartService "$fileName" 102 | } 103 | 104 | extractAndStartService() { 105 | $sudo tar zvxf "$1" -C /opt && 106 | $sudo /opt/zbox/zbox start -ap ${APACHE_PORT} -mp ${MYSQL_PORT} 107 | } 108 | 109 | main() { 110 | [ "$(uname -s)" = "Darwin" ] && { 111 | info "ZenTaoPMS not support macOS!" 112 | exit 1 113 | } 114 | 115 | [ -f "/opt/zbox/zbox" ] && { 116 | info "ZenTaoPMS already installed! Location:/opt/zbox/" 117 | exit 0 118 | } 119 | 120 | checkDependencies 121 | 122 | ([ -z "$pkgNames" ] || installDependencies "$pkgNames") && downloadExtractStart 123 | } 124 | 125 | main 126 | -------------------------------------------------------------------------------- /zhcon/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | curl -LO https://jaist.dl.sourceforge.net/project/zhcon/zhcon/0.2.6/zhcon-0.2.5.tar.gz 4 | curl -LO https://jaist.dl.sourceforge.net/project/zhcon/zhcon/0.2.6/zhcon-0.2.5-to-0.2.6.diff.gz 5 | --------------------------------------------------------------------------------