LFS 8.3 从零开始做自己的系统(一)~!~

此文是写给新手的教程~!~
我会尽量写的详细一些。
虚拟机软件:我选的是VirtualBox,版本:4.3.12 r93733。如果用vmware的话,设置方面基本差不多。
缩主机系统:我用的是debian linux系统。(我是在163网站下载的,你也可以去官网上下载live-cd。请尽量用debian9.5.0系统,因为我是按照这个系统写的教程。其实,只是用这个光盘来引导系统,不用安装整个debian。)下载地址:
http://mirrors.163.com/debian-cd/9.5.0-live/amd64/iso-hybrid/debian-live-9.5.0-amd64-cinnamon.iso

开始我们的LFS 8.3之旅。
一、建立虚拟机:
1.内存1G
2.硬盘64G
3.CPU 4个(这个根据实际情况设置,我的是8核的,设置了4个)
4.网卡选择:桥接网卡
下面是我虚拟机设置的截图:



现在虚拟机已经建立完成,点击启动。
二、建立缩主机系统:
1.debian系统启动时,在Main Menu的主菜单中,直接回车。进入debian live-cd系统。
2.点击左下角的Menu 菜单选择终端如下图;

3.切换到root用户,在终端中输入:sudo su root


4.更新软件源(有的时候非常慢),输入:apt-get update

5.更改root密码,(相同的密码输入再次)输入:passwd

5.看一下现在虚拟机自动获取的IP地址(inet 后面的是你现在的IP地址,我的是192.168.3.85,将你的IP地址记下来,一会儿要用到。),输入:ifconfg

6.安装ssh-server服务(以后,我们会用ssh客户端登录到虚拟机来完成安装LFS系统。),输入:apt-get install openssh-server 当询问“您是否想继续?”时,输入y回车。

7.配置ssh-server,输入:nano /etc/ssh/sshd_config

8.打开ssh-server的配置文件,向下移动光标,将PermitRootLogin prohibit-password将前面的#号去掉,并且把后面的prohibit-password去掉,换成yes。将PasswordAuthentication yes前面的#号去掉。修改后,先按Ctrl+o然后回车,再按Ctrl+x退出。


9.启动ssh-server服务,输入:/etc/init.d/ssh start

到此,ssh-server配置完成。现在,可以将虚拟机最小化,用ssh客户端软件,输入你刚才用ifconfig查看的IP地址,登录到虚拟机。

三、建立缩主机系统:
1.检测缩主机系统软件版本,编写version-check.sh文件:
cat > version-check.sh << "EOF"
#!/bin/bash
export LC_ALL=C
bash --version | head -n1 | cut -d" " -f2-4
MYSH=$(readlink -f /bin/sh)
echo "/bin/sh -> $MYSH"
echo $MYSH | grep -q bash || echo "ERROR: /bin/sh does not point to bash"
unset MYSH
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-
bison --version | head -n1
if [ -h /usr/bin/yacc ]; then
echo "/usr/bin/yacc -> readlink -f /usr/bin/yacc";
elif [ -x /usr/bin/yacc ]; then
echo yacc is /usr/bin/yacc --version | head -n1
else
echo "yacc not found"
fi
bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1

if [ -h /usr/bin/awk ]; then
echo "/usr/bin/awk -> readlink -f /usr/bin/awk";
elif [ -x /usr/bin/awk ]; then
echo awk is /usr/bin/awk --version | head -n1
else
echo "awk not found"
fi
gcc --version | head -n1
g++ --version | head -n1
ldd --version | head -n1 | cut -d" " -f2- # glibc version
grep --version | head -n1
gzip --version | head -n1
cat /proc/version
m4 --version | head -n1
make --version | head -n1
patch --version | head -n1
echo Perl perl -V:version
sed --version | head -n1
tar --version | head -n1
makeinfo --version | head -n1
xz --version | head -n1
echo ‘int main(){}‘ > dummy.c && g++ -o dummy dummy.c
if [ -x dummy ]
then echo "g++ compilation OK";
else echo "g++ compilation failed"; fi
rm -f dummy.c dummy
EOF
2.运行version-check.sh脚本,输入:
bash version-check.sh
3.输出结果如下图:

4.调整及安装软件,使缩主机适合LFS8.3系统的需求:
(1)ln -sf bash /bin/sh //修改bash指向/bin/sh
(2)apt-get install bison //安装bison
(3)apt-get install g++ //安装g++
(4)apt-get install texinfo //安装texinfo
(5)再次执行version-check.sh文件,查看缩主机软件版本:
bash version-check.sh
输出如下图:

(6)以上结果同下图比较,软件版本全部比官方要求的高。不过,没什么问题。只要不缺少软件就可以。我是用以上软件版本编译通过的。

5.创建分区:
(1)我用的是cfdisk命令分区的,如下图:

(2)选择gpt:

(3)第一个分区:sda1 大小:2M (用gpt,必须分一个2M的小分区,做为第一分区。)
(4)第二个分区:sda2 大小:2048M (交换分区)
(5)第三个分区:sda3 大小:剩余全部空间(/分区)
(6)分区格式设置:将光标移动到sda1 按键盘上的t键,用光标找到 BIOS boot格式,并回车。再将光标移动到sda2,按键盘上的t键,将光标移动到Linux swap回车。sda3 分区默认。再将光标移动到Write(再最下面),按回车,输入:yes回车,然后按q键退出分区。这样我们的分区就完成了。

5.在分区上创建文件系统(格式化)(sda1分区不用管,那个是给grub准备的。):
(1)mkfs -v -t ext4 /dev/sda3
(2)格式化交换分区:
mkswap /dev/sda2
6.设置$LFS变量、建立目录、挂载分区:
export LFS=/mnt/lfs
mkdir -pv $LFS
mount -v -t ext4 /dev/sda3 $LFS
/sbin/swapon -v /dev/sda2 //交换分区
7.创建源代码目录、设置权限并进入目录:
mkdir -v $LFS/sources
chmod -v a+wt $LFS/sources
cd $LFS/sources
四、软件包、补丁及准备工作:
1.下载源代码(我是在兰州大学开源社区下载的,你也可以在官网上下载,就是速度慢此):
wget https://mirror.lzu.edu.cn/lfs/lfs-packages/lfs-packages-8.3.tar
2.解压缩:
tar xvf lfs-packages-8.3.tar
rm -rf lfs-packages-8.3.tar
cd 8.3
mv . ../
cd ..
rm -rf 8.3
3.这里最好将wget、ssh-server、blfs-bootscripts-20180105.tar.xz一起全下载下来。要不然,做完LFS系统好,可以上网,但是下载软件和ssh登录不了,就悲剧了。
wget https://ftp.gnu.org/gnu/wget/wget-1.19.5.tar.gz
wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.7p1.tar.gz
wget http://www.linuxfromscratch.org/patches/blfs/8.3/openssh-7.7p1-openssl-1.1.0-1.patch
wget http://anduin.linuxfromscratch.org/BLFS/blfs-bootscripts/blfs-bootscripts-20180105.tar.xz
4.创建工具键目录及链接:
mkdir -v $LFS/tools
ln -sv $LFS/tools /
5.添加LFS用户
groupadd lfs //创建用户级
useradd -s /bin/bash -g lfs -m -k /dev/null lfs //创建lfs用户
passwd lfs //给lfs用户设置密码
chown -v lfs $LFS/tools //授予lfs用户对$LFS/tools目录的所有权限
chown -v lfs $LFS/sources //授予lfs用户对$LFS/sources目录的所有权限
su - lfs //以lfs用户登录系统
6.设置环境:
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1=‘\u:\w\$ ‘ /bin/bash
EOF
cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
EOF
source ~/.bash_profile
五、构建临时系统:
1.输入echo $LFS //正常会输出:/mnt/lfs
2.进入源码目录: cd $LFS/sources/

3.Binutils-2.31.1 pass1

tar xvf binutils-2.31.1.tar.xz
cd binutils-2.31.1
mkdir -v build
cd build
../configure --prefix=/tools \
--with-sysroot=$LFS \
--with-lib-path=/tools/lib \
--target=$LFS_TGT \
--disable-nls \
--disable-werror
make
如果在x86_64上构建,创建符号链接:
case $(uname -m) in
x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;;
esac
make install
cd ../..
rm -rf binutils-2.31.1

4.gcc-8.2.0 pass1

tar xvf gcc-8.2.0.tar.xz
cd gcc-8.2.0
tar -xf ../mpfr-4.0.1.tar.xz
mv -v mpfr-4.0.1 mpfr
tar -xf ../gmp-6.1.2.tar.xz
mv -v gmp-6.1.2 gmp
tar -xf ../mpc-1.1.0.tar.gz
mv -v mpc-1.1.0 mpc
for file in gcc/config/{linux,i386/linux{,64}}.h
do
cp -uv $file{,.orig}
sed -e ‘[email protected]/lib(64)\?(32)\?/[email protected]/tools&@g‘ \
-e ‘[email protected]/[email protected]/[email protected]‘ $file.orig > $file
echo ‘
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
#define STANDARD_STARTFILE_PREFIX_2 ""‘ >> $file
touch $file.orig
done
x86_64主机上,将64位库的默认目录名设置为“?lib?”:
case $(uname -m) in
x86_64)
sed -e ‘/m64=/s/lib64/lib/‘ \
-i.orig gcc/config/i386/t-linux64
;;
esac
mkdir -v build
cd build
../configure \
--target=$LFS_TGT \
--prefix=/tools \
--with-glibc-version=2.11 \
--with-sysroot=$LFS \
--with-newlib \
--without-headers \
--with-local-prefix=/tools \
--with-native-system-header-dir=/tools/include \
--disable-nls \
--disable-shared \
--disable-multilib \
--disable-decimal-float \
--disable-threads \
--disable-libatomic \
--disable-libgomp \
--disable-libmpx \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--disable-libstdcxx \
--enable-languages=c,c++
make && make install
cd ../..
rm -rf gcc-8.2.0

5.Linux内核头文件

tar xvf linux-4.18.5.tar.xz
cd linux-4.18.5
make mrproper
make INSTALL_HDR_PATH=dest headers_install
cp -rv dest/include/* /tools/include
cd ..
rm -rf linux-4.18.5

6.glibc-2.28

tar xvf glibc-2.28.tar.xz
cd glibc-2.28
mkdir -v build
cd build
../configure \
--prefix=/tools \
--host=$LFS_TGT \
--build=$(../scripts/config.guess) \
--enable-kernel=3.2 \
--with-headers=/tools/include \
libc_cv_forced_unwind=yes \
libc_cv_c_cleanup=yes
make && make install
检查新工具链的基本功能:
echo ‘int main(){}‘ > dummy.c
$LFS_TGT-gcc dummy.c
readelf -l a.out | grep ‘: /tools‘
没有问题会输出:
[Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2] //64位输出
[Requesting program interpreter: /tools/lib/ld-linux.so.2] //32位输出
如果输出没有如上所示或者根本没有输出,则出现问题。检查之前的软件安装,找出问题并予以纠正。在继续之前必须解决此问题。否则以后的安装将没有意义!
cd ../..
rm -rf glibc-2.28

7.Libstdc ++

tar xvf gcc-8.2.0.tar.xz
cd gcc-8.2.0
mkdir -v build
cd build
../libstdc++-v3/configure \
--host=$LFS_TGT \
--prefix=/tools \
--disable-multilib \
--disable-nls \
--disable-libstdcxx-threads \
--disable-libstdcxx-pch \
--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/8.2.0
make && make install
cd ../..
rm -rf gcc-8.2.0

8.binutils-pass2

tar xvf binutils-2.31.1.tar.xz
cd binutils-2.31.1
mkdir -v build
cd build
CC=$LFS_TGT-gcc \
AR=$LFS_TGT-ar \
RANLIB=$LFS_TGT-ranlib \
../configure \
--prefix=/tools \
--disable-nls \
--disable-werror \
--with-lib-path=/tools/lib \
--with-sysroot
make && make install
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin
cd ../..
rm -rf binutils-2.31.1

9.GCC-8.2.0 pass2

tar xvf gcc-8.2.0.tar.xz
cd gcc-8.2.0
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
dirname $($LFS_TGT-gcc -print-libgcc-file-name)/include-fixed/limits.h
for file in gcc/config/{linux,i386/linux{,64}}.h
do
cp -uv $file{,.orig}
sed -e ‘[email protected]/lib(64)\?(32)\?/[email protected]/tools&@g‘ \
-e ‘[email protected]/[email protected]/[email protected]‘ $file.orig > $file
echo ‘
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"
#define STANDARD_STARTFILE_PREFIX_2 ""‘ >> $file
touch $file.orig
done
64位库的缺省目录名更改为“?lib?”:
case $(uname -m) in
x86_64)
sed -e ‘/m64=/s/lib64/lib/‘ \
-i.orig gcc/config/i386/t-linux64
;;
esac
tar -xf ../mpfr-4.0.1.tar.xz
mv -v mpfr-4.0.1 mpfr
tar -xf ../gmp-6.1.2.tar.xz
mv -v gmp-6.1.2 gmp
tar -xf ../mpc-1.1.0.tar.gz
mv -v mpc-1.1.0 mpc
mkdir -v build
cd build
CC=$LFS_TGT-gcc \
CXX=$LFS_TGT-g++ \
AR=$LFS_TGT-ar \
RANLIB=$LFS_TGT-ranlib \
../configure \
--prefix=/tools \
--with-local-prefix=/tools \
--with-native-system-header-dir=/tools/include \
--enable-languages=c,c++ \
--disable-libstdcxx-pch \
--disable-multilib \
--disable-bootstrap \
--disable-libgomp
make && make install
ln -sv gcc /tools/bin/cc
检查新工具链功能:
echo ‘int main(){}‘ > dummy.c
cc dummy.c
readelf -l a.out | grep ‘: /tools‘
64位显示:
[Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2]
32位显示:
[Requesting program interpreter: /tools/lib/ld-linux.so.2]
如果输出没有如上所示或者根本没有输出,则出现问题。检查并回顾这些步骤,找出问题所在并予以纠正。在继续之前必须解决此问题,否则继续安装没有意义!
echo $PATH
验证/tools/bin是否位于列表的头部。如果不是,则可能意味着您没有以用户身份登录lfs或者环境变量设置错误。
cd ../..
rm -rf gcc-8.2.0

10.TCL-8.6.8

tar xvf tcl8.6.8-src.tar.gz
cd tcl8.6.8
cd unix
./configure --prefix=/tools
make && make install
chmod -v u+w /tools/lib/libtcl8.6.so
make install-private-headers
ln -sv tclsh8.6 /tools/bin/tclsh
cd ../..
rm -rf tcl8.6.8

11.Expect-5.45.4

tar xvf expect5.45.4.tar.gz
cd expect5.45.4
cp -v configure{,.orig}
sed ‘s:/usr/local/bin:/bin:‘ configure.orig > configure
./configure --prefix=/tools \
--with-tcl=/tools/lib \
--with-tclinclude=/tools/include
make && make SCRIPTS="" install
cd ..
rm -rf expect5.45.4

12.DejaGnu-1.6.1

tar xvf dejagnu-1.6.1.tar.gz
cd dejagnu-1.6.1
./configure --prefix=/tools
make install
cd ..
rm -rf dejagnu-1.6.1

13.M4-1.4.18

tar xvf m4-1.4.18.tar.xz
cd m4-1.4.18
sed -i ‘s/IO_ftrylockfile/IO_EOF_SEEN/‘ lib/*.c
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h
./configure --prefix=/tools
make && make install
cd ..
rm -rf m4-1.4.18

14.ncurses的6.1

tar xvf ncurses-6.1.tar.gz
cd ncurses-6.1
sed -i s/mawk// configure
./configure --prefix=/tools \
--with-shared \
--without-debug \
--without-ada \
--enable-widec \
--enable-overwrite
make && make install
cd ..
rm -rf ncurses-6.1

15.bash-4.4.18

tar xvf bash-4.4.18.tar.gz
cd bash-4.4.18
./configure --prefix=/tools --without-bash-malloc
make && make install
ln -sv bash /tools/bin/sh
cd ..
rm -rf bash-4.4.18

16.bison-3.0.5

tar xvf bison-3.0.5.tar.xz
cd bison-3.0.5
./configure --prefix=/tools
make && make install
cd ..
rm -rf bison-3.0.5

17.Bzip2-1.0.6

tar xvf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6
make && make PREFIX=/tools install
cd ..
rm -rf bzip2-1.0.6

18.Coreutils-8.30

tar xvf coreutils-8.30.tar.xz
cd coreutils-8.30
./configure --prefix=/tools --enable-install-program=hostname
make && make install
cd ..
rm -rf coreutils-8.30

19.diffutils-3.6

tar xvf diffutils-3.6.tar.xz
cd diffutils-3.6
./configure --prefix=/tools
make && make install
cd ..
rm -rf diffutils-3.6

20.file-5.34

tar xvf file-5.34.tar.gz
cd file-5.34
./configure --prefix=/tools
make && make install
cd ..
rm -rf file-5.34

21.findutils-4.6.0

tar xvf findutils-4.6.0.tar.gz
cd findutils-4.6.0
sed -i ‘s/IO_ftrylockfile/IO_EOF_SEEN/‘ gl/lib/*.c
sed -i ‘/unistd/a #include <sys/sysmacros.h>‘ gl/lib/mountlist.c
echo "#define _IO_IN_BACKUP 0x100" >> gl/lib/stdio-impl.h
./configure --prefix=/tools
make && make install
cd ..
rm -rf findutils-4.6.0

22.GAWK-4.2.1

tar xvf gawk-4.2.1.tar.xz
cd gawk-4.2.1
./configure --prefix=/tools
make && make install
cd ..
rm -rf gawk-4.2.1

23.Gettext-0.19.8.1

tar -xvf gettext-0.19.8.1.tar.xz
cd gettext-0.19.8.1
cd gettext-tools
EMACS="no" ./configure --prefix=/tools --disable-shared
make -C gnulib-lib
make -C intl pluralx.c
make -C src msgfmt
make -C src msgmerge
make -C src xgettext
cp -v src/{msgfmt,msgmerge,xgettext} /tools/bin
cd ../..
rm -rf gettext-0.19.8.1

24.grep-3.1

tar xvf grep-3.1.tar.xz
cd grep-3.1
./configure --prefix=/tools
make && make install
cd ..
rm -rf grep-3.1

25.gzip-1.9

tar xvf gzip-1.9.tar.xz
cd gzip-1.9
sed -i ‘s/IO_ftrylockfile/IO_EOF_SEEN/‘ lib/*.c
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h
./configure --prefix=/tools
make && make install
cd ..
rm -rf gzip-1.9

26.make-4.2.1

tar xvf make-4.2.1.tar.bz2
cd make-4.2.1
sed -i ‘211,217 d; 219,229 d; 232 d‘ glob/glob.c
./configure --prefix=/tools --without-guile
make && make install
cd ..
rm -rf make-4.2.1

27.patch-2.7.6

tar xvf patch-2.7.6.tar.xz
cd patch-2.7.6
./configure --prefix=/tools
make && make install
cd ..
rm -rf patch-2.7.6

28.perl-5.28.0

tar xvf perl-5.28.0.tar.xz
cd perl-5.28.0
sh Configure -des -Dprefix=/tools -Dlibs=-lm -Uloclibpth -Ulocincpth
make
cp -v perl cpan/podlators/scripts/pod2man /tools/bin
mkdir -pv /tools/lib/perl5/5.28.0
cp -Rv lib/* /tools/lib/perl5/5.28.0
cd ..
rm -rf perl-5.28.0

29.sed-4.5

tar xvf sed-4.5.tar.xz
cd sed-4.5
./configure --prefix=/tools
make && make install
cd ..
rm -rf sed-4.5

30.tar-1.30

tar xvf tar-1.30.tar.xz
cd tar-1.30
./configure --prefix=/tools
make && make install
cd ..
rm -rf tar-1.30

31.Texinfo-6.5

tar xvf texinfo-6.5.tar.xz
cd texinfo-6.5
./configure --prefix=/tools
make && make install
cd ..
rm -rf texinfo-6.5

32.UTIL-Linux-2.32.1

tar xvf util-linux-2.32.1.tar.xz****
cd util-linux-2.32.1
./configure --prefix=/tools \
--without-python \
--disable-makeinstall-chown \
--without-systemdsystemunitdir \
--without-ncurses \
PKG_CONFIG=""
make && make install
cd ..
rm -rf util-linux-2.32.1

33.XZ-5.2.4

tar xvf xz-5.2.4.tar.xz
cd xz-5.2.4
./configure --prefix=/tools
make && make install
cd ..
rm -rf xz-5.2.4
34.剥离

strip --strip-debug /tools/lib/
/usr/bin/strip --strip-unneeded /tools/{,s}bin/

rm -rf /tools/{,share}/{info,man,doc}
find /tools/{lib,libexec} -name *.la -delete

35.更改tools目录权限
exit
chown -R root:root $LFS/tools

原文地址:http://blog.51cto.com/9828355/2330677

时间: 2024-09-29 11:07:24

LFS 8.3 从零开始做自己的系统(一)~!~的相关文章

LFS 8.3 从零开始做自己的系统(二)~!~

六.构建LFS系统 1.准备虚拟内核文件系统 1)创建将挂载文件系统的目录:mkdir -pv $LFS/{dev,proc,sys,run}2)创建设备节点:mknod -m 600 $LFS/dev/console c 5 1mknod -m 666 $LFS/dev/null c 1 33)安装和填充/开发:mount -v --bind /dev $LFS/dev4)挂载虚拟内核文件系统:mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode

转:从零开始做app需要做的事情列表

https://qdan.me/list/VaXl7N8emfv1ayWg 从零开始做App的Bootstrap 做一个App,需要很多东西. 不定期更新. 团队 工欲善其事,必先利其器. 需求管理 支持版本.迭代.需求的创建与管理. 产品经理在上面录入需求,开发参照开发,测试参照写测试用例,并进行状态流转. 国内大厂如腾讯都有内部自己开发的管理平台如tapd. 小团队可以使用轻量级的平台如: 国外:Trello.Basecamp.Jira.Asana 国内:Tower.Teambition.F

游戏新手村:从零开始做游戏

写在前面的话 年前看到张亮<从零开始做运营>在百度阅读上发布,于是便萌生了自己也撰写1篇作品的想法.首先是为了记录自己的想法.记录和观点,其次也算是对自己过去几年做游戏的一点总结,最后也想过把瘾:"看,这是哥写的书". 为什么要写这本书 最近这10多年是中国游戏产业蓬勃发展的10多年.一波又一波的游戏公司先后上市,一个又一个的千万富翁陆续诞生,一批又一批的有志年轻人和应届毕业生前仆后继的进入到了游戏行业,去从事游戏策划以及游戏运营等工作. 互联网的精神是开放和分享,但是游戏

手把手教你从零开始做一个好看的 APP

前言 从零开始,手把手带你实现一个「专注睡前的 APP」.睡觉之前如果能有一个 APP,能让我们写一写这一天的见闻或者心得,同时又能看一会段子.瞄一会好看的妹子,放松一下疲惫的身心那该多好,这也是我完成这个 APP 的原因.APP 的全部代码我已经分享到?Github?上了,需要的直接 点击这里,如果喜欢的话,麻烦给个 star,谢谢啦. 本文为这一系列文章的总述,如果觉得篇幅过长,请点击下面的连接 手把手教你从零开始做一个好看的 APP - Day one 手把手教你从零开始做一个好看的 AP

从零开始做运营进阶篇 PDF

<从零开始做运营进阶篇> PDF 只需一元 链接:https://pan.baidu.com/s/1ewmI3scRoUaGWQK0mT5wdw 密码:5as8 原文地址:https://www.cnblogs.com/luoshuifusheng/p/9305166.html

从零开始搭建前端监控系统(三)——实现控制iframe前进后退

前言 本系列文章旨在讲解如何从零开始搭建前端监控系统. 项目已经开源 项目地址: https://github.com/bombayjs/bombayjs (web sdk) https://github.com/bombayjs/bombayjs-server (服务端,用于提供api)(未完) https://github.com/bombayjs/bombayjs-admin (后台管理系统,可视化数据等)(未完) 您的支持是我们不断前进的动力. 喜欢请start!!! 喜欢请start!

微信里投票送礼物充值活动怎么做的什么系统?

你是不是最近总被人让我帮着他们亲戚家的孩子投票,说是幼儿园举办的活动,让我帮着投投票.要说麻烦吧,也不麻烦,就是总在想这有什么用呢?那些孩子我一个都不认识,说白了只是帮他们投票的其中一个水军而已. 今天我姐的孩子参加幼儿园投票活动,让给拉拉票,自己投完了还要去群里发一圈好友发一遍,票数不够还要心甘情愿的买礼物,关键是下面买礼物的人还显示,不买还不行,当时心想这个一个孩子刷200元的礼物,50个孩子最起码也要上万啊,这生意绝了! 我小侄女的幼儿园人多,200个小盆友左右,平时她在班级表现的比较积成

《从零开始做一个MEAN全栈项目》(1)

欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 在本系列的开篇,我打算讲一下全栈项目开发的优势,以及MEAN项目各个模块的概览. 为什么选择全栈开发?     对于初学者来说,学习一门新的语言和技术的体验总是让人愉快的,也会满足于掌握了一些新的东西并且解决了一些实际问题.在一个小组中采用全栈开发时,你可以更加有效地把握项目全局概念,这也有利于让你了解项目中的不同模块以及它们之间是如何协同工作的.你会对你们的产品中他人的贡献更加清晰,你也就了解了这款产品如何

老司机教你从零开始做开发

经常收到类似这样的提问:新手开发APP,要怎么学?我有满屏幕的文档和视频,然而并没有什么卵用,因为我不知道该从哪看起- 真是too young too simple! 废话不多说,快上车!今天的主要内容是(划重点)如何在AppCan平台创建应用,引擎插件选择.证书管理和在线打包. 先向不了解AppCan的同学做个自我介绍: AppCan倡导Hybrid混合开发模式,免费+开源+开放,提供一站式的移动应用开发支持服务.你只需要有HTML5+CSS+JS的前端基础,就可以在AppCan平台快速开发出