Jumat, 31 Agustus 2018

How to rsync file from remote server to local server

  Tidak ada komentar
Live as system engineer some day we need to copy or backup files from one server to another server, we need to keep the consistence of files and just backup the file that does not exist, if we use standard method using ssh or scp we will do more effort, so we can use rsync to solve the challenge above.


Before we start to execute rsync command we need to use screen in other our command not stop due network issue :
[root@localhost ~]# screen
[root@localhost ~]#
In screen app we execute the command with pattern like this :

rsync [options] [username@address:/path/] [/destination_path/]

we can use the following example :
[root@localhost ~]# rsync  --bwlimit=200 -aulzhRe ssh --progress  [email protected]:/home/./omd_cmk/ /home/
[email protected]'s password:
receiving incremental file list
omd_cmk/
omd_cmk/Check_MK-monitor.wachid.web.id-monitoring-bkp_manual-complete/
omd_cmk/Check_MK-monitor.wachid.web.id-monitoring-bkp_manual-complete/mkbackup.info
            540 100%  527.34kB/s    0:00:00 (xfr#1, to-chk=13/18)
omd_cmk/Check_MK-monitor.wachid.web.id-monitoring-bkp_manual-complete/site-monitoring.tar.gz
         76.42M  11%  203.43kB/s    0:49:04

sent 57 bytes  received 1.07G bytes  203.43K bytes/sec
total size is 1.08G  speedup is 1.01
[root@localhost ~]#
if we need any help how to use rsync command, we can execute rsync --help to show the manuals :
[maswachid@localhost ~]$ rsync --help
rsync  version 3.0.9  protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.

Usage: rsync [OPTION]... SRC [SRC]... DEST
  or   rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
  or   rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
  or   rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
  or   rsync [OPTION]... [USER@]HOST:SRC [DEST]
  or   rsync [OPTION]... [USER@]HOST::SRC [DEST]
  or   rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect
to an rsync daemon, and require SRC or DEST to start with a module name.

Options
 -v, --verbose               increase verbosity
 -q, --quiet                 suppress non-error messages
     --no-motd               suppress daemon-mode MOTD (see manpage caveat)
 -c, --checksum              skip based on checksum, not mod-time & size
 -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
     --no-OPTION             turn off an implied OPTION (e.g. --no-D)
 -r, --recursive             recurse into directories
 -R, --relative              use relative path names
     --no-implied-dirs       don't send implied dirs with --relative
 -b, --backup                make backups (see --suffix & --backup-dir)
     --backup-dir=DIR        make backups into hierarchy based in DIR
     --suffix=SUFFIX         set backup suffix (default ~ w/o --backup-dir)
 -u, --update                skip files that are newer on the receiver
     --inplace               update destination files in-place (SEE MAN PAGE)
     --append                append data onto shorter files
     --append-verify         like --append, but with old data in file checksum
 -d, --dirs                  transfer directories without recursing
 -l, --links                 copy symlinks as symlinks
 -L, --copy-links            transform symlink into referent file/dir
     --copy-unsafe-links     only "unsafe" symlinks are transformed
     --safe-links            ignore symlinks that point outside the source tree
 -k, --copy-dirlinks         transform symlink to a dir into referent dir
 -K, --keep-dirlinks         treat symlinked dir on receiver as dir
 -H, --hard-links            preserve hard links
 -p, --perms                 preserve permissions
 -E, --executability         preserve the file's executability
     --chmod=CHMOD           affect file and/or directory permissions
 -A, --acls                  preserve ACLs (implies --perms)
 -X, --xattrs                preserve extended attributes
 -o, --owner                 preserve owner (super-user only)
 -g, --group                 preserve group
     --devices               preserve device files (super-user only)
     --copy-devices          copy device contents as regular file
     --specials              preserve special files
 -D                          same as --devices --specials
 -t, --times                 preserve modification times
 -O, --omit-dir-times        omit directories from --times
     --super                 receiver attempts super-user activities
     --fake-super            store/recover privileged attrs using xattrs
 -S, --sparse                handle sparse files efficiently
 -n, --dry-run               perform a trial run with no changes made
 -W, --whole-file            copy files whole (without delta-xfer algorithm)
 -x, --one-file-system       don't cross filesystem boundaries
 -B, --block-size=SIZE       force a fixed checksum block-size
 -e, --rsh=COMMAND           specify the remote shell to use
     --rsync-path=PROGRAM    specify the rsync to run on the remote machine
     --existing              skip creating new files on receiver
     --ignore-existing       skip updating files that already exist on receiver
     --remove-source-files   sender removes synchronized files (non-dirs)
     --del                   an alias for --delete-during
     --delete                delete extraneous files from destination dirs
     --delete-before         receiver deletes before transfer, not during
     --delete-during         receiver deletes during the transfer
     --delete-delay          find deletions during, delete after
     --delete-after          receiver deletes after transfer, not during
     --delete-excluded       also delete excluded files from destination dirs
     --ignore-errors         delete even if there are I/O errors
     --force                 force deletion of directories even if not empty
     --max-delete=NUM        don't delete more than NUM files
     --max-size=SIZE         don't transfer any file larger than SIZE
     --min-size=SIZE         don't transfer any file smaller than SIZE
     --partial               keep partially transferred files
     --partial-dir=DIR       put a partially transferred file into DIR
     --delay-updates         put all updated files into place at transfer's end
 -m, --prune-empty-dirs      prune empty directory chains from the file-list
     --numeric-ids           don't map uid/gid values by user/group name
     --timeout=SECONDS       set I/O timeout in seconds
     --contimeout=SECONDS    set daemon connection timeout in seconds
 -I, --ignore-times          don't skip files that match in size and mod-time
     --size-only             skip files that match in size
     --modify-window=NUM     compare mod-times with reduced accuracy
 -T, --temp-dir=DIR          create temporary files in directory DIR
 -y, --fuzzy                 find similar file for basis if no dest file
     --compare-dest=DIR      also compare destination files relative to DIR
     --copy-dest=DIR         ... and include copies of unchanged files
     --link-dest=DIR         hardlink to files in DIR when unchanged
 -z, --compress              compress file data during the transfer
     --compress-level=NUM    explicitly set compression level
     --skip-compress=LIST    skip compressing files with a suffix in LIST
 -C, --cvs-exclude           auto-ignore files the same way CVS does
 -f, --filter=RULE           add a file-filtering RULE
 -F                          same as --filter='dir-merge /.rsync-filter'
                             repeated: --filter='- .rsync-filter'
     --exclude=PATTERN       exclude files matching PATTERN
     --exclude-from=FILE     read exclude patterns from FILE
     --include=PATTERN       don't exclude files matching PATTERN
     --include-from=FILE     read include patterns from FILE
     --files-from=FILE       read list of source-file names from FILE
 -0, --from0                 all *-from/filter files are delimited by 0s
 -s, --protect-args          no space-splitting; only wildcard special-chars
     --address=ADDRESS       bind address for outgoing socket to daemon
     --port=PORT             specify double-colon alternate port number
     --sockopts=OPTIONS      specify custom TCP options
     --blocking-io           use blocking I/O for the remote shell
     --stats                 give some file-transfer stats
 -8, --8-bit-output          leave high-bit chars unescaped in output
 -h, --human-readable        output numbers in a human-readable format
     --progress              show progress during transfer
 -P                          same as --partial --progress
 -i, --itemize-changes       output a change-summary for all updates
     --out-format=FORMAT     output updates using the specified FORMAT
     --log-file=FILE         log what we're doing to the specified FILE
     --log-file-format=FMT   log updates using the specified FMT
     --password-file=FILE    read daemon-access password from FILE
     --list-only             list the files instead of copying them
     --bwlimit=KBPS          limit I/O bandwidth; KBytes per second
     --write-batch=FILE      write a batched update to FILE
     --only-write-batch=FILE like --write-batch but w/o updating destination
     --read-batch=FILE       read a batched update from FILE
     --protocol=NUM          force an older protocol version to be used
     --iconv=CONVERT_SPEC    request charset conversion of filenames
     --checksum-seed=NUM     set block/file checksum seed (advanced)
 -4, --ipv4                  prefer IPv4
 -6, --ipv6                  prefer IPv6
     --version               print version number
(-h) --help                  show this help (-h is --help only if used alone)

Use "rsync --daemon --help" to see the daemon-mode command-line options.
Please see the rsync(1) and rsyncd.conf(5) man pages for full documentation.
See http://rsync.samba.org/ for updates, bug reports, and answers
[maswachid@localhost ~]$
If you want rsync push the file. you can use following command
rsync  --bwlimit=800 -aulzhRe ssh --progress  /home/./ [email protected]:/home/omd_cmk/
If you want rsync with not default ssh port, add the port option and number on ssh part
rsync  --bwlimit=800 -aulzhRe 'ssh -p 221' --progress  /home/./ [email protected]:/home/omd_cmk/
if you have any question, you can leave comment on following comment box, thank you



Sabtu, 11 Agustus 2018

How to setting and config log rotate for catalina.out tomcat

  Tidak ada komentar

Some day as system engineer i face the trouble, the catalina.out of tomcat logs growth rapidly, the file system size running low, we can delete it manually but it have to stop the tomcat service and this is not easy because it was a production server, if we let it, the server will down when there is no space for catalina.out grow. finally i got the solution by install log rotate that will copy truncate the log file and delete the old series of file base on the configuration automatically.


Create a configuration file for catalina.out log in log rotate configuration folder as shown bellow
[maswachid@tomcat logrotate.d]$
[maswachid@tomcat logrotate.d]$ cat catalinaout
    /opt/tomcatstack-7.0.86-0_satu/apache-tomcat/logs/catalina.out {
     copytruncate
     daily
     rotate 7
     compress
     missingok
     size 50M
    }
[maswachid@tomcat logrotate.d]$
We can running the preview or test the configuration by running it manually

You can try it out with -d to see what would happen:
logrotate -df /etc/logrotate.d/catalina
when you execute the preview command (using catalina as an example), here are the output
[maswachid@tomcat logrotate.d]$ logrotate -df /etc/logrotate.d/catalinaout_sch
reading config file /etc/logrotate.d/catalinaout_sch
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /opt/tomcatstack-7.0_scheduler/apache-tomcat/logs/catalina.out  forced from command line (7 rotations)
empty log files are rotated, old logs are removed
considering log /opt/tomcatstack-7.0_scheduler/apache-tomcat/logs/catalina.out
  log needs rotating
rotating log /opt/tomcatstack-7.0_scheduler/apache-tomcat/logs/catalina.out, log->rotateCount is 7
dateext suffix '-20180811'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.7.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.8.gz (rotatecount 7, logstart 1, i 7),
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.6.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.7.gz (rotatecount 7, logstart 1, i 6),
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.5.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.6.gz (rotatecount 7, logstart 1, i 5),
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.4.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.5.gz (rotatecount 7, logstart 1, i 4),
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.3.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.4.gz (rotatecount 7, logstart 1, i 3),
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.2.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.3.gz (rotatecount 7, logstart 1, i 2),
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.1.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.2.gz (rotatecount 7, logstart 1, i 1),
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.0.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.1.gz (rotatecount 7, logstart 1, i 0),
copying /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.1
truncating /opt/tomcatstack-7.0_scheduler/apache-tomcat/logs/catalina.out
compressing log with: /bin/gzip
removing old log /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.8.gz
error: error opening /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.8.gz: No such file or directory
[maswachid@tomcat logrotate.d]$
Then you can run (using catalina as an example):
logrotate -f /etc/logrotate.d/catalina
Execute log rotate single config manually and the result as shown bellow
[maswachid@tomcat logrotate.d]$ sudo logrotate -f /etc/logrotate.d/catalinaout_sch
[maswachid@tomcat logrotate.d]$
And the catalina logs alone will be rotated.
[maswachid@tomcat logrotate.d]$ ls /opt/tomcatstack-7.0/apache-tomcat/logs/
catalina.2018-05-06.log              localhost_access_log.2018-05-21.txt  localhost_access_log.2018-06-19.txt
catalina.2018-05-07.log              localhost_access_log.2018-05-22.txt  localhost_access_log.2018-06-20.txt
catalina.2018-05-29.log              localhost_access_log.2018-05-23.txt  localhost_access_log.2018-06-21.txt
catalina.2018-06-22.log              localhost_access_log.2018-05-24.txt  localhost_access_log.2018-06-22.txt
catalina.2018-06-27.log              localhost_access_log.2018-05-25.txt  localhost_access_log.2018-06-23.txt
catalina.out                         localhost_access_log.2018-05-26.txt  localhost_access_log.2018-06-24.txt
catalina.out.1.gz                    localhost_access_log.2018-05-27.txt  localhost_access_log.2018-06-25.txt
host-manager.2018-05-06.log          localhost_access_log.2018-05-28.txt  localhost_access_log.2018-06-26.txt
host-manager.2018-05-07.log          localhost_access_log.2018-05-29.txt  localhost_access_log.2018-06-27.txt
host-manager.2018-05-29.log          localhost_access_log.2018-05-30.txt  localhost_access_log.2018-06-28.txt
localhost.2018-05-06.log             localhost_access_log.2018-05-31.txt  localhost_access_log.2018-06-29.txt
You can check the log rotate status by running following command 
[mawwachid@tomcat ~]# cat /var/lib/logrotate/logrotate.status
logrotate state -- version 2
"/var/log/yum.log" 2019-1-24-3:30:1
"/var/log/cups/page_log" 2019-10-9-3:0:0
"/var/log/cups/error_log" 2019-10-9-3:0:0
"/var/log/haproxy.log" 2019-10-1-3:0:0
"/var/log/boot.log" 2019-1-25-3:47:1
"/var/log/up2date" 2019-9-6-3:0:0
"/var/log/cups/access_log" 2019-11-24-3:39:1
"/var/log/httpd/error_log" 2019-11-24-3:39:1
"/var/log/wtmp" 2019-10-9-3:0:0
"/var/log/chrony/*.log" 2019-9-6-3:0:0
"/opt/tomcatstack-7.0/apache-tomcat/logs/" 2019-11-24-3:39:1
"/var/log/spooler" 2019-11-24-3:39:1
"/var/log/btmp" 2019-11-1-3:14:1
"/var/log/rhsm/rhsmcertd.log" 2019-11-24-3:39:1
"/var/log/xferlog" 2019-9-6-3:0:0
"/var/log/iscsiuio.log" 2019-9-6-3:0:0
"/var/log/maillog" 2019-11-24-3:39:1
"/var/log/libvirt/libvirtd.log" 2019-9-6-3:0:0
"/var/log/libvirt/qemu/*.log" 2019-9-6-3:0:0
"/var/log/wpa_supplicant.log" 2019-10-9-3:0:0
"/var/log/secure" 2019-11-24-3:39:1
"/var/log/numad.log" 2019-9-6-3:0:0
"/var/log/ppp/connect-errors" 2019-9-6-3:0:0
"/var/log/rhsm/rhsm.log" 2019-11-24-3:39:1
"/var/log/messages" 2019-11-24-3:39:1
"/var/account/pacct" 2019-10-9-3:0:0
"/var/log/cron" 2019-11-24-3:39:1
"/var/log/httpd/access_log" 2019-11-24-3:39:1
"/var/log/vsftpd.log" 2019-9-6-3:0:0
[maswachid@tomcat ~]#
And the catalina logs alone will be rotated.

How to running logrotate linux manually using command line

  Tidak ada komentar
Some day as system engineer i face the trouble, log rotate config on for cleaning catalina.out file was stuck, so i try to run it manually. we also can run manually for testing the log rotate configuration was running well or not than we have to wait for the running schedule automatically.

If you want to force-run a single specific directory or daemon's log files, you can usually find the configuration in /etc/logrotate.d, and they will work standalone.
Keep in mind that global configuration specified in /etc/logrotate.conf will not apply, so if you do this you should ensure you specify all the options you want in the /etc/logrotate.d/[servicename]config file specifically.
You can try it out with -d to see what would happen:

logrotate -df /etc/logrotate.d/catalina
The file of catalina.out file before execute the log rotate
[maswachid@tomcat logs]$ ls
catalina.2018-05-06.log              localhost_access_log.2018-05-22.txt  localhost_access_log.2018-06-20.txt
catalina.2018-05-07.log              localhost_access_log.2018-05-23.txt  localhost_access_log.2018-06-21.txt
catalina.2018-05-29.log              localhost_access_log.2018-05-24.txt  localhost_access_log.2018-06-22.txt
catalina.2018-06-22.log              localhost_access_log.2018-05-25.txt  localhost_access_log.2018-06-23.txt
catalina.2018-06-27.log              localhost_access_log.2018-05-26.txt  localhost_access_log.2018-06-24.txt
catalina.out                         localhost_access_log.2018-05-27.txt  localhost_access_log.2018-06-25.txt
host-manager.2018-05-06.log          localhost_access_log.2018-05-28.txt  localhost_access_log.2018-06-26.txt
host-manager.2018-05-07.log          localhost_access_log.2018-05-29.txt  localhost_access_log.2018-06-27.txt
host-manager.2018-05-29.log          localhost_access_log.2018-05-30.txt  localhost_access_log.2018-06-28.txt
when the command execute, here are the output
[maswachid@tomcat logrotate.d]$ logrotate -df /etc/logrotate.d/catalinaout_sch
reading config file /etc/logrotate.d/catalinaout_sch
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /opt/tomcatstack-7.0_scheduler/apache-tomcat/logs/catalina.out  forced from command line (7 rotations)
empty log files are rotated, old logs are removed
considering log /opt/tomcatstack-7.0_scheduler/apache-tomcat/logs/catalina.out
  log needs rotating
rotating log /opt/tomcatstack-7.0_scheduler/apache-tomcat/logs/catalina.out, log->rotateCount is 7
dateext suffix '-20180811'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.7.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.8.gz (rotatecount 7, logstart 1, i 7),
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.6.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.7.gz (rotatecount 7, logstart 1, i 6),
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.5.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.6.gz (rotatecount 7, logstart 1, i 5),
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.4.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.5.gz (rotatecount 7, logstart 1, i 4),
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.3.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.4.gz (rotatecount 7, logstart 1, i 3),
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.2.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.3.gz (rotatecount 7, logstart 1, i 2),
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.1.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.2.gz (rotatecount 7, logstart 1, i 1),
renaming /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.0.gz to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.1.gz (rotatecount 7, logstart 1, i 0),
copying /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out to /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.1
truncating /opt/tomcatstack-7.0_scheduler/apache-tomcat/logs/catalina.out
compressing log with: /bin/gzip
removing old log /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.8.gz
error: error opening /opt/tomcatstack-7.0/apache-tomcat/logs/catalina.out.8.gz: No such file or directory
[maswachid@tomcat logrotate.d]$
Then you can run (using catalina as an example):
logrotate -f /etc/logrotate.d/catalina
Execute log rotate single config manually and the result as shown bellow
[maswachid@tomcat logrotate.d]$
[maswachid@tomcat logrotate.d]$ sudo logrotate -f /etc/logrotate.d/catalinaout_sch
[maswachid@tomcat logrotate.d]$
[maswachid@tomcat logrotate.d]$ ls /opt/tomcatstack-7.0/apache-tomcat/logs/
catalina.2018-05-06.log              localhost_access_log.2018-05-21.txt  localhost_access_log.2018-06-19.txt
catalina.2018-05-07.log              localhost_access_log.2018-05-22.txt  localhost_access_log.2018-06-20.txt
catalina.2018-05-29.log              localhost_access_log.2018-05-23.txt  localhost_access_log.2018-06-21.txt
catalina.2018-06-22.log              localhost_access_log.2018-05-24.txt  localhost_access_log.2018-06-22.txt
catalina.2018-06-27.log              localhost_access_log.2018-05-25.txt  localhost_access_log.2018-06-23.txt
catalina.out                         localhost_access_log.2018-05-26.txt  localhost_access_log.2018-06-24.txt
catalina.out.1.gz                    localhost_access_log.2018-05-27.txt  localhost_access_log.2018-06-25.txt
host-manager.2018-05-06.log          localhost_access_log.2018-05-28.txt  localhost_access_log.2018-06-26.txt
host-manager.2018-05-07.log          localhost_access_log.2018-05-29.txt  localhost_access_log.2018-06-27.txt
host-manager.2018-05-29.log          localhost_access_log.2018-05-30.txt  localhost_access_log.2018-06-28.txt
localhost.2018-05-06.log             localhost_access_log.2018-05-31.txt  localhost_access_log.2018-06-29.txt
And the catalina logs alone will be rotated.