#!/bin/bash

#安装必备的软件
yum -y install dhcp tftp-server tftp xinetd syslinux vsftpd
yum -y install *kickstart*

#配置kickstart服务器端的DHCP服务
>/etc/dhcpd.conf
#############################################################
cat> /etc/dhcpd.conf<<EOF
ddns-update-style interim;
ignore client-updates;
next-server 10.1.2.53;
filename "pxelinux.0";

subnet 10.1.2.0 netmask 255.255.255.0 {
        option routers    
             10.1.2.1;
        option subnet-mask    
         255.255.255.0;

option time-offset    
         -18000; # Eastern Standard Time
        range dynamic-bootp 10.1.2.100
10.1.2.200;
        default-lease-time 21600;
        max-lease-time 43200;
}

EOF
#####################################################

#修改网卡配置文件并启动DHCP
sed -i 's/^.*IPADDR.*$/IPADDR=10.1.2.53/g'
/etc/sysconfig/network-scripts/ifcfg-eth1
sed -i 's/^.*BOOTPROTO.*$/BOOTPROTO=static/g'
/etc/sysconfig/network-scripts/ifcfg-eth1
service network restart
service dhcpd restart
#修改tftp配置文件并重启xinetd服务
sed -i 's/^.*disable.*$/disable = no/g' /etc/xinetd.d/tftp
rsync -av /usr/lib/syslinux/pxelinux.0 /tftpboot/
service xinetd restart

#创建必要的目录
mkdir /var/ftp/disk 
mkdir /var/ftp/kickstart

#挂载安装光盘
mount /dev/cdrom /var/ftp/disk
service vsftpd restart
#拷贝光盘中网卡启动文件到tftpboot目录下
rsync -av /var/ftp/disk/images/pxeboot/ /tftpboot/
mkdir -p /tftpboot/pxelinux.cfg

修改网卡启动文件
#####################################################
cat> /tftpboot/pxelinux.cfg/default<<EOF

default linux
prompt 1
timeout 30

label linux
  kernel vmlinuz
  append initrd=initrd.img ks=ftp://10.1.2.53/kickstart/ks.cfg
  
EOF
#####################################################
#修改kickstart配置文件,这个文件的内容可以参照root目录下的anaconda-ks.cfg文件内容

cat>/var/ftp/kickstart/ks.cfg<<EOF
install
text
#nfs --server=10.1.2.53 --dir=/var/ftp/pub/
url --url ftp://10.1.2.53/disk
#key --skip
#key 000000e90007fc00
key 2515dd4e215225dd
#lang en_US.UTF-8
lang zh_CN.UTF-8
keyboard us
network --device eth0 --bootproto dhcp --onboot=on
rootpw 123456
authconfig --enableshadow --enablemd5
firewall --disabled
selinux --disabled
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="rhgb quiet
clock=pit"
zerombr
clearpart --all --drives=sda --initlabel
autopart
#part / --fstype ext3 --size=1 --grow
#part /var --fstype ext3 --size=2000
#part swap --size=1000
poweroff

%packages
@base
@core
@editors
@text-internet
@web-server
@graphical-internet
@base-x
@chinese-support
@gnome-desktop
libgfortran43
dejagnu
python-docs
gcc43
expect
pexpect
unifdef
kexec-tools
fipscheck
device-mapper-multipath
gtk+
xorg-x11-utils
xorg-x11-server-Xnest
xorg-x11-server-Xvfb
libsane-hpaio
perl-libxml-perl
perl-XML-SAX
perl-LDAP
perl-Convert-ASN1
perl-DateManip
perl-XML-Twig
perl-XML-Grove
perl-XML-Dumper
python-imaging
perl-Crypt-SSLeay
perl-Mozilla-LDAP
perl-Archive-Zip
perl-TimeDate
perl-XML-NamespaceSupport

%post
/usr/sbin/useradd admin
/bin/echo 888888 | sr/bin/passwd admin --stdin
/bin/touch /home/admin/HelloWorld

/sbin/chkconfig auditd off
/sbin/chkconfig autofs off
/sbin/chkconfig avahi-daemon off
/sbin/chkconfig bluetooth off
/sbin/chkconfig cups off
/sbin/chkconfig firstboot off
/sbin/chkconfig gpm off
/sbin/chkconfig haldaemon off
/sbin/chkconfig hidd off
/sbin/chkconfig ip6tables off
/sbin/chkconfig kudzu off
/sbin/chkconfig mcstrans off
/sbin/chkconfig netfs off
/sbin/chkconfig nfslock off
/sbin/chkconfig pcscd off
/sbin/chkconfig portmap off
/sbin/chkconfig restorecond off
/sbin/chkconfig rhnsd off
/sbin/chkconfig rpcgssd off
/sbin/chkconfig rpcidmapd off
/sbin/chkconfig smartd off
/sbin/chkconfig yum-updatesd off

EOF
#####################################################

Kickstart/Anaconda实现自动化安装原理探究

系统安装一般流程

首先了解系统安装一般流程:


Anaconda
简介

简介:
     Anaconda是Red Hat、CentOS、Fedora等Linux的安装管理程序。它可以提供文本、图形等安装管理方式,并支持Kickstart等脚本提供自动安装的功能。此外,其还支持许多启动参数,熟悉这些参数可为安装带来很多方便。该程序是把位于光盘或其他源上的数据包,根据设置安装到主机上的一个程序;为实现该定制安装,其提供一个定制界面,可以实现交互式界面供用户选择配置(如选择语言,键盘,时区等信息);
Anaconda支持的管理模式:
    Kickstart提供的自动化安装
    对一个RedHat实施upgrade
    Rescuse模式对不能启动的系统进行故障排除;
     要进入安装步骤,需要先有一个引导程序引导启动一个特殊的Linux安装环境系统;引导有多种方式:
    1.  基于网络方式的小型引导镜像,需要提供小型的引导镜像;
    2.  U盘引导,通过可引导存储介质中的小型引导镜像启动安装过程;
    3.  基于PXE的网络安装方式,要提供PXE的完整安装环境;
    4.  其他bootloder引导(如GRUB)
可用的安装方式:
    本地CDROM
    磁盘驱动器
    NFS映像
    FTP
    HTTP
    通过网络方式安装时:
    不论通过FTP、HTTP还是NFS方式共享安装,可以将安装光盘先拷贝到网络服务器上保存为iso镜像,然后loop挂载到共享目录或网页目录(当然,拷贝镜像中的所有文件到指定位置或直接挂载到共享目录也可),而通过NFS方式时,可以直接将光盘的iso文件放到共享目录即可,安装程序挂载共享目录后可以自动识别镜像;
   注:复制安装光盘,并保存为一个 iso 映像文件的方法:
   对于 DVD/CD:
   # dd if=/dev/cdrom  of=/location/of/disk/space/RHEL.iso 
bs=32k
        注意拷贝时bs块大小设置为32k,我实验时设为1M,虽然减小了文件体积,但是安装读镜像时会报错。

三、
Kickstart
简介:

简介
     kickstart是一个利用Anconda工具实现服务器自动化安装的方法;通过生成的kickstart配置文件ks.cfg,服务器安装可以实现从裸机到全功能服务的的非交互式(无人值守式)安装配置;
ks.cfg是一个简单的文本文件,文件包含Anconda在安装系统及安装后配置服务时所需要获取的一些必要配置信息(如键盘设置,语言设置,分区设置等);Anconda直接从该文件中读取必要的配置,只要该文件信息配置正确无误且满足所有系统需求,就不再需要同用户进行交互获取信息,从而实现安装的自动化;但是配置中如果忽略任何必需的项目,安装程序会提示用户输入相关的项目的选择,就象用户在典型的安装过程中所遇到的一样。一旦用户进行了选择,安装会以非交互的方式(unattended)继续。
使用kickstart优势:
    1.  流线化自动化的安装;
    2.  快速大量的裸机部署;
    3.  强制建立的一致性(软件包,分区,配置,监控,安全性)
    4.  减少人为的部署失误
使用Kickstart方法安装的过程:
    1.  创建一个kickstart文件
    2.  创建有kickstart文件的引导介质或者使这个文件在网络上可用;
    3.  筹备一个安装树
    4.  开始ks安装:anconda自身启动 -->选取ks安装模式--> 从ks文件读取配置 --> 最后安装
创建kickstart配置文件的方式:
   1.  文本编辑器编辑生成:vim
   2. 用图形化界面配置:system-config-kickstat(需要安装system-config-kickstart.noarch包)
  注:图形化界面配置时,磁盘选项无法创建配置LVM(逻辑卷);
      文件生成后,推荐使用ksvalidator命令检查配置文件语法及完整性错误;
       [root@bogon ~]# ksvalidator ks.cfg 
        not enough arguments for format string
图形化界面配置示例:

 
引导并指定安装方式:

  系统引导界面:


  系统引导后,会显示boot:命令提示符;如上,界面上会有各种模式操作提示;
  注:用户交互的文本安装方式中不能进行LVM的自定义配置,只能查看、接受默认设置;

  boot:命令行里有用的几个项:
  lowres
    :强制GUI安装时分辨率调低为640*480
  noipv6
     :安装过程不支持ipv6网络
  noprobe
    :不去自动检测硬件,而是提示用户;
  dd=
    :通过网络加载设备驱动
  ks=
     :指定kickstart文件的放置位置;
另外还有ipnetmaskgatewaydnsvnc等选项;
   用ks选项被指定时kickstart文件位置时,Anaconda进入Kickstart安装模式;
安装时获取kickstart文件的方式:
1 bootlinux
ks

ks命令单独使用时,系统会尝试通过dhcp服务器配置网卡,并且从DHCP会话中获取kickstart配置文件的位置;
    在dhcp服务器dhcp配置文件中有kickstart文件位置说明,next-server关键字指向共享文件的NFS主机,用filename关键字指向主机上的文件路径;如果没有filename关键字,则尝试在next-server关键字指向主机的/kickstart文件夹中找kickstart文件;
    下面是dhcp.conf文件中kickstart配置字段示例:

  1. # The following lines are examples of kickstart directives.
  2. filename "/data/ks/ks.cfg";
  3. next-server 192.168.1.10;
  4. # 注:上面部分需要写在subnet子段中;

2 bootlinux
ks=url

     基于网络的文件服务器(网络服务器),获取配置文件,支持HTTP、FTP、NFS方式获取文件;例:
    ks=ftp://192.168.0.254/pub/kistart/ks.cfg
    ks=http:// 192.168.0.254/pub/kistart/ks.cfg
    ks=nfs:ip_addr:/path/to/ks.cfg
3 bootlinux
ks=hd:device/path/to/your/kickstart_file

     基于本地的安装方式,需要依次指定设备名,路径,文件名等;例如:    
   文件在光盘中:ks=cdrom:/ks.cfg
   文件在软盘中:    ks=floppy:/filedirectory/ks.cfg
   文件在硬盘中:ks=hd:/sdb1/myfile/ks.cfg
   文件也可被打包进initrd根文件系统中:ks=file:/ks.cfg
kickstart文件结构介绍:
  1.  命令部分:配置系统的属性及安装中的各种必要设置信息
  2.  %packages部分:设定需要安装的软件包及包组,Anaconda会自动解决依赖关系
  3.  脚本部分:用于定制系统,分为%pre部分在安装前运行,%post在安装后运行
    %pre 部分脚本作为一个bash shell脚本执行,在Kickstart文件解析后执行;
    %post 解析器默认为bash,可以自定义,缺省为chroot状态,也可指定非chroot状态;

.  Kickstart文件中的主要项目及参数介绍:

每个项目都由关键字来识别;关键字可跟一个或多个参数;如果某选项后面跟随了一个等号(=),它后面就必须指定一个值。

install   (可选)
    明确指定系统次次进行的是全新安装系统;是默认项;
cdrom  (可选)
    以本地CD-ROM为源安装系统;
harddrive  (可选)
    以硬盘分区中包含的镜像为源(安装树)安装新系统;当以该种方式安装系统时,即使指定clearpart --all项,源所在分区也不会被重新抹去;
    --partition=    指定分区
    --dir=        指定包含镜像的目录
    例:
    harddrive  --partition=/dev/sdb2  --dir=/data/iso
nfs   (可选)
    指定从NFS服务器上获取安装树;
    --server=    指定NFS服务器,主机名称或IP
    --dir=        包含安装树的目录
    --opts=        可以指定挂载NFS的目录时的挂载选项
    例:
    nfs  --server=192.168.1.254  --dir=/data/iso
url   (可选)
    指定通过FTP或HTTP从网络获取安装树;
    --url    指定资源位置
    例:
    url  --url 
ftp://<username>:<password>@install.example.com/iso
    url  --url  http://install.example.com/iso
bootloader (必需)
    设定boot loader安装选项;
    --append=        可以指定内核参数
    --driveorder=    设定设备BIOS中的开机设备启动顺序
    --location=        设定引导记录的位置;
mbr:默认值;partition:将boot
loader安装于包含kernel的分区超级快中;none:不安装boot
loder。
    示例:
    bootloader  --location=mbr  --append=“rhgb quiet”
--driveorder=sda,sdb
  clearpart (可选)
    在建立新分区前清空系统上原有的分区表,默认不删除分区;
    --all      擦除系统上原有所有分区;
    --drives    删除指定驱动器上的分区
    --initlabel    初始化磁盘卷标为系统架构的默认卷标
    --linux        擦除所有的linux分区
    --none(default)不移除任何分区
   例:
   clearpart  --drives=hda,hdb --all  --initlabel
zerombr  (可选)
    清除mbr信息,会同时清空系统用原有分区表
drivedisk (可选)
    如果使用特殊存储方式时,需要指定驱动程序盘位置以便加载存储驱动;
   1.  将驱动盘拷贝到本地硬盘某分区根目录:
     drivedisk <partition> [ --type=<fstype> ]
   2.  也可以指定一个网络位置加载驱动程序盘
     drivedisk  --source=ftp://path/to/drive.img
     drivedisk  --source=http://path/to/drive.img
     drivedisk  --source=nfs:host://path/to/drive.img
firewall (可选)
    配置系统防火墙选项;
    firewall –enable|--disable  [ --trust ] <device>
[ --port= ]
    --enable        拒绝外部发起的任何主动连接;
    --disable        不配置任何iptables防御规则;
    --trust        指定完全信任网卡设备;
    --port        使用port:protocol格式指定可以通过防火墙的服务;
    示例:
    firewall --enable --trust eth0  --trust eth1 
--port=80:tcp
selinux (可选)
    设置系统selinux状态;默认为启用并处于enforcing模式;
    selinux [ --disabled|–enforcing|--premissive ]
reboot (可选)
    在系统成功安装完成后默认自动重启系统(kickstart方法时);在收到你敢装系统完成后,会提示按任意键进行重启;
    在本文件中没有明确指明其他方法时就默认完成方式为reboot;
    使用 reboot 选项可能会导致安装的死循环,这依赖于安装介质和方法。需要特别注意;
halt  (可选)
    在系统成功安装完成后关机;默认为reboot;
    其他选项还有shutdown、poweroff,需要使用请自行参考官方文档。
graphical (可选)
    默认值,在图形模式下进行kickstart方式安装;
text (可选)
    以文本方式进行kickstart安装;默认为图形界面
key  (可选)
    设置一个安装码(installration number),用于获取redhat官方的支持服务;
    --skip    跳过key设置,不进行设置;如果不设置可能跳转到交互模式让用户选取动作;
keyboard (必需)
    设置键盘类型;一般设置为us;
lang (必需)
    设置安装过程使用的语言及系统的缺省语言;文本模式安装时可能不支持某些语言(中、韩...),所以可能仍以默认的英文方式安装;默认en_us,装中文时,需要后期%packages部分装上中文支持组件;
    例:
    lang en_US
timezone (可选)
    设置系统的时区;
    timezone  [ --utc ]  <timezone>
    例:
    timezone  --utc  Asia/Shanghai
auth/authconfig  (必需)
    设置系统的认证方式;默认为加密但不隐藏(shadow);
    --enablemd5    使用MD5加密方式
    --useshadow或—enableshadow    使用隐藏密码;
    --enablenis=     使用NIS认证方式
    --nisdomain=    NIS域
    --nisserver=       NIS服务器
    还可以设置LDAP、SMB及Kerberos 5认证方式,详细请参考官方文档;
    例:
    authconfig  --useshadow  --enablemd5
rootpw (必需)
    设置系统root账号的密码;
    rootpw [ --iscrypted ]  <passwd>
    --iscrypted    表示设置的密码为加密过的串;
    例:
    rootpw  pa4word
    rootpw --iscrypted  $1$RPYyxobb$/LtxMNLJC7euEARg2Vu2s1
network (可选)
    配置网络信息;在网络安装(NFS/HTTP/FTP)时必须指定;
    --bootproto=dhcp|bootp|static    指定ip获取方式,默认为dhcp/bootp;
    --device=    设置安装时激活来进行系统安装的网卡设备;该参数只在kickstart文件为本地文件时有效;若kickstart配置文件在网络上,安装程序会先初始化网卡然后去寻找kickstart文件;
    --ip=    ip设置
    --gateway=   网关
    --nameserver=  DNS设置
    --nodns         不设置DNS
    --netmask=   掩码
    --hostname= 设置安装后主机名称
    --onboot=    设置是否在系统启动时激活网卡
    --class=        设置DHCP的class值
    --noipv4        禁用该设备的ipv4功能
    --noipv6        禁用该设备的ipv6功能
    如将网络模式设置为静态模式,则必须在一行内写上ip,netmask、dns、gateway等信息;
    例:
    network –bootproto=static –ip=1.1.1.1 --metmask=255.0.0.0
--gateway=1.1.1.254 --nameserver=1.1.1.2
    netmask --bootproto=dhcp  --device=eth0

KICKSTART无人值守安装的脚本

#!/bin/sh
KICK_SRV="80.1.1.199"
DHCP_SUB="80.1.1.0"
DHCP_MASK="255.255.255.0"
DHCP_RANGE="80.1.1.100 80.1.1.200"
CDROM_PATH=/media
NETINSTALL_PATH=/netinstall
KS_CFG=ks.cfg

umount /dev/hdc;mount
/dev/cdrom /media
yum clean all;yum list;yum -y install dhcp
cat > /etc/dhcpd.conf << EOF1

ddns-update-style
interim;
ignore client-updates;
next-server ${KICK_SRV};
filename "pxelinux.0";

subnet ${DHCP_SUB}
netmask ${DHCP_MASK} {

# --- default gateway
        option
routers                 
192.168.0.1;
        option
subnet-mask             
255.255.255.0;

#      
option
nis-domain              
"domain.org";
#       option
domain-name             
"domain.org";
#       option
domain-name-servers      192.168.1.1;

option
time-offset             
-18000; # Eastern Standard Time
#       option
ntp-servers             
192.168.1.1;
#       option
netbios-name-servers     192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
#       option netbios-node-type 2;

range dynamic-bootp ${DHCP_RANGE};
        default-lease-time 21600;
        max-lease-time 43200;

# we want the nameserver to appear at a fixed address
        host ns {
               
next-server marvin.redhat.com;
               
hardware ethernet 12:34:56:78:AB:CD;
               
fixed-address 207.175.42.254;
        }
}

EOF1

cat >
/etc/xinetd.d/tftp <<EOF2

service tftp
{
       
socket_type            
= dgram
       
protocol               
= udp
       
wait                   
= yes
       
user                   
= root
       
server                 
= /usr/sbin/in.tftpd
       
server_args            
= -s /tftpboot
       
disable                
= no
       
per_source             
= 11
       
cps                    
= 100 2
       
flags                  
= IPv4
}

EOF2

function Tftp_operate {
rsync -av ${CDROM_PATH}/images/pxeboot/initrd.img /tftpboot/
rsync -av ${CDROM_PATH}/images/pxeboot/vmlinuz /tftpboot/
rsync -av /usr/lib/syslinux/pxelinux.0 /tftpboot/
mkdir -p /tftpboot/pxelinux.cfg;touch /tftpboot/pxelinux.cfg/default;
mkdir -p ${NETINSTALL_PATH}
}

Tftp_operate

cat >
/tftpboot/pxelinux.cfg/default << EOF3

default linux
prompt 0
timeout 30
label linux
kernel vmlinuz
append ks=nfs:${KICK_SRV}:${NETINSTALL_PATH}/${KS_CFG} initrd=initrd.img

EOF3

cat > /etc/exports
<< EOF4
${NETINSTALL_PATH}                    
*(ro,async)
${CDROM_PATH}                        
*(ro,async)
EOF4

exportfs -rv

cat >
${NETINSTALL_PATH}/${KS_CFG} <<EOF5

install
text
nfs --server=${KICK_SRV} --dir=${CDROM_PATH}
key --skip
lang en_US.UTF-8
keyboard us
network --device eth0 --bootproto dhcp --onboot=on
rootpw 123
reboot
firewall --disabled
authconfig --enableshadow --enablemd5
selinux --disabled
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart --all --drives=sda --initlabel
part /boot --fstype ext3 --size=100
part /home --fstype ext3 --size=1000
part swap --size=2048
part / --fstype ext3 --size=5000

%packages
@office
@editors
@text-internet
@gnome-desktop
@dialup
@core
@base
@games
@java
@legacy-software-support
@base-x
@graphics
@printing
@sound-and-video
@admin-tools
@graphical-internet
emacs
kexec-tools
device-mapper-multipath
xorg-x11-utils
xorg-x11-server-Xnest
libsane-hpaio
-sysreport

EOF5

function StartServer {
/etc/init.d/dhcpd restart
/etc/init.d/xinetd restart
/etc/init.d/portmap restart
/etc/init.d/nfs restart
}

StartServer

#脚本

kickstart批量装机脚本的更多相关文章

  1. 批量装机工具cobbler简介及其安装使用

    前言:如果仅有几台机器的话,使用U盘或者光盘装起来还不是很费事,一旦数量到了一定程度,使用手动方法就是一件费时费力的事,PXE+kistart就可以解决这个问题,降低难度,加快速度,而cobbler更 ...

  2. 记一次ARM服务器(鲲鹏920)的PXE批量装机遇到的坑

    由于近期项目需要,在对一批华为鲲鹏920的ARM服务器(型号为天宫TG225 B1)进行批量装机的过程中,遇到了各种各样千奇百怪的bug(换个高情商的说法就是遇到了各种各样和x86服务器不一样的地方) ...

  3. Service系统服务(五):PXE基础装机环境、配置并验证DHCP服务、配置PXE引导、验证PXE网络装机、PXE+kickstart自动装机

    一.PXE基础装机环境 目标: 本例要求为后续的PXE服务器构建提供RHEL7软件仓库,完成下列任务: 1> 在CentOS真机部署Web目录/var/www/html/rh7dvd   2&g ...

  4. Oracle批量执行脚本文件

    以下是Oracle批量执行脚本文件的步骤和方法 1.创建脚本文件(xx.sql): 例如文件CreateTable Create table tb1( id varchar2(30), Name va ...

  5. 通过SqlClr制作Sql自动化批量执行脚本

    原文:通过SqlClr制作Sql自动化批量执行脚本 通过SqlClr制作Sql自动化批量执行脚本 在与同事一起做项目时,看到同事用sqlclr做批量执行脚本,感觉挺新奇的就上网搜集资料自己模仿跟做了个 ...

  6. mysql批量数据脚本

    mysql批量数据脚本 1 建表 create table dept( id int unsigned primary key auto_increment, deptno mediumint uns ...

  7. MIPCMS V3.1.0 远程写入配置文件Getshell过程分析(附批量getshell脚本)

      作者:i春秋作家--F0rmat 0×01 前言 今天翻了下CNVD,看到了一个MIPCMS的远程代码执行漏洞,然后就去官网下载了这个版本的源码研究了下.看下整体的结构,用的是thinkPHP的架 ...

  8. Ansible-Zabbix-基础agent批量装机

    ansible 批量装机-Zabbix篇 ############################# 小错误区:特此警示,问题要全面化,不要单纯想着你这边的问题,有可能也是对面的问题,反则亦此,学会深 ...

  9. hadoop_批量命令脚本&同步文件脚本

    1.xcall.sh 批量命令脚本,例:xcall.sh jps ,查看hadoop101~ hadoop104的jps进程 注意:在执行命令的时候,若是提示没有这个命令,但是在本机又可以执行,记得在 ...

随机推荐

  1. shell中得到当下路径所有文件夹名称

      方法1: for dir in $(ls -al ./|awk '/^d/ {print $NF}') do echo $dir done   方法2: for dir in $(ls ./) d ...

  2. poj2947(高斯消元法解同余方程组)

    题目链接:https://vjudge.net/problem/POJ-2065 题意:题目看着较复杂,实际上就是给了n个同余方程,解n个未知数. 思路:套高斯消元法的模板即可. AC代码: #inc ...

  3. hdoj3534(树形dp,求树的直径的条数)

    题目链接:https://vjudge.net/problem/HDU-3534 题意:给出一棵树,求树上最长距离(直径),以及这样的距离的条数. 思路:如果只求直径,用两次dfs即可.但是现在要求最 ...

  4. DISCO Presents Discovery Channel Code Contest 2020 Qual Task E. Majority of Balls

    Not able to solve this problem during the contest (virtual participation). The first observation is ...

  5. TypeScript的类型

    ⒈TypeScript的类型 JavaScript语言的数据类型包括以下7种: 1.boolean(布尔),true || false 2.null,表明null值得特殊关键字,JavaScript是 ...

  6. Ubuntu系统降内核

    本人安装的Ubuntu16.04.6系统原生内核为4.15.0,但安装的应用仅支持4.8.0以下内核,因此需要降内核.PS:降内核有风险,操作前请慎重 1.查看可用的内核 输入命令查看已经可用的内核 ...

  7. spring cloud链路追踪组件sleuth和zipkin

    spring cloud链路追踪组件sleuth     主要作用就是日志埋点 操作方法 1.增加依赖             <dependency>      <groupId& ...

  8. 【leetcode】74. 搜索二维矩阵

    题目链接:传送门 题目描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例  ...

  9. JS基础_函数的返回值

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  10. SIP中From ,Contact, Via 和 Record-Route/Route

    转载:http://eadgar.blogbus.com/logs/374635.html 注意:以下内容适用于SIP消息中,在具体的应用环境中,例如IMS,每个消息头都有其他独特的意义,但不会和以下 ...